Обычный
cast падает с ошибкой, если значение нельзя преобразовать. Из-за этого в ETL и в запросах к промежуточным данным часто приходится заранее чистить данные или писать PL/pgSQL с обработкой исключений.SELECT value::integer
FROM staging;
-- ERROR при первом плохом значении
PostgreSQL умеет проверять, является ли строка допустимым значением конкретного типа, не вызывая ошибку.
SELECT value
FROM staging
WHERE pg_input_is_valid(value, 'integer');
Типом может быть не только
integer:SELECT pg_input_is_valid('192.168.1.10', 'inet');
SELECT pg_input_is_valid('550e8400-e29b-41d4-a716-446655440000', 'uuid');
SELECT pg_input_is_valid('2026-09-08', 'date');А
pg_input_error_info() позволяет получить причину, почему преобразование невозможно.SELECT *
FROM pg_input_error_info('2026-02-30', 'date');
🔥
pg_input_is_valid() позволяет валидировать грязные входные данные средствами самой системы типов PostgreSQL.➡️ SQL Ready | #совет
