在数据库上进行备份时出现问题包含大约50个模式,每个模式包含大约100个表。
pg_dump抛出以下错误,建议增加max_locks_per_transaction
。
pg_dump: WARNING: out of shared memory
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
pg_dump: The command was: SELECT tableoid, oid, prsname, prsnamespace, prsstart::oid, prstoken::oid, prsend::oid, prsheadline::oid, prslextype::oid FROM pg_ts_parser
max_locks_per_transaction
中postgresql.conf
更新为256并未解决问题。
是否有任何可能导致此问题的可能性?
已编辑:(2016年5月7日)
Postgresql版本= 9.1
操作系统= Ubuntu 14.04.2 LTS
shared_buffers
= 2GB 中的 postgresql.conf
已编辑:(2016年5月9日)
我的postgres.conf
maintenance_work_mem = 640MB
wal_buffers = 64MB
shared_buffers = 2GB
max_connections = 100
max_locks_per_transaction=10000
答案 0 :(得分:5)
我通过单独备份所有模式作为数据库的大小(无论是模式还是没有表)来解决这个问题,增加了使用pg_dump进行备份的难度。
我对脚本进行了以下修改以采用模式备份:
在运行pg_dump
之前,将所有数据库模式列入文件。这样我们就可以迭代所有模式并为模式进行备份。
以下是将所有架构列出到文件
的命令 psql <db_name> -o <output_file> < <sql_to_list_schema>
此处sql_to_list_schema
包含
SELECT n.nspname 来自pg_catalog.pg_namespace n 在哪里n.nspname!〜&#39; ^ pg _&#39; AND n.nspname&lt;&gt; &#39; INFORMATION_SCHEMA&#39 ;;
现在阅读output_file
的所有行并备份该架构
pg_dump <db_name> -f <backup_file> -i -x -O -R -n <schema_name_read_from_file>
答案 1 :(得分:3)
您可能需要进一步增加max_locks_per_transaction
。有关此参数含义的详细信息,请查看documentation。如果有疑问,请检查您拥有多少个表并将max_locks_per_transaction
设置为至少那么多,那么您应该没问题。
答案 2 :(得分:0)
尝试一下
shared_buffers = 512GB
max_locks_per_transaction=10000
请注意,每个环境都不同
答案 3 :(得分:-1)
我尝试在不调整任何缓冲区大小的情况下使用以下内容,并且成功了。
for(int i=1;i<=50;i++)
{
s+=to_string(i)+s;
}