я буду считать, что enum12
была создана с CREATE TYPE enum12 AS ENUM (...)
.
Проблема заключается в том, что вы не можете автоматически отличать целые числа к перечисленному типу данных (но он работает для строк).
Если вы действительно должны быть в состоянии бросить целые числа в enum12
, вы можете использовать следующее:
CREATE OR REPLACE FUNCTION int_to_enum12(integer) RETURNS enum12
LANGUAGE sql IMMUTABLE STRICT AS
$$SELECT enumlabel::enum12
FROM pg_catalog.pg_enum
WHERE enumsortorder = $1
AND enumtypid = 'enum12'::regtype$$;
CREATE CAST (integer AS enum12)
WITH FUNCTION int_to_enum12(integer)
AS IMPLICIT;
Тогда ваш пример вероятно, будет работать.
Примечания:
- Это предполагает, что первая метка соответствует '1'.
- Целые значения вне диапазона будут отлиты до
NULL
.
Добавление неявных приведений в базе данных увеличит двусмысленности ваших операторов, что приводит к увеличению количества ошибок, как:
ERROR: operator is not unique: ...
HINT: Could not choose a best candidate operator. You might need to add explicit type casts.
Я думаю, что вы могли бы быть лучше перефразировать запрос таким образом, что вы не» t нужен тип.
Каково определение 'enum12'? –
Я определил 1 гость пользователя и 2 - admin –
Почему вы используете перечисление для ограничения допустимых значений для числа? Это не имеет смысла. Используйте правильную таблицу поиска с внешним ключом или контрольным ограничением. Перечисление является неправильным выбором для этого. –