Я работаю с пакетом Python 3 и Postgres (https://pypi.org/project/postgres/).
У меня есть таблица, в которой один из столбцов представляет собой массив BIGINT. Когда я пытаюсь работать с этим столбцом (выбрать, вставить и т. д.), используя список чисел Python, я получаю сообщение об ошибке.
Причина ошибки, по-видимому, в том, что psycopg2 адаптирует список к массиву целых чисел, а не к массиву BIGINT. Он предлагает явное приведение типов, но я не смог найти в документации psycopg2, как это сделать. (Ошибка исчезает, когда я передаю список чисел, которые слишком велики, чтобы поместиться в 4 байта, размер INTEGER).
Это код, который я запустил:
db.all("SELECT phase from messages where recipients=%(reps)s", {'reps':[12,34]})
также бывает с:
db.all("SELECT phase from messages where recipients=ARRAY[12, 34]")
И это сообщение об ошибке, которое я получил:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/yoni/.local/lib/python3.6/site-packages/postgres/__init__.py", line 552, in all
return cursor.all(sql, parameters)
File "/home/yoni/.local/lib/python3.6/site-packages/postgres/cursors.py", line 145, in all
self.execute(sql, parameters)
File "/home/yoni/.local/lib/python3.6/site-packages/psycopg2/extras.py", line 313, in execute
return super(NamedTupleCursor, self).execute(query, vars)
psycopg2.ProgrammingError: operator does not exist: bigint[] = integer[]
LINE 1: SELECT phase from messages where recepients=ARRAY[12,34]
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.



Приведите массив к bigint[]:
db.all("SELECT phase from messages where recipients=ARRAY[12, 34]::bigint[]")