A PostgreSQL instance stores data in JSONB format:
CREATE TABLE myschema.mytable (
id BIGSERIAL PRIMARY KEY,
data JSONB NOT NULL
)
The data array might contain objects like:
{
"observations": {
"temperature": {
"type": "float",
"unit": "C",
"value": "23.1"
},
"pressure": {
"type": "float",
"unit": "mbar",
"value": "1011.3"
}
}
}
A selected row should be returned as key-value pairs in a format like:
temperature,type,float,value,23.1,unit,C,pressure,type,float,value,1011.3,unit,mbar
The following query returns at least each object, while still JSON:
SELECT id, value FROM mytable JOIN jsonb_each_text(mytable.data->'observations') ON true;
1 | {"type": "float", "unit": "mbar", "value": 1140.5}
1 | {"type": "float", "unit": "C", "value": -0.9}
5 | {"type": "float", "unit": "mbar", "value": "1011.3"}
5 | {"type": "float", "unit": "C", "value": "23.1"}
But the results are splitted and not in text format.
How can I return key-value pairs of all objects in data?
temperature,float,23.1,C,pressure,float,1011.3,mbarwould be sufficient, too.