PostgreSQL: Kann Dump nich rücksichern

Eroli

Erfahrenes Mitglied
Hallo zusammen,

ich bekam heute einen Dump einer Datenbank und wollte diesen auf meinem Laptop auf einem frisch installiertem PostgreSQL Server rücksichern, damit ich mit der Homepagenetwicklung beginnen kann. Leider krieg ich das Dump nicht rückgesichert. Weder über:

Code:
psql dbname < infile

noch über das einfügen des inhalts der "inifile" in den SQL-Abfrage"editor".
Wenn ich den letzten Weg nehme, dann wirft er mehrere Fehler und zwar immer an Stellen, an denen sowas:


Sowas war ich von MySQL und MSSQL auch nie gewohnt.
Diese Zeichen tauchen zum Beispiel an solchen Stellen auf:
COPY aemter (amt) FROM stdin;
\.

Wenn ich diese Zeichen lösche, dann kommen weitere Fehler:
FEHLER: Syntaxfehler bei »146«
LINE 453: 146 30 2009-10-06 \N
^

********** Fehler **********

FEHLER: Syntaxfehler bei »146«
SQL Status:42601
Zeichen:10261

Im SQL Quelltext ist das folgender eintrag:

Code:
COPY tabelle (feldA, feldB, feldC, feldD) FROM stdin;
146	30	2009-10-06	\N
[...]
14	26	2007-01-10	2009-03-31
\.

Nun, woher kommt dieser Fehler? Hat da jemand eine Ahnung?
Wie krieg ich diesen Dump trotzdem eingespielt?
 
Zuletzt bearbeitet:
Hi!

Ich glaube der Dump ist nicht vollständig - es fehlen wahrscheinlich Text bzw. Binärdaten, die mit COPY ... FROM STDIN gelesen werden sollen, aber nicht vorhanden sind. Das sog. Meta-Command "\." markiert nur das Ende eines solchen Blocks. Vergleiche hierzu auch die Dokumentation auf postresql.org:
http://www.postgresql.org/docs/8.4/interactive/app-psql.html hat gesagt.:
All rows are read from the same source that issued the command, continuing until \. is read or the stream reaches EOF.
Vielleicht hast Du im Beispiel oben aber auch nur die Daten weggelassen?
Wie dem auch sei, probier' doch mal die folgenden Möglichkeiten:
  • Rufe psql mit der -f bzw. --file option auf:
Code:
psql --file infile.sql
  • Ersetze die COPY Statements durch psql \copy Anweisungen, z.B. mittels sed...
Code:
sed "s/^COPY/\\copy/" infile.sql | psql --file -
...oder im Editor.
  • Poste hier im Forum die Software-Versionen von der Quelle als auch vom Ziel sowie den Befehl den wer-auch-immer zum Erstellen des Dumps eingegeben hat.

Gruß
Enum
 
Hallo zurück,

entschuldige bitte, dass ich mich so lange nicht gemeldet habe. Ich habe leider keine Möglichkeit die Version des DB-Servers von dem die DB stammt auszulesen, da ich noch keinen Zugriff darauf habe, aber bei mir lokal hab ich die neuste Version genommen.

Würde es dir helfen, wenn ich dir den kompletten Dump mal zuschicke? Das würde ich dann aber sehr gerne via PN regeln. Ginge das?
 
Unter PostgreSQL 8.3.9 (Debian 5.0) funktioniert der Import einwandfrei nachdem die Rollen/User vorher erstelt und die Datenbank angelegt war.
Wahrscheinlich hast Du vergessen die neue DB explizit mit CHARSET = 'SQL_ASCII' zu versehen und dadurch Probleme bekommen. Versuch' doch einfach mal die folgenden paar Zeilen:
Code:
# Namen der Rollen/User aus der moinDB.sql filtern und anlegen:
sh-3.2$ grep -e '\(OWNER TO\|GRANT\)' moinDB.sql | sed -e 's/^.* TO "*\([^"]*\)"*;/\1/' | sort -u | sed -e '/PUBLIC\|postgres/d' -e 's/.*/CREATE ROLE "\0";/' > create-roles.sql
sh-3.2$ psql < create-roles.sql
sh-3.2$ 

# Datenbank erstellen
sh-3.2$ psql -c "CREATE DATABASE test_db WITH ENCODING = 'SQL_ASCII';"
CREATE DATABASE
sh-3.2$ 

# Import (nur Fehler anzeigen)
sh-3.2$ psql test_db < moinDB.sql > /dev/null
sh-3.2$

