我想知道我是否可以在表上使用触发器来“忽略”来自STDIN的COPY语句中但不在目标表中的列。对不起,如果问题的措辞/语法是关闭的,但这里是对我想说的内容的解释。我是触发器的新手,所以任何建议都有帮助。
我正在使用PostGIS Shapefile导入程序将shapefile复制到PostgreSQL数据库中的空间表。
这将创建一个COPY语句,其中包含shapefile中的所有字段,如:
COPY "public"."stations" ("column1","column2","column3","column4", geom) FROM stdin;
column1和column2在文件中,但不在目标表中,因此COPY失败。
有没有办法创建一个触发器来创建具有相同结果的东西:
COPY "public"."stations" ("column3","column4", geom) FROM stdin;
答案 0 :(得分:2)
不,您不能跳过输入文件中存在的列。这将导致错误输出,甚至在调用触发器之前。你也不能使用规则。 I quote the manual:
COPY FROM将调用任何触发器并检查约束 目的地表。但是,它不会调用规则。
您可以编辑文件或使用临时登台表:
COPY
到具有匹配列的临时表。
使用INSERT
将所需列写入最终目标表 - 或者更复杂的SQL DDL命令范围。