解释问题的最简单方法是使用审计触发器。
但是,在插入时它会保存所有值,包括空值。我想过滤掉hstore(NEW.*)
. 最简单/最快的方法是什么?
来源:https ://github.com/2ndQuadrant/audit-trigger/blob/master/audit.sql#L134
audit_row.row_data = hstore(NEW.*) - excluded_cols;
这显然不起作用,但希望能解释答案的样子。
audit_row.row_data = hstore(hstore(NEW.*) FILTER (WHERE value IS NOT NULL)) - excluded_cols;
首选将回答不使用用户创建的函数,例如仅使用 Postgres 函数/运算符。
这适用于 >= PostgreSQL 11。
我正在寻找一个解决方案hstore
,而不是json
或jsonb
。json
具有或jsonb
可以包括的替代方式,但是hstore
是优选的。
仅使用 Postgres 的内置工具和附加模块
hstore
,不涉及jsonb
(根据要求):hstore()
函数的重载变体之一采用二维数组。或者,您可以消除子句中列出的键名
excluded_cols
(WHERE
同时处理未嵌套的键):可能会快一点,不确定。应该没有太大区别吧。
也不确定 jsonb
and
jsonb_strip_nulls()`(在评论中建议)如何进行比较。您可以通过性能比较报告吗?你可以试试这个:
record
,例如:empty_row
然后,您可以在函数的不同位置重用
empty_row
。