pg_dump on Database throwing error 'out of shared memory'[英] pg_dump on Database throwing error 'out of shared memory'

本文是小编为大家收集整理的关于pg_dump on Database throwing error 'out of shared memory'的处理方法,想解了pg_dump on Database throwing error 'out of shared memory'的问题怎么解决?pg_dump on Database throwing error 'out of shared memory'问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

数据库上进行备份时遇到问题,其中包含大约 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

postgresql.conf 中将 max_locks_per_transaction 更新为 256 并没有解决问题.

是否有任何可能导致此问题?

已编辑:(2016 年 5 月 7 日)

Postgresql 版本 = 9.1

操作系统 = Ubuntu 14.04.2 LTS

shared_buffers in 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

推荐答案

我通过单独备份所有模式来解决这个问题,因为数据库的大小(无论是模式数量还是表数量)增加了很难采取使用 pg_dump 备份.

我对脚本进行了以下修改以进行模式备份:

  1. 在运行 pg_dump 之前,将所有数据库模式列出到一个文件中.这样我们就可以迭代所有模式并为模式备份.

    这里是列出所有模式到文件的命令

    psql <db_name> -o <output_file> < <sql_to_list_schema>

    这里sql_to_list_schema包含

    选择 n.nspnameFROM pg_catalog.pg_namespace nWHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema';

  2. 现在读取 output_file 的所有行并备份该架构

    pg_dump <db_name> -f <backup_file> -i -x -O -R -n <schema_name_read_from_file>

本文地址:https://www.itbaoku.cn/post/1763817.html