2010-08-19 2 views
17

ich meine PostgresQL Datenbank von einer Festplatte auf eine andere bewegt miteine Datenbank mit pg_dump und psql -U postgres db_name bewegen <... Ergebnisse werden in "ERROR: relation "table_name" existiert nicht"

pg_dump -U postgres db_name > db_name.dump 

und dann

psql -U postgres db_name < db_name.dump 

Ich erstellte die Datenbank db_name auf die gleiche Weise in beiden Fällen. In der neuen Datenbank, wenn ich mein Java-Programm mit einer JPA-Abfrage (oder eine JDBC-Abfrage) laufen bekomme ich diesen Fehler:

"ERROR: relation "table1" does not exist" 

Die Abfrage ist:

select count(0) from table1 

Ich weiß, ich habe ein bekam Verbindung, denn wenn ich das Passwort in den Verbindungsparametern ändere, bekomme ich einen Fehler.

Aus irgendeinem Grund in der neuen PostgresQL-Instanz denkt es, dass Tabelle1 nicht in dem importierten Schema vorhanden ist.

Wenn ich ändern die Abfrage

select count (0) von myschema.table1

Dann ist es zu Berechtigungen klagt:

"ERROR: permission denied for schema myschema" 

Warum sollten die Berechtigungen anders sein?

Die Tabelle table1 existiert in myschema, weil ich sie im Tool pgAdmin sehen kann. Alle Zeilen wurden in die neue PostgresQL-Instanz importiert.

Wenn ich eine Abfrage von Java mache, verursachte die Kombination von pg_dump und psql ein Problem.

Was muss ich tun, um dieses Problem zu lösen?

Vielen Dank im Voraus.

Antwort

28

Wechseln Sie zur selben Version von PostgreSQL? Es kann Probleme geben, wenn Sie mit pg_dump 8.3 einen Dump machen und versuchen, ihn in PostgreSQL 8.4 wiederherzustellen. Wie auch immer, davon aus, dass es die gleiche Version ist versuchen Sie folgendes:

Dump alle globalen Objekte, wie Benutzer und Gruppen (weiß nicht, ob sie in Ihrer Dump fehlten):

pg_dumpall -g -U postgres > globals.sql 

Dump-Schema der Datenbank:

pg_dump -Fp -s -v -f db-schema.sql -U postgres dbname 

Dump Inhalt der Datenbank:

pg_dump -Fc -v -f full.dump -U postgres dbname 

Jetzt res zerriss.

psql -f globals.sql 
psql -f db-schema.sql dbname 
pg_restore -a -d dbname -Fc full.dump 

Das sind meine 0,02 $. Ich hoffe es hilft.

+0

Ich ziehe von 8.3 zu 8.4. Ich ändere meine Backup-Skripts, um Ihren umfassenderen Ansatz zu verwenden. Danke für die Antwort. –

+1

Ich würde ausführliche Flag (-v) zu pg_restore für große Datenbank hinzufügen. 'pg_restore -a -v -d dbname -Fc full.dump' – green0range

+0

Was ist der Sinn des Dumps das Schema zweimal (im Klartext und komprimiert), wenn Sie sowieso' pg_restore -a' gehen? Warum nicht 'pg_dump -Fc -a -v -f data.dump', zum Beispiel? Oder überspringen Sie den Schema-Schritt ganz und tun Globals in einem Schritt und alles andere in dem anderen? – Air

1

Ich konnte es lösen, indem ich die Datenbankprivilegien auf öffentliche CONNECT und die Schema-Privilegien für public und postgres = USAGE und CREATE änderte.

Meine Backup-Skripte haben anscheinend nicht die Privilegien bewahrt, zumindest nicht beim Wechsel von 8.3 auf 8.4.

2

Ich stieß auf dieses Problem. Dann merkte ich, dass ich vergessen habe, postgis Erweiterung zu installieren.

Vergessen Sie nicht, die von Ihnen verwendeten Erweiterungen zu installieren.

+0

Vielen Dank, Mann. Es war das Problem, mit dem ich stundenlang zu kämpfen hatte. Wusste nicht einmal über Postgis Existenz, ich bin neu in Postgre Welt. Gerade Postgis aus Repo installiert und alles funktioniert. –

Verwandte Themen