【发布时间】:2015-01-23 21:51:42
【问题描述】:
我正在尝试记录更改(如果对表进行了任何更改),但是在尝试循环访问列名时我被卡住了。我收到“数组值必须以“{”开头...第 6 行 FOR over SELECT 行”错误。我不明白为什么会发生这种情况。该函数编译正常,但运行更新会出现该错误。
CREATE TABLE test(x varchar(50))
CREATE OR REPLACE FUNCTION testF()
RETURNS trigger
AS $$
DECLARE
col varchar[255]; //don't know if this is the right variable type to use
BEGIN
IF OLD.* IS DISTINCT FROM NEW.* THEN
FOR col in SELECT column_name FROM information_schema.columns WHERE table_schema = TG_TABLE_SCHEMA AND table_name = TG_TABLE_NAME LOOP
INSERT INTO test(x) VALUES(col||'oldValue:'||OLD.col||'newValue:'||NEW.col); //I want to put the name and the old and new values in a varchar field
END LOOP;
END IF;
RETURN NULL;
END $$ LANGUAGE plpgsql;
CREATE TRIGGER testT AFTER UPDATE
ON "triggerTable" FOR EACH ROW EXECUTE PROCEDURE testF();
【问题讨论】:
-
为什么不使用现有的解决方案之一? okbob.blogspot.co.uk/2015/01/… 或 wiki.postgresql.org/wiki/Audit_trigger_91plus
-
@a_horse_with_no_name 会尝试
-
re:第一个评论正确的类型是postgres内置的
name,AIUI是一种varchar[64],第二个评论,一点都不简单。
标签: postgresql for-loop triggers plpgsql