Postgresql PLTCL函数新($1)不会返回所需结果

Postgresql PLTCL函数新($1)不会返回所需结果,postgresql,tcl,Postgresql,Tcl,我有一个从触发器运行的PLTCL函数: CREATE OR REPLACE FUNCTION get_num() RETURNS trigger AS $$ spi_exec "UPDATE counter SET num = num + 1 WHERE tbl='$TG_table_name' RETURNING num" set NEW('$1') $num elog NOTICE "$1 --> [array get NEW]"; return

我有一个从触发器运行的PLTCL函数:

CREATE OR REPLACE FUNCTION get_num() RETURNS trigger AS $$
spi_exec "UPDATE counter SET num = num + 1 WHERE tbl='$TG_table_name' RETURNING num"
set NEW('$1') $num
elog NOTICE "$1 --> [array get NEW]";
return [array get NEW]
$$ LANGUAGE pltcl STRICT;
但它返回带有单引号“num”的新数组。例如:

18:49:38 NOTICE:  extra {} total 20000 id 31 'inv_num' 1 ts {2021-04-08 21:49:38.161285+02} fk_client 1 
这就是我想要完成的:

18:49:38 NOTICE:  extra {} total 20000 id 31 inv_num 1 ts {2021-04-08 21:49:38.161285+02} fk_client 1 

CREATE TRIGGER get_inv_number before insert ON invoice FOR EACH ROW   EXECUTE PROCEDURE get_num('inv_num');
CREATE TRIGGER get_pro_number before insert ON proforma FOR EACH ROW EXECUTE PROCEDURE get_num('pro_num');
CREATE TRIGGER get_pay_number before insert ON payment FOR EACH ROW EXECUTE PROCEDURE get_num('pay_num');

谢谢

好的,我找到了一个解决方案,而不是设置新(“$1”)。。。或者设置新的($1)。。。(PostgreSQL官方网站错误)您需要使用大括号替换,如set NEW({$1})


谢谢大家的帮助

。。。省略
set
行中的单引号?它将给出一个错误:bind消息提供1个参数,但prepared语句“”需要0使用
set NEW($1)$num
会给出这样的错误吗?必须在跟踪方面做一些有趣的事情。在问题主体中也包括相关的
CREATE TRIGGER
,格式正确,便于阅读。这是愚弄外部解释层的好方法。完全正确。
CREATE OR REPLACE FUNCTION get_num() RETURNS trigger AS $$
    spi_exec "UPDATE counter SET num = num + 1 WHERE tbl='$TG_table_name' RETURNING num"
    set NEW(${1}) $num
    elog NOTICE "NEW ARRAY: [array get NEW]"
    return [array get NEW]
$$ LANGUAGE pltcl STRICT;