我试着按照下面的解释做:https://wiki.postgresql.org/wiki/Audit_trigger将值审核为JSON对于PostgreSQL 9.2或9.1,使用奇妙的json_91插件,您可以将表中的新旧值记录为结构化json,而不是纯文本,让你有更多的权力查询你的审计历史。只需更改旧数据、新数据、原始数据和将数据从文本新建为json,然后替换ROW(OLD.)和ROW(new.)分别使用row_to_json(旧)和row_to_json(新)。但是这让我犯了个错误: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$$DECLAREv_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 triggerEND;$$ LANGUAGE plpgsql;INSERT INTO Location (city, state, country) values ('a', 'b' , 'c')上面写着:错误:函数RoviTojJSONB(位置)不存在如果我输入v_new_data := row_to_jsonb(ROW(NEW));则得到:错误:函数RoviTojJSONB(记录)不存在 最佳答案 上面写着表9-42显示了可用于创建json的函数和jsonb值。(对于row_to_json和array_to_json函数。但是,to_jsonb函数提供与这些函数几乎相同的功能会的。)因此必须使用row_to_json。不存在子表达式,但也会为类型生成所需的结果。