Как вставить данные JSONB из зависимой таблицы - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь вставить данные в поле JSONB на основе зависимой таблицы.

По сути, я хочу сделать это (игнорировать, почему это просто пример запроса):

insert into myschema.teams (team_name, params)
select users.team_name, '{"team_name": teams.team_id, "user_name": users.username }'
from myschema.users
where users.team_name is not null;

Как написано, я получаю эти ошибки:

ERROR:  invalid input syntax for type json
LINE 2: ... '{"team_name...
            ^                                                 
DETAIL:  Token "teams" is invalid.
CONTEXT:  JSON data, line 1: {"team_name": teams...

1 Ответ

1 голос
/ 07 ноября 2019

Вы используете строковый литерал, который не содержит допустимый JSON. Интерполяция не выполняется - вам нужно использовать функцию jsonb_build_object для создания значения JSONB из динамических значений. (Вы также можете выполнить конкатенацию строк и приведение текста к json, но, пожалуйста, не делайте этого).

insert into myschema.teams (team_name, params)
select users.team_name, jsonb_build_object('team_name', teams.team_name, 'user_name', users.username)
from myschema.users
where users.team_name is not null;
...