Eu venho realizando um tipo de esquema intensivo, removendo e criando um servidor PostgreSQL, mas agora reclama ..
WARNING: out of shared memory
ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
Mas o problema permanece se o PostgreSQL for reiniciado service postgresql restart
, suspeito que max_locks_per_transaction não irá ajustar nada.
Estou um pouco afastado porque as listas de solução de problemas para esse erro não estão funcionando para mim.
MAIS INFORMAÇÕES 1409291350: Alguns detalhes estão faltando, mas mantenho o resultado principal do 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
E:
$ 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
fonte
fonte
SELECT version()
? Problema interessante ...max_locks_per_transaction = 64 # min 10
no /etc/postgresql/9.3/main/postgresql.conf até agora.Respostas:
Seu comentário sobre criação e remoção intensiva e o aviso recebido sobre o aumento de max_locks_per_transaction sugerem que você está descartando e criando muitos objetos na mesma transação . Cada um desses resulta em um bloqueio, que requer uma pequena quantidade de memória compartilhada. Por esse motivo, max_locks_per_transaction limita o número de bloqueios que você pode reter em uma transação (para impedir que qualquer transação use toda a memória compartilhada).
Você pode aumentar um pouco esse limite (eu recomendaria não defini-lo arbitrariamente grande ou você se deparará com uma situação separada de ficar realmente sem memória compartilhada total) ou fará suas quedas e criará em lotes de transações ou em uma gota / criar por transação.
Edit: Aparentemente, eu estava errado sobre como funciona max_locks_per_transaction. Na documentação, o número total de bloqueios disponíveis é max_locks_per_transaction * (max_connections + max_prepared_transactions) - qualquer transação pode conter mais de max_locks_per_transaction, desde que o número de bloqueios mantidos em qualquer lugar seja menor que esse valor total.
fonte
DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public
, estas são as sentenças que lançam WARNING, ERROR e HINT.