我無法使此代碼正常工作。這是由於插入,更新或刪除觸發器而執行的。相同的代碼將從幾個表觸發器中調用。因此,我事先不知道表名是什麼或它們的列是什麼。有任何想法嗎?執行字符串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