Что я делаю не так в этом утверждении SELECT? - PullRequest
0 голосов
/ 25 апреля 2020

Новый для postgres и SQL. Имеют несколько таблиц и пытаются написать общую функцию, которая может отслеживать любые ОБНОВЛЕНИЯ и фиксировать детали в таблице аудита.

Ссылка на форму ответа на другой форме сообщения Демиан Мартинес Этот подход решает проблему и мне не нужно жестко кодировать имена столбцов и поддерживать функцию.

Однако, когда я пытаюсь включить имя входа в оператор вставки, как показано, я получаю сообщение, указывающее на некоторую проблему синтаксиса в операторе 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... 

Понятия не имею, что я делаю не так и как исправить. Кто-нибудь может посоветовать, пожалуйста?

1 Ответ

2 голосов
/ 25 апреля 2020

Если вы хотите использовать 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. Вам нужно будет указать правильные целевые столбцы, где я поставлю ???

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...