Тип smallint литье в boolean в PostgreSQL

я пытаюсь привести smallint к логическому значению в PostgreSQL. Это не работает из коробки, например:

select (1::smallint)::bool;

возвращает "ERROR: 42846: не удается привести тип smallint к boolean"

я могу исправить это с помощью:

select (1::smallint)::int::bool;

но мне интересно, есть ли способ, которым я могу определить, как бросить smallint на boolean?

причина этого в том, что у меня (и других, с которыми я работаю) есть сводные запросы, которые бросают int столбец из таблицы базы данных boolean. Я хотел бы изменить этот столбец smallint, но это остановило бы эту логику, потому что нет прямого броска из smallint to boolean. Можно ли использовать postgres CREATE CAST чтобы определить, как бросить smallint до boolean?

1 ответов


CREATE OR REPLACE FUNCTION boolean1(i smallint) RETURNS boolean AS $$
    BEGIN
            RETURN (i::smallint)::int::bool;
    END;
$$ LANGUAGE plpgsql;

CREATE CAST (smallint AS boolean) WITH FUNCTION boolean1(smallint) AS ASSIGNMENT;