postgres和SQL的新功能。没有几个表,试图编写可跟踪任何更新并在审计表中捕获详细信息的通用函数。
[另请参阅回复表Demian Martinez这种方法解决了这个问题,我不必硬编码列名和维护函数。
但是,当我尝试将登录名包括在插入语句中时,如图所示,我收到的消息表明SELECt语句中存在某些语法问题。
insert into request_trail (Requ_Id,Time_stam,Acti,uid,Deta) values ('ST00000011',now(),'U',1234567,
SELECT pre.key AS columname, pre.value AS prevalue, post.value AS postvalue
FROM jsonb_each('{"col1": "same", "col2": "prediff", "col3": 1, "col4": false}') AS pre
CROSS JOIN jsonb_each('{"col1": "same", "col2": "postdiff", "col3": 1, "col4": true}') AS post
WHERE pre.key = post.key AND pre.value IS DISTINCT FROM post.value
AND pre.key IN ('col1', 'col2'));
ERROR: syntax error at or near "SELECT"
LINE 2: SELECT pre.key AS columname, pre.value AS prevalue, post.val...
不知道我在做什么错以及如何解决。可以请教一下吗?
如果要使用INSERT .. SELECT,则不能使用VALUES子句。要使用常量值,只需将它们添加到SELECT列表中。
insert into request_trail (Requ_Id,Time_stam,Acti,uid,Deta,?????)
SELECT 'ST00000011',
now(),
'U',
1234567,
pre.key AS columname,
pre.value AS prevalue,
post.value AS postvalue
FROM jsonb_each('{"col1": "same", "col2": "prediff", "col3": 1, "col4": false}') AS pre
CROSS JOIN jsonb_each('{"col1": "same", "col2": "postdiff", "col3": 1, "col4": true}') AS post
WHERE pre.key = post.key AND pre.value IS DISTINCT FROM post.value
AND pre.key IN ('col1', 'col2'));
但是,上述操作仍然会失败,因为SELECT的列比INSERT指定的更多。您将必须在???