Det finns ingen operatör för jämlikhet (eller ojämlikhet) för datatypen json som helhet, eftersom jämställdhet är svårt att etablera. Överväg jsonb i Postgres 9.4 eller senare, där detta är möjligt. Mer detaljer i detta relaterade svar på dba.SE (sista kapitlet):
- Hur tar man bort kända element från en JSON[]-array i PostgreSQL?
SELECT DISTINCT json_column ... eller ... GROUP BY json_column misslyckas av samma anledning (ingen jämställdhetsoperatör).
Castar båda sidor av uttrycket till text tillåter = eller <> operatorer, men det är normalt inte tillförlitligt eftersom det finns många möjliga textrepresentationer för samma JSON-värde. I Postgres 9.4 eller senare, casta till jsonb istället. (Eller använd jsonb till att börja med.)
Men , för det här specifika fallet (tomt objekt ) det fungerar bra:
select * from test where foo::text <> '{}'::text;