sql >> Database >  >> RDS >> PostgreSQL

Hoe krijg ik een json-object als kolom in postgresql?

Dat kun je niet "dynamisch" doen. U moet de kolommen specificeren die u wilt hebben:

select name, description, id, 
       data ->> 'tax' as tax,
       data ->> 'other_attribute' as other_attribute
from core;

Als je dat veel doet, wil je dat misschien in beeld brengen.

Een andere optie is om in Postgres een objecttype te maken dat de attributen in uw JSON vertegenwoordigt, b.v.

create type core_type as (id integer, tax numeric, price numeric, code varchar);

U kunt dan de JSON naar dat type casten en de bijbehorende attributen van de JSON worden automatisch geconverteerd naar kolommen:

Met het bovenstaande type en de volgende JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"} je kunt doen:

select id, (json_populate_record(null::core_type, data)).*
from core;

en het zal terugkeren:

id | tax  | price | code
---+------+-------+-----
 1 | 4.50 |    10 | YXCV

Maar u moet ervoor zorgen dat elke JSON-waarde kan worden gecast naar het type van het corresponderende objectveld.

Als u het objecttype wijzigt, wordt elke query die het gebruikt automatisch bijgewerkt. Via een centrale definitie kunt u dus de kolommen waarin u geïnteresseerd bent beheren.



  1. Wat is de beste manier om html-code op te slaan in mysql?

  2. Hoe u een set gegevens beter kunt dupliceren in SQL Server

  3. Hoe slecht is het gebruik van SELECT MAX(id) in MYSQL in plaats van mysql_insert_id() in PHP?

  4. Slaapstand codeert verkeerd tijdens persistente objecten [UTF-8]