Создайте таблицу, используя данные из другого столбца таблицы в форме JSON - PullRequest
0 голосов
/ 30 мая 2020

Я использую сервер Postgres. Вот как выглядит моя таблица

Here's how my table looks like.

, что означает, что столбец жанров каждого mov ie имеет форму:

[
    {'id': 18, 'name': 'Drama'},
    {'id': 36, 'name': 'History'},
    {'id': 10749, 'name': 'Romance'}
]

Как вы можете видеть жанры для каждого mov ie находятся в переменной VARCHAR и в массиве JSON.

Я хочу распаковать содержимое JSON и создать новую таблицу с именем Genres, который будет иметь каждый жанр один раз со своим уникальным идентификатором.

Итак, в верхнем примере я хочу, чтобы моя новая таблица выглядела так:

id  | genre
18  | 'Drama'
36  | 'History'.

Как я могу это сделать ?

1 Ответ

0 голосов
/ 30 мая 2020

Вы должны окончательно исправить свою схему и сохранить свои JSON данные как JSON[B] тип данных, а не как строки.

Тем не менее, одним из вариантов является принудительное преобразование в json, поэтому мы может использовать мощные json функции Постгрес, чтобы распаковать массивы и получить доступ к внутренним объектам. Насколько показывают ваши данные, вам просто нужно превратить одинарные кавычки в двойные, чтобы строки были действительными Postgres JSON, поэтому это должно работать:

insert into genres(id, genre)
select distinct js ->> 'id', js ->> 'name'
from mytable t
cross join lateral jsonb_array_elements( (replace(genres, ''', '"'))::jsonb ) j(js)
...