Извлечь ключ, значение из объектов JSON в Postgres

У меня есть таблица Postgres, которая имеет содержание, подобное этому:

id  | data

1   | {"a":"4", "b":"5"}
2   | {"a":"6", "b":"7"}
3   | {"a":"8", "b":"9"}

Первый столбец - это целое число, а второй - столбец json.

Я хочу иметь возможность раскрывать ключи и значения из json, чтобы результат выглядел следующим образом:

id  | key  | value

1   | a    | 4
1   | b    | 5
2   | a    | 6
2   | b    | 7
3   | a    | 8
3   | b    | 9

Может ли это быть достигнуто в Postgres SQL?

Что я пробовал

Учитывая, что исходная таблица может быть смоделирована как таковая:

select *
from 
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)

Я могу получить только ключи, используя:

select id, json_object_keys(data::json)
from 
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)

И я могу получить их как наборы записей, как это:

select id, json_each(data::json)
from 
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)

Но я не могу понять, как достичь результата с помощью идентификатора, ключа и значения.

Есть идеи?

Примечание: настоящий json, с которым я работаю, значительно больше вложен, чем этот, но я думаю, что этот пример хорошо отражает мою основную проблему.

Ответы на вопрос(1)

Ваш ответ на вопрос