【发布时间】:2021-03-07 07:15:14
【问题描述】:
我正在尝试使用触发器将最后插入的行从表中复制到 csv 文件中。
CREATE TRIGGER new_tbc_order
AFTER INSERT
ON trig_test
FOR EACH ROW
EXECUTE PROCEDURE write_last_tbc_order();
CREATE OR REPLACE FUNCTION write_last_tbc_order()
RETURNS TRIGGER
LANGUAGE plpgsql
as $$
BEGIN
EXECUTE 'COPY (
select i.id, i.paid, i.no_items FROM (SELECT NEW.*) AS i
) TO ''/Users/fred/Desktop/last_tbc_order.csv'' csv;' USING NEW;
RETURN NEW;
END; $$
我已经在各种版本中尝试过这个,有或没有 EXECUTE,但我仍然收到错误。
ERROR: missing FROM-clause entry for table "new"
LINE 1: ...opy (select i.id, i.paid, i.no_items FROM (SELECT NEW.*) AS ...
^
只是无法让它访问新数据。
我哪里错了?
【问题讨论】:
-
试试
... from (select ($1).*) ..' using new -
我做到了。也没有用。
-
我会再试一次,以防我错过了一个括号
-
错误:没有参数 $1 LINE 1: ...py (select i.id, i.paid, i.no_items FROM (select ($1).*) AS ... ^
-
我不确定您要完成什么,但使用这样的触发器很可能是个坏主意。首先 - 复制到文件需要数据库超级用户权限,因此不建议用于生产。如果多个连接会并行执行插入
标签: sql postgresql triggers