2016-05-06 4 views
1

При возникновении проблемы при резервном копировании в базе данных содержится около 50 схем с каждой схемой, содержащей около 100 таблиц.pg_dump при ошибке метаданных базы данных «из общей памяти»

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 256 в postgresql.conf не решить эту проблему.

Есть ли какие-либо возможности, которые могут вызвать эту проблему?

Отредактировано: (7 мая 2016)

Postgresql версия = 9,1

Операционная система = Ubuntu 14.04.2 LTS

shared_buffers в postgresql.conf = 2 Гб

Отредактировано: (09 мая 2016 года)

Мой postgres.conf

maintenance_work_mem = 640MB 
wal_buffers = 64MB 
shared_buffers = 2GB 
max_connections = 100 
max_locks_per_transaction=10000 

ответ

1

Я решил эту проблему, выполнив резервное копирование для каждой схемы отдельно, так как размер базы данных (будь то no.of schemas или no.of tables) увеличивается, поэтому с помощью pg_dump сложно выполнить резервное копирование.

Раньше я использовал сценарий this для резервного копирования с помощью pg_dump.

Я сделал следующее изменение в сценарии принять схемы мудр резервного копирования:

  1. Перед запуском pg_dump, перечислить все схемы базы данных в файл. Чтобы мы могли перебирать все схемы и делать резервные копии для схемы.

    Вот команда, чтобы перечислить все схемы в файл

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

    Здесь sql_to_list_schema содержит

    ВЫБРАТЬ n.nspname ОТ pg_catalog.pg_namespace п WHERE 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>

2

Вы, возможно, потребуется увеличить max_locks_per_transaction еще больше. Прочтите documentation, чтобы узнать, что означает этот параметр. Если у вас есть сомнения, проверьте, сколько таблиц у вас есть, и установите max_locks_per_transaction, по крайней мере, так много, тогда вам все будет в порядке.

+0

Я попытался это тоже, но ничего не вышло. –

+0

Подробнее? Сколько у вас таблиц, каковы настройки конфигурации? –

+0

@PeterEisentraut, спасибо за подсказку. Первоначально не уверен, в каком файле это свойство должно быть изменено. Позднее получил помощь от друзей, где нужно было изменить. '../ данные/postgresql.conf' – Rao