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;