У меня есть этот запрос
SELECT * FROM "functions" WHERE (models_mask & 1 > 0)
и я получает следующую ошибку:
PGError: ОШИБКА: оператор не существует: символьное варьирование и целое число
ПОДСКАЗКА: Никакой оператор не соответствует имени и типу (типам) аргумента. Вы, возможно, должны были бы добавить явные броски типа.
models_mask является целым числом в базе данных. Как я могу зафиксировать это.
Спасибо!
Проверьте документы на битовых операторах для PG.
По сути &
&
работает только на двух типах типа (обычно бит или int), поэтому Model_Mask
должен быть CAST
из Варрара к чему-то разумному Бит или INT:
Model_Mask :: Int & 1
- - - -
-
-
-
-
Models_Mask :: int :: Bit & B'1 '
Вы можете узнать, что работает оператор Использование \ DOS
в PSQL
pg_catalog | & | bigint | bigint | bigint | bitwise and
pg_catalog | & | bit | bit | bit | bitwise and
pg_catalog | & | inet | inet | inet | bitwise and
pg_catalog | & | integer | integer | integer | bitwise and
pg_catalog | & | smallint | smallint | smallint | bitwise and
Вот быстрый пример для получения дополнительной информации
# SELECT 11 & 15 AS int, b'1011' & b'1111' AS bin INTO foo;
SELECT
# \d foo
Table "public.foo"
Column | Type | Modifiers
--------+---------+-----------
int | integer |
bin | "bit" |
# SELECT * FROM foo;
int | bin
-----+------
11 | 1011