Есть таблица table1 с полем float4[][]. Есть другая таблица table2 с полями float, float. Вопрос: как выполнить вставку в table1, чтобы сформировать из двух колонок второй таблицы один массив для первой таблицы?
CREATE TABLE Table2
( id_record int4 NOT NULL, Column1 int4, Column2 int4, ... United columns float8[], ...)
Вот приблизительная структура таблиц. Необходимо заполнить UnitedColumn таблицы Table2 значениями из column2 и column3 Table1. То есть значения из указанных колонок определенного набора строк первой таблицы надо разместить в качестве массива в строке второй таблицы.
В общем ясно. Я таки нашел решение. Может кому еще пригодится.
Для начала стоит объединить эти столбцы во временной таблице с каким-нибудь признаком для упорядочивания:
INSERT INTO temp(temp_float,reason) SELECT Column1,1 FROM Table1 WHERE ... UNION SELECT Column2,2 FROM Table1 WHERE ...
А потом выполнить следующий запрос:
INSERT INTO Table2 (Column1, Column2 ) VALUES ... | SELECT ... ;
UPDATE Table2 SET UnitedColumn = ( SELECT ARRAY( SELECT temp_float FROM temp ORDER BY reason)) [ WHERE ... ]
После таких нехитрых операций получаем требуемый массив в поле.
Работа с массивами
Определите поконкретней структуру таблиц, чтобы точно ответить на ваш вопрос.
CREATE TABLE Table1 (
CREATE TABLE Table1
( column1 int4, column2 float8, column3 float8, id_record int4 NOT NULL DEFAULT nextval(('id_record_v'::text)::regclass),... )
CREATE TABLE Table2
( id_record int4 NOT NULL, Column1 int4, Column2 int4, ... United columns float8[], ...)
Вот приблизительная структура таблиц. Необходимо заполнить UnitedColumn таблицы Table2 значениями из column2 и column3 Table1. То есть значения из указанных колонок определенного набора строк первой таблицы надо разместить в качестве массива в строке второй таблицы.
ВОТЪ
В общем ясно. Я таки нашел решение. Может кому еще пригодится.
Для начала стоит объединить эти столбцы во временной таблице с каким-нибудь признаком для упорядочивания:
INSERT INTO temp(temp_float,reason) SELECT Column1,1 FROM Table1 WHERE ... UNION SELECT Column2,2 FROM Table1 WHERE ...
А потом выполнить следующий запрос:
INSERT INTO Table2 (Column1, Column2 ) VALUES ... | SELECT ... ;
UPDATE Table2 SET UnitedColumn = ( SELECT ARRAY( SELECT temp_float FROM temp ORDER BY reason)) [ WHERE ... ]
После таких нехитрых операций получаем требуемый массив в поле.