我无法使此代码正常工作。这是由于插入,更新或删除触发器而执行的。相同的代码将从几个表触发器中调用。因此,我事先不知道表名是什么或它们的列是什么。有任何想法吗?执行字符串Postgres
EXECUTE format('INSERT INTO %s VALUES %s', _tbl, (OLD).*);
误差约为字符串没有引号包围:
ERROR: column "bangor" does not exist
LINE 1: INSERT INTO sample_test_table_deletes VALUES (3,bangor,D,"20...
^
在另一方面,下面的工作:
INSERT INTO my_table VALUES((OLD).*);
也就是说,当查询不是通过一个执行块。
更新(触发代码):
CREATE OR REPLACE FUNCTION sample_trigger_func() RETURNS TRIGGER AS $$
DECLARE
operation_code char;
table_name varchar(50);
delete_table_name varchar(50);
old_id integer;
BEGIN
table_name = TG_TABLE_NAME;
delete_table_name = TG_TABLE_NAME || '_deletes';
SELECT SUBSTR(TG_OP, 1, 1)::CHAR INTO operation_code;
IF TG_OP = 'DELETE' THEN
OLD.mod_op = operation_code;
OLD.mod_date = now();
RAISE INFO 'OLD: %', (OLD).name;
EXECUTE format('INSERT INTO %s VALUES %s', delete_table_name, (OLD).*);
ELSE
EXECUTE format('UPDATE TABLE %s SET mod_op = %s AND mod_date = %s'
, TG_TABLE_NAME, operation_code, now());
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
什么是你的错误? '_tbl' com从哪里来?什么是触发器的**完整**代码? –
嗨。谢谢。我添加了错误。 –
那触发代码呢?请不要与我们一起玩20个问题... – Kevin