Использование json_to_record () для добавления новой строки в таблицу PostgresSQL - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть table_A с двумя столбцами:

create table table_a(id int, data json);

Строка может быть:

insert into table_a values
(1, '{"name": "kate", "cellphone": "000-000-0000", "address": "some text here"}');

Я хочу написать функцию, которая будет брать строку из table_A и вставлять новыйстрока в таблицу_B.В Table_B есть столбцы: id целое число, имя VARCHAR, мобильный телефон VARCHAR, адрес TEXT, дополнительная_информация TEXT.

Поэтому моя функция должна проанализировать поле json и поместить каждое значение в соответствующий столбец таблицы Table_B (предположим, что все возможные столбцы существуютв Table_B).

Похоже, я могу использовать json_to_record (json), но как я могу вставить возвращаемые значения в Table_B?

Я использую PyGreSQL для соединения с моей базой данных.

1 Ответ

0 голосов
/ 15 декабря 2018

Вы должны использовать функцию в боковом соединении.Список определений столбцов должен быть добавлен, так как функция возвращает record.

select id, r.*
from table_a
cross join lateral 
    json_to_record(data) 
    as r(name varchar, cellphone varchar, address text, additional_info text)

 id | name |  cellphone   |    address     | additional_info 
----+------+--------------+----------------+-----------------
  1 | kate | 000-000-0000 | some text here | 
(1 row) 

Оператор вставки может выглядеть следующим образом:

insert into table_b
select id, r.*
from table_a
cross join lateral 
    json_to_record(data) 
    as r(name varchar, cellphone varchar, address text, additional_info text)
...