Extrair chave, valor de objetos json no Postgres

Eu tenho uma tabela do Postgres que possui conteúdo semelhante a este:

id  | data

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

A primeira coluna é um número inteiro e a segunda é uma coluna json.

Eu quero poder expandir as chaves e os valores do json para que o resultado fique assim:

id  | key  | value

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

Isso pode ser alcançado no Postgres SQL?

O que eu tentei

Dado que a tabela original pode ser simulada como tal:

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)

Posso obter apenas as chaves usando:

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)

E posso obtê-los como conjuntos de registros como este:

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)

Mas não consigo descobrir como alcançar o resultado com identificação, chave e valor.

Alguma ideia?

Nota: o json real com o qual estou trabalhando é significativamente mais aninhado que isso, mas acho que este exemplo representa bem o meu problema subjacente.

questionAnswers(1)

yourAnswerToTheQuestion