我尝试按照以下说明进行操作:
https://wiki.postgresql.org/wiki/Audit_trigger
将值审核为JSON
对于PostgreSQL 9.2或9.1带有梦幻般的json_91插件,你可以 将表中的旧值和新值记录为结构化的json而不是 平面文字,为您提供更多查询审核历史记录的能力。 只需更改v_old_data,v_new_data,original_data和的类型即可 从TEXT到json的new_data,然后替换ROW(OLD。)和ROW(NEW。) 分别使用row_to_json(OLD)和row_to_json(NEW)。
然而,这给我一个错误:
egg TRUE
bootleggers egg TRUE
egg is good TRUE
eggisgood TRUE
egg and ham TRUE
eggs and hams TRUE
bootleggers TRUE
eggshells TRUE
veggie TRUE
reggae TRUE
它说:
错误:函数row_to_jsonb(位置)不存在
如果我放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(记录)不存在
答案 0 :(得分:1)
表9-42显示了可用于创建json的函数 和jsonb值。 (jsonb没有等效的功能 row_to_json和array_to_json函数。但是,to_jsonb 功能提供与这些功能大致相同的功能 会。)
因此必须使用它row_to_json
。 row_to_jsonb不存在,但row_to_json
也会为JSONB
类型生成所需的结果。