postgresql 函数 插入命令 包含变量的问题

上代码吧

CREATE OR REPLACE FUNCTION "public"."copy_to_self_copy"()
  RETURNS "pg_catalog"."trigger" AS $BODY$ 
  declare copy_name varchar(255);
BEGIN
    copy_name = TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME ||'_copy';
    insert into copy_name  values (new );
    return new;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

我希望达到,这种效果,当 名为”a" 的表中 插入一条数据后, 他会在“a_copy” 的表中 同样插入一条数据。
我就把变量放在了 insert into [ 变量] values( new);

这样,这个不能识别 这个变量,直接把他当作 copy_name 了。

另一种方式


CREATE OR REPLACE FUNCTION "public"."copy_to_self_copy"()
  RETURNS "pg_catalog"."trigger" AS $BODY$ 
  declare copy_name varchar(255);
BEGIN
    copy_name = TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME ||'_copy';
    Execute 'insert into '|| copy_name ||'  values '||new;
    return new;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

我把 他转成 字符串拼接的,但是问题又出现了, new 这个东西, 不能 解析成 本身的数据类型。

你把new 写成字符串 可以吗。


CREATE OR REPLACE FUNCTION "public"."copy_to_self_copy"()
  RETURNS "pg_catalog"."trigger" AS $BODY$ declare copy_name varchar(255);BEGIN
        copy_name = TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME ||'_copy';
        execute 'insert into ' ||copy_name||'  values ($1.*)' using new;
        return new;

    END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

Stack Overflow 真是 yyds