2016-05-06 16 views
1

Das Problem beim Erstellen von Backups für die Datenbank enthält ungefähr 50 Schemata, wobei jedes Schema ungefähr 100 Tabellen enthält.pg_dump on Fehler beim Auslösen der Datenbank 'nicht im Shared Memory'

pg_dump werfend unter Fehler, der darauf hinweist, dass zu erhöhen 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 

Ein aktualisierter von max_locks_per_transaction-256 in postgresql.conf nicht das Problem lösen.

Gibt es irgendwelche Möglichkeiten, die dieses Problem verursachen können?

Edited: (7. Mai 2016)

Postgresql version = 9.1

Betriebssystem = Ubuntu 14.04.2 LTS

shared_buffers in postgresql.conf = 2GB

Editiert: (09. Mai 2016)

Mein postgres.conf

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

Antwort

1

Ich löste dieses Problem, indem ich Backup für alle Schemas einzeln nahm, da die Größe der Datenbank (sei es die Anzahl der Schemas oder die Anzahl der Tabellen) sich erhöht und es schwierig ist, Backup mit pg_dump zu erstellen.

Zuvor verwendete ich this Skript, um Sicherung mit pg_dump zu nehmen.

Ich habe folgende Änderung an dem Skript fertig Schema weise Backup zu nehmen:

  1. Vor pg_dump ausgeführt wird, listet alle Datenbankschemata in eine Datei. Damit können wir alle Schemata durchlaufen und Backups für ein Schema erstellen.

    Hier ist der Befehl, alle Schema einer sql_to_list_schema

    Hier

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

    Datei zur Liste enthält

    SELECT n.nspname VON pg_catalog.pg_namespace n WHERE n.nspname! ~ ‚^ pg_ 'UND n.nspname <>' information_schema ';

  2. nun alle Linien von output_file und nehmen Sicherung dieses

    Schema lesen

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

2

Sie könnten max_locks_per_transaction noch weiter erhöhen müssen. Überprüfen Sie die documentation für Details, was dieser Parameter bedeutet. Wenn Sie Zweifel haben, überprüfen Sie, wie viele Tabellen Sie haben und setzen Sie max_locks_per_transaction auf mindestens so viel, dann sollten Sie in Ordnung sein.

+0

ich auch versucht, aber hat nicht funktioniert. –

+0

Details? Wie viele Tabellen haben Sie, welche Konfigurationseinstellungen haben Sie? –

+0

@PeterEisentraut, danke für den Tipp. Zunächst nicht sicher, in welcher Datei diese Eigenschaft geändert werden muss. Später bekam Hilfe von Freunden wo zu ändern. '../ data/postgresql.conf' – Rao