Extrahiere Schlüssel, Wert von json Objekten in Postgres

Ich habe eine Postgres-Tabelle mit ähnlichem Inhalt:

id  | data

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

Die erste Spalte ist eine Ganzzahl und die zweite eine JSON-Spalte.

Ich möchte in der Lage sein, die Schlüssel und Werte von json zu erweitern, damit das Ergebnis so aussieht:

id  | key  | value

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

Kann dies in Postgres SQL erreicht werden?

Was ich versucht habe

Gegeben, dass die Originaltabelle als solche simuliert werden kann:

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)

Ich bekomme nur die Schlüssel mit:

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)

Und ich kann sie wie folgt als Datensatz erhalten:

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)

Aber ich kann nicht herausfinden, wie ich das Ergebnis mit id, key und value erzielen kann.

Irgendwelche Ideen

Hinweis: Der echte Json, mit dem ich arbeite, ist bedeutend verschachtelter als dieser, aber ich denke, dieses Beispiel stellt mein zugrunde liegendes Problem gut dar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage