Não há operador de igualdade (ou desigualdade) para o tipo de dados
json como um todo, porque a igualdade é difícil de estabelecer. Considere jsonb no Postgres 9.4 ou posterior, onde isso for possível. Mais detalhes nesta resposta relacionada em dba.SE (último capítulo):- Como remover elementos conhecidos de um array JSON[] no PostgreSQL?
SELECT DISTINCT json_column ... ou ... GROUP BY json_column falham pelo mesmo motivo (sem operador de igualdade). Convertendo ambos os lados da expressão para
text permite = ou <> operadores, mas isso normalmente não é confiável, pois há muitas representações de texto possíveis para o mesmo valor JSON. No Postgres 9.4 ou posterior, converta para jsonb em vez de. (Ou use jsonb começar com.) No entanto , para este caso específico (objeto vazio ) funciona muito bem:
select * from test where foo::text <> '{}'::text;