【发布时间】:2016-10-15 21:51:22
【问题描述】:
我尝试按照以下说明进行操作:
https://wiki.postgresql.org/wiki/Audit_trigger
以 JSON 形式审核值
对于 PostgreSQL 9.2 或带有出色 json_91 插件的 9.1,您可以 将表中的旧值和新值记录为结构化 json 而不是 纯文本,让您更有能力查询您的审计历史。 只需更改 v_old_data、v_new_data、original_data 和 new_data 从 TEXT 到 json,然后替换 ROW(OLD.) 和 ROW(NEW.) 分别使用 row_to_json(OLD) 和 row_to_json(NEW)。
但是这给我一个错误:
CREATE OR REPLACE FUNCTION add_log (name text, Action TEXT, data jsonb, OUT RETURNS BOOLEAN)
AS $$
BEGIN
RETURNS = true;
END;
$$
LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION log_city() RETURNS TRIGGER AS
$$
DECLARE
v_new_data jsonb;
BEGIN
IF (TG_OP = 'UPDATE') THEN
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
v_new_data := row_to_jsonb(NEW);
EXECUTE add_log('City', 'City.New', v_new_data);
RETURN NEW;
END IF;
RETURN NULL; -- result is ignored since this is an AFTER trigger
END;
$$ LANGUAGE plpgsql;
INSERT INTO Location (city, state, country) values ('a', 'b' , 'c')
它说:
错误:函数 row_to_jsonb(location) 不存在
如果我输入v_new_data := row_to_jsonb(ROW(NEW));,那么我会得到:
错误:函数 row_to_jsonb(record) 不存在
【问题讨论】:
-
我再试一次,是的,使用 json 可以,但使用 jsonb 不行。
标签: json postgresql triggers postgresql-9.5