PL / pgQSL - перечисление по ROWTYPE в хранимой процедуре - PullRequest
1 голос
/ 02 сентября 2011

После загрузки данных из CSV в существующую таблицу Postgres у меня будут дубликаты записей, которые необходимо объединить.Для этого я планирую использовать хранимую процедуру, которая выполняет следующие действия:

   current_record airports%ROWTPE;
   new_record airports%ROWTYPE

   FOR current_record in SELECT * from airports ORDER BY iko  LOOP
       SELECT * into (STRICT) new_record from airports where iko=current_record.iko AND oid < current_record.oid
         -- IS IT POSSIBLE TO enumerate over each field as follows?
            FOR int i = 0; i < new_record.fields.count; i++ LOOP
               IF new_record.field[i] IS NOT NULL THEN current_record.field[i] =
               new_record.field[i] 
            END LOOP;
   END LOOP;

Могу ли я перечислять по полям, используя внутренний цикл FOR, как показано выше, или мне придется жестко кодировать логику изменений для каждого поляв таблице?Есть около 70 столбцов.

Другие лучшие способы, как это сделать, также помогут.

TIA.

1 Ответ

1 голос
/ 02 сентября 2011

Прямой поддержки этому нет.Однако вы можете запросить системные каталоги изнутри вашей функции.Но это не ускорит процесс.

Вот пример того, как сделать это в триггере.Это может привести вас в правильном направлении.

http://wiki.postgresql.org/wiki/PL/pgSQL_Dynamic_Triggers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...