Postgres dblink_exec在触发器函数中

时间:2013-09-16 11:56:48

标签: sql postgresql exec dblink

运行触发器并尝试运行以下函数时出现错误

CREATE OR REPLACE FUNCTION insert_new_sessions()
    RETURNS trigger AS
$$
DECLARE
BEGIN
SELECT dblink_exec('dbname=billing  port=5432','INSERT INTO md.radacct_test(radacctid,acctsessionid,acctuniqueid,username) select New.radacctid,New.acctsessionid,New.acctuniqueid,New.username' );

    RETURN NULL;
    EXCEPTION    WHEN OTHERS THEN RAISE NOTICE 'insert_new_sessions SQL ERROR: %', SQLERRM;

    RETURN NULL;
END;
$$  LANGUAGE plpgsql;

错误:

ERROR insert_new_sessions SQL ERROR: missing FROM-clause entry for table "new"

2 个答案:

答案 0 :(得分:1)

因为你在字符串中有NEW,所以将解释为一个字符串?尝试将NEW.xxx值与字符串的其余部分连接起来。 例如。 INSERT INTO md.radacct_test(...) SELECT ' || NEW.radacctid ||', ' || NEW.acctsessionid || ', ' || NEW.acctuniqueid || ', ' || quote_nullable(NEW.username));

答案 1 :(得分:-1)

我认为OLD和NEW关键字区分大小写。