Neexistuje žádný operátor rovnosti (nebo nerovnosti) pro datový typ json
jako celek, protože rovnost se těžko nastoluje. Zvažte jsonb
v Postgres 9.4 nebo novější, kde je to možné. Více podrobností v této související odpovědi na dba.SE (poslední kapitola):
- Jak odstranit známé prvky z pole JSON[] v PostgreSQL?
SELECT DISTINCT json_column ...
nebo ... GROUP BY json_column
selhat ze stejného důvodu (žádný operátor rovnosti).
Přetypování obou stran výrazu do text
umožňuje =
nebo <>
operátory, ale to obvykle není spolehlivé, protože existuje mnoho možných textových reprezentací pro stejné hodnota JSON. V Postgresu 9.4 nebo novějším převádějte do jsonb
namísto. (Nebo použijte jsonb
pro začátek.)
Nicméně , pro tento konkrétní případ (prázdný objekt ) funguje to dobře:
select * from test where foo::text <> '{}'::text;