Я работаю с Python 3 и пакетом Postgres (https://pypi.org/project/postgres/).
У меня есть таблица, в которой один из столбцов является массивом BIGINT. Когда я пытаюсь работать с этим столбцом (выбрать, вставить и т. Д.), Используя список чисел Python, я получаю сообщение об ошибке.
Кажется, причина ошибки в том, что psycopg2 адаптирует список к массиву INTEGER, а не 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.