pgo*_*ngi 6 postgresql pg-dump postgresql-9.1
在数据库上进行备份时遇到问题包含大约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
Run Code Online (Sandbox Code Playgroud)
更新max_locks_per_transaction到256 in postgresql.conf并没有解决问题.
有没有可能导致这个问题的可能性?
编辑:(2016年5月7日)
Postgresql版本= 9.1
操作系统= Ubuntu 14.04.2 LTS
shared_buffersin postgresql.conf= 2GB
编辑:(2016年5月9日)
我的postgres.conf
maintenance_work_mem = 640MB
wal_buffers = 64MB
shared_buffers = 2GB
max_connections = 100
max_locks_per_transaction=10000
Run Code Online (Sandbox Code Playgroud)
我通过单独备份所有模式作为数据库的大小(无论是模式还是没有表)来解决这个问题,增加了使用pg_dump进行备份的难度.
我对脚本进行了以下修改以采用模式化备份:
在运行之前pg_dump,将所有数据库模式列入文件.这样我们就可以迭代所有模式并为模式进行备份.
以下是将所有架构列出到文件的命令
psql <db_name> -o <output_file> < <sql_to_list_schema>
这里sql_to_list_schema包含
SELECT n.nspname FROM pg_catalog.pg_namespace n WHERE n.nspname!~'^ pg_'AND n.nspname <>'information_schema';
现在阅读所有行output_file并获取该架构的备份
pg_dump <db_name> -f <backup_file> -i -x -O -R -n <schema_name_read_from_file>