Если JSON приходит как
text, необязательно делать ::jsonb и ловить ошибку преобразования. IS JSON просто вернёт true или false.SELECT '{"id": 42}' IS JSON; -- true
SELECT '{broken}' IS JSON; -- falseМожно сразу потребовать конкретный тип
JSON:SELECT payload IS JSON OBJECT
FROM staging;
SELECT payload IS JSON ARRAY
FROM staging;
Есть и более интересная проверка — запрет повторяющихся ключей:
SELECT '{"id":1,"id":2}'
IS JSON OBJECT WITH UNIQUE KEYS;
-- falseЭто можно использовать непосредственно в ограничении таблицы:
CREATE TABLE incoming_events (
payload text NOT NULL
CHECK (payload IS JSON OBJECT WITH UNIQUE KEYS)
);
🔥
IS JSON позволяет валидировать JSON как обычное условие SQL — без преобразований, исключений и регулярных выражений.➡️ SQL Ready | #совет
