PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie frage ich eine JSON-Spalte nach leeren Objekten ab?

Es gibt keinen Gleichheits- (oder Ungleichheits-)Operator für den Datentyp json als Ganzes, weil Gleichberechtigung schwer herzustellen ist. Betrachten Sie jsonb in Postgres 9.4 oder höher, wo dies möglich ist. Weitere Details in dieser verwandten Antwort auf dba.SE (letztes Kapitel):

  • Wie entferne ich bekannte Elemente aus einem JSON[]-Array in PostgreSQL?

SELECT DISTINCT json_column ... oder ... GROUP BY json_column scheitern aus demselben Grund (kein Gleichheitsoperator).

Umwandlung beider Seiten des Ausdrucks in text erlaubt = oder <> Operatoren, aber das ist normalerweise nicht zuverlässig, da es viele mögliche Textdarstellungen für dasselbe gibt JSON-Wert. In Postgres 9.4 oder höher in jsonb umwandeln stattdessen. (Oder verwenden Sie jsonb zu beginnen.)

Allerdings , für diesen speziellen Fall (leeres Objekt ) es funktioniert einwandfrei:

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