#postgresql #plpgsql
Вопрос:
Я хочу объявить переменный массив bkgws
для таблицы gangwei
с именами столбцов подмножества col1
, и col2
вот что я пытаюсь:
DO $ DECLARE bkgws gangwei(col1, col2)[] := {('fo1','bar1'),('fo2','bar2')}; -- here, syntax error BEGIN INSERT INTO gangwei (config_id, col1, col2) SELECT 1, col1, col2 FROM unnest(bkgws); END;$;
при условии gangwei
, что все столбцы являются id, config_id, col1, col2
.
литерал ('fo1','bar1'),('fo2','bar2')
построен на уровне приложения.
Ответ №1:
Вам нужно создать составной тип до того, как по команде CREATE TYPE AS
CREATE TYPE gangwei AS (col1 varchar, col2 varchar); DO $ DECLARE bkgws gangwei[] DEFAULT '{"(foo, bar)", "(foo2, bar2)"}'; r record; BEGIN FOR r IN SELECT * FROM unnest(bkgws) LOOP RAISE NOTICE '% %', r.col1, r.col2; END LOOP; END; $; NOTICE: foo bar NOTICE: foo2 bar2 DO
Ответ №2:
Вам необходимо указать имена столбцов при unpack
создании массива:
... FROM unnest(bkgws) AS arr(col1,col2)