Я запускаю кучу запросов с использованием Python и psycopg2. Я создаю одну большую временную таблицу с примерно 2 миллионами строк, затем я получаю по 1000 строк за раз с помощью cur.fetchmany(1000)
и запускаю более обширные запросы с участием этих строк. Обширные запросы являются самодостаточными, хотя, когда они закончены, мне больше не нужны их результаты, когда я перехожу к следующему 1000.postgresql: из общей памяти?
Однако, около 1000000 строк, я получил исключение из psycopg2:
psycopg2.OperationalError: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
Как ни странно, это произошло, когда я выполнял запрос, чтобы удалить некоторые временные таблицы, которые создавали более сложные запросы.
Почему это может случиться? Есть ли способ избежать этого? Было досадно, что это произошло на полпути, а это значит, что я должен снова запустить все это. Что могло бы быть max_locks_per_transaction
?
ПРИМЕЧАНИЕ: Я не делаю никаких .commit()
, но я удаляю все временные таблицы, которые я создаю, и я касаюсь только тех же 5 таблиц в любом случае для каждой «обширной» транзакции, поэтому я не посмотрите, как может возникнуть проблема с запуском столовых замков ...
Как транслировать транзакции курсоров и .commits? Я не делал никаких команд, но я использовал новые курсоры для запросов – Claudiu