В PostgreSQL как фильтровать столбец массива и искать только уникальные значения? - PullRequest
1 голос
/ 16 июня 2019

Я пытаюсь сравнить значения в таблице истории, заполненной триггером обновления, чтобы увидеть, равны ли определенные столбцы в старых и новых значениях полей JSON, и если все равны, тогда можно создать случай при запросе.Вот что я пытаюсь сделать:

SQL

create table history
(
    id           serial not null,
    ts           timestamp default now(),
    table_schema text,
    table_name   text,
    operation    text,
    updated_by   text      default CURRENT_USER,
    new          json,
    old          json
);


With t AS (
select id,
       old->>'field1' = new->>'field1' as isMatchField1,
       old->>'field2' = new->>'field2' as isMatchField2,
       old->>'field3' = new->>'field3' as isMatchField3,
       old->>'field4' = new->>'field4' as isMatchField4
from history)

select id, array [isMatchField1, isMatchField2, isMatchField3, isMatchField4] from t

ВЫХОД

1, {true, true, false, null}

Как отфильтровать все нули из массива и выполнить запрос при поиске, если существует только истинное значение.в основном я хочу сделать что-то вроде:

select id, 
case when array field is only true and null then 'no changes made'
else
  'changes made'
end as updated
from t  
...