sql >> Database >  >> RDS >> PostgreSQL

Hoe een json-kolom opvragen voor lege objecten?

Er is geen operator voor gelijkheid (of ongelijkheid) voor het gegevenstype json als geheel, omdat gelijkheid moeilijk vast te stellen is. Overweeg jsonb in Postgres 9.4 of later, waar dit mogelijk is. Meer details in dit gerelateerde antwoord op dba.SE (laatste hoofdstuk):

  • Hoe verwijder ik bekende elementen uit een JSON[]-array in PostgreSQL?

SELECT DISTINCT json_column ... of ... GROUP BY json_column mislukken om dezelfde reden (geen operator voor gelijkheid).

Beide zijden van de uitdrukking casten naar text staat = . toe of <> operators, maar dat is normaal gesproken niet betrouwbaar omdat er veel mogelijke tekstrepresentaties zijn voor dezelfde JSON-waarde. In Postgres 9.4 of hoger, cast naar jsonb in plaats van. (Of gebruik jsonb om mee te beginnen.)

Echter , voor dit specifieke geval (leeg object ) het werkt prima:

select * from test where foo::text <> '{}'::text;


  1. Een varchar-kolom upgraden naar enum-type in postgresql

  2. Eenvoudige CRUD-bewerking met PDO-databaseverbinding

  3. Oracle JDeveloper 12c gebruiken met Oracle Database 12c op Oracle Cloud Platform, deel 2

  4. Dump alle tabellen in CSV-formaat met 'mysqldump'