Я выполнял довольно интенсивное удаление и создание схемы на сервере PostgreSQL, но теперь жалуется ..:
WARNING: out of shared memory
ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
Но проблема остается, если PostgreSQL просто перезапустить service postgresql restart
, я подозреваю, что max_locks_per_transaction ничего не настроит.
Я немного отчужден, потому что списки устранения неполадок для этой ошибки не работают для меня.
Дополнительная информация 1409291350: отсутствуют некоторые детали, но я сохранил основной результат SQL.
postgres=# SELECT version();
PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2,
64-bit
И:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
postgresql
schema
memory
48347
источник
источник
SELECT version()
? Интересная проблема ...max_locks_per_transaction = 64 # min 10
пока не комментировал в /etc/postgresql/9.3/main/postgresql.conf.Ответы:
Ваш комментарий об интенсивном отбрасывании и создании и полученное вами уведомление об увеличении max_locks_per_transaction намекают на то, что вы отбрасываете и создаете много объектов в одной транзакции . Каждый из них приводит к блокировке, которая требует небольшого количества общей памяти. Из-за этого max_locks_per_transaction ограничивает количество блокировок, которые вы можете удерживать в транзакции (чтобы предотвратить использование одной разделяемой памяти какой-либо одной транзакцией).
Вы можете либо немного увеличить этот лимит (я бы рекомендовал не устанавливать его произвольно большим, либо вы столкнетесь с отдельной ситуацией, когда фактически исчерпывается общий объем совместно используемой памяти), либо выполнить отбрасывание и создание либо в пакетах транзакций, либо в виде одной капли. / создать за транзакцию.
Изменить: Видимо, я был неправ о том, как работает max_locks_per_transaction. Согласно документации, общее количество доступных блокировок max_locks_per_transaction * (max_connections + max_prepared_transactions) - любая транзакция может содержать больше, чем max_locks_per_transaction, если количество блокируемых везде блокировок меньше этого общего значения.
источник
DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public
следующих предложений: «ПРЕДУПРЕЖДЕНИЕ», «ОШИБКА» и «СОВЕТ».