PL / pgQSL - 在存储过程中枚举ROWTYPE

时间:2011-09-02 04:23:10

标签: postgresql stored-procedures csv

将数据从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 个答案:

答案 0 :(得分:1)

没有直接的支持。但是,您可以从函数中查询系统目录。但这不会让事情变得更快。

以下是如何在触发器中执行此操作的示例。这可能会让你开始朝着正确的方向前进。

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