在此SELECT语句中我在做什么错?

问题描述 投票:-1回答:1

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... 

不知道我在做什么错以及如何解决。可以请教一下吗?

postgresql sql-insert
1个回答
0
投票

如果要使用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指定的更多。您将必须在???

上指定正确的目标列
© www.soinside.com 2019 - 2024. All rights reserved.