1

我想知道是否可以在表上使用触发器来“忽略”来自 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;
4

1 回答 1

2

不,您不能跳过输入文件中存在的列。这将在触发器被调用之前出错。你也不能使用规则。我引用手册

COPY FROM 将调用任何触发器并检查目标表上的约束。但是,它不会调用规则。

您可以编辑文件或使用临时登台表

  1. COPY到具有匹配列的临时表。

  2. 用于INSERT将所需列写入最终目标表 - 或用于更复杂事务的 SQL DDL 命令的整个范围。

于 2012-06-14T02:36:09.487 回答