Gruß
Enum
 
Ich hatte bei der Installation (Windows7) irgendwas von defaultmäßig unicode eingestellt gelassen und konnte dann im Admintool nicht auf ASCII umstellen. Ich werde deine Befehle mal in der Postgre-SQL-Kommandozeile testen.

Ich melde mich wieder, wenn ich das Ergebnis habe. Danke schonmal.
 
Kannst du mir kurz sagen, welche Rollen/User ich anlegen muss?

Sorry, blicke da gerade nicht so recht durch...
 
Ich bin nun soweit, dass ich mir über den admin eine neue Datenbank mit SQL_ASCII als Encoding angelegt habe und auch einen User EckertAdmin, dem diese Datenbank gehört.

Wenn ich nun in der Abfrage das Backup-"Skript" ausführe, erhalte ich die alten Fehler an den alten Stellen ("\.").

Deine Befehle konnte ich so nicht ausführen, da ich zum einen kein Linux verwende und zum zweiten scheint meine psql shell console zu spinnen. egal was ich da reinschreibe und enter drücke, er macht eine neue zeile und schmeißt keine Fehlermeldungen oder sonstiges...
 
Hi!

scheint meine psql shell console zu spinnen. egal was ich da reinschreibe und enter drücke, er macht eine neue zeile und schmeißt keine Fehlermeldungen oder sonstiges...
Du musst schon ein abschließendes Semikolon tippen, sonst erkennt er nicht das der Befehl abgeschlossen ist. Ausnahme: die Backslash-Befehle.

Kannst du mir kurz sagen, welche Rollen/User ich anlegen muss?
Natürlich :p:
Code:
CREATE ROLE "authdaemon";
CREATE ROLE "eckertAdmin";
CREATE ROLE "eckertCalvin";
CREATE ROLE "eckertNssUser";
CREATE ROLE "eckertPamUser";
CREATE ROLE "eckertrequest";
CREATE ROLE "eckertSamba";
Das ist die Sequenz welche mit dem Shell-Kommando im Beispiel oben erstellt wurde.

Wenn ich nun in der Abfrage das Backup-"Skript" ausführe, erhalte ich die alten Fehler an den alten Stellen ("\.").
Wahrscheinlich weil Du wieder versuchst im Abfrage-Programm den Inhalt der moinDB.sql Datei einzufügen. Damit erzeugst Du in jeder Zeile nach einem...
Code:
COPY ... FROM STDIN;
... einen Fehler, weil FROM STDIN soviel Bedeutet wie "Von dem Standard-Eingabe-Stream", und der ist in diesem Fall nicht derselbe wie wenn Du einfach mit
Code:
psql dbname < infile
den Kram importierst.

Gruß
Enum
 
Hallo nochmal.

Erstmal muss ich mich bei dir entschuldigen, dass ich mich nur so unregelmäßig melde, aber ich bin gerade im Klausurstress und deswegen ziemlich angespannt.

Wie auch immer, ich habe nun die Rollen erstellen können, doch bei
Code:
psql DBName < C:\moinDB.backup;

kommt der Fehler:
Ungültige Anweisung \moinDB.backup;. Versuchen sie \? für Hilfe.

Im Hilfetext hab ich nicht wirklich etwas gefunden, dass mir helfen könnte. Wie geht es weiter?

EDIT: Probiere nun laut Hilfetext folgendes aus:
Code:
psql \i C:\moinDB.backuo
C:: Permission denied.

Aber auch:
Code:
psql \i C:\Benutzer\Benutzername\moinDB.backup
bringt denselben Fehler...
C:: Permission denied.

Die Fehlermeldungen kommen sogar, wenn ich die Console als Administrator starte. Wie mach ich nun weiter? (Windows7)
 
Zuletzt bearbeitet:
Hi!

Das ist wahrscheinlich ein Problem mit der Windows-Kommandozeile und/oder Escaping. Nachstellen kann ich das nicht da ich weder einen Windows-Rechner noch eine Windows-Emulation habe. Wie dem auch sei, wechsel doch einfach mal in den Ordner wo das SQL-Skript liegt (um den Pfad zum Skript weglassen zu können) und versuch' es mit einem der folgenden Befehle:
Code:
C:\...> psql DBName < skipt.sql
C:\...> psql DBName -c \i skript.sql
C:\...> psql DBName -f skript.sql
Vorher solltest Du natürlich nicht nur die Benutzer angelegt haben sondern auch die Datenbank.

Gruß
Enum
 

Neue Beiträge

Zurück