Dump Postgres7.4 -> Insert Postgres7.4 klappt nicht

Hallo zusammen!

Ich schicke eines vorweg: Ich bin SQL - DAU!
Es wäre sehr, sehr lieb wenn mir hier trotzdem jemand helfen könnte. :slight_smile:

Was ist passiert?
Ich habe ein phpbb2 mit PostgreSQL 7.4 auf einem Debian Linux System (3.1) betrieben. Kein Problem soweit.

Jetzt musste ich das System neu installieren. (Wieder Debian 3.1, wieder PostgreSQL 7.4).

Ich habe meine phpbb2 Datenbank wie folgt gesichert:

pg_dump -o -F c -U postgres -W DBNAME | gzip > DBNAME_mit_OIDs.pgsqldb.gz

und

pg_dump -d -F c -U postgres -W DBNAME | gzip > DBNAME_ohne_OIDs.pgsqldb.gz

Das habe ich so gemacht, weil ich den OID - Switch als besagter DAU nicht wirklich verstanden habe und mir dachte: Besser zuviel als zuwenig sichern! Zumal das mit ~130KB echt kein Brot frisst…

Zusätzlich habe ich mit pgAdmin III unter Windows mich zum PG Server verbunden und ein Backup angelegt.

So, als ich den Server neu installiert habe, will ich die DB wie folgt wieder herstellen:

1) DB mit dem selben Eigentümer, Zeichensatz und DB Namen angelegt
2) postgres@host: ~# zcat DBNAME_mit_OIDs.pgsqldb.gz | psql -d DBNAME -h MeinHostname -U postgres -W

Dabei hagelt es Syntaxfehler…

Die folgende Ausgabe ist zwar von PostgreSQL 8.1, aber die 7.4er Version liefert dasselbe:

FEHLER:  Fehler »Syntaxfehler« bei »PGDMP« at character 1
ZEILE 1: PGDMPGRANT ALL ON SCHEMA public TO PUBLIC;
         ^
FEHLER:  Fehler »Syntaxfehler« bei »INCREMENT« at character 1
ZEILE 1: INCREMENT BY 1

OK, ist ja nicht schlimm, dachte ich - ich habe ja noch das pgAdmin III Backup.

Ich wähle also die frisch erstellte DB, wähle “Wiederherstellen”, wähle das Backup und:

C:\Programme\pgAdmin III\1.6\pg_restore.exe -i -h MeinSystem -p 5432 -U postgres -d "DB" -v "C:\DB.backup"

pg_restore: connecting to database for restore

pg_restore: [archiver (db)] Error while INITIALIZING:

pg_restore: [archiver (db)] could not execute query: FEHLER:  Parameter »standard_conforming_strings« kann nicht geändert werden

    Command was: SET standard_conforming_strings = off;

pg_restore: creating SCHEMA public

Auch diese Ausgabe ist wieder aus dem PostgreSQL8.1 System - beim 7.4er beschwert er sich über Syntax-Fehler.

Jetzt kommt das Kuriose: Ich habe PostgreSQL 8.1 auf einem Windows System installiert, und da klappen alle Imports Problemlos!

Was geht hier ab?? O.o

Diese Windows - DB funktioniert auch - setze ich das phpbb2 Forum auf die Windows-Kiste an, ist alles super!

Nun habe ich mit pgAdmin III folgendes mit dieser Windows - DB gemacht: Erneut “Backup” gewählt und “INSERTS” angehakt.

Wenn ich im Windows System nun eine völlig neue DB erstelle, und dieses INSERT-Script mit dem pgAdmin III Abfragewerkzeug auf diese neue DB ausführe gibt es nicht einen Fehler und die DB funktioniert im phpbb2.

Mache ich dasselbe auf die Linux - Postgres 8.1 DB, kommt im Abfragetool nach ca. 29803 ms:

FEHLER: Fehler »Syntaxfehler« bei »;«

SQL Status:42601

Zeichen:756

Ich weiss echt nicht mehr weiter … ich verstehe den Fehler nichtmal.

Ich habe es nun so ausführlich wie möglich beschrieben. Solltet Ihr noch genauere Fragen haben, bitte fordert sie an.

pg_dump -F c und dann versucht, das mittels psql reinzupipen…

Dabei hagelt es Syntaxfehler…

Normal. pg_dump erzeugt mit -F c ein Format, welches NUR mit pg_restore funktioniert.

C:\Programme\pgAdmin III\1.6\pg_restore.exe -i -h MeinSystem -p 5432 -U postgres -d “DB” -v “C:\DB.backup”

pg_restore: connecting to database for restore
[/quote]

Ist Netzwerkzugriff erlaubt? Das regelt die pg_hba.conf.

Tja, das ist das schöne an Windows: es funktioniert, gell?

Möglicherweise Encoding-Probleme.

Andreas

>

Danke für die Antwort!

Wie gesagt: Selbst als DAU geoutet.

Mit Jack Sparrow Tonfall (Piraaahaaat!) wiederhol: DAAAHAU!! :wink:

HA! Soviel schonmal dazu - das geht! :slight_smile:
Danke, bin schonmal ein gutes Stück weiter.

Ich muss jetzt aber immernoch das INSERT Script ausführen können… :frowning:

Das ist alles kein Problem. Ich kann mich auch von extern verbinden und sonst alles tun. Nur dieses INSERT Script will nicht…

Nun gut - ich rechne es jetzt mal weniger Windows zu. Es ist immernoch die Qualität der Applikation wie gut oder schlecht sie funktioniert.

Was meinst Du genau? Ich hatte sowas auch zunächst vermutet - aber dos2unix oder ähnliches ändert nichts dran …

Oder anders gefragt: Was müsste ich denn tun um diese Probleme zu bestätigen, bzw auszubessern? :slight_smile:

Vielen Dank auf jeden Fall schonmal für die Hilfe! :slight_smile:

Schaue in das Script, was dort, wo der Fehler passiert, steht. Zur Not kann man in das Script ein paar Befehle a la

raise notice 'bin grad hier';

zufällig verteilen, um die Stelle einzugrenzen.


Andreas

Oh mann …

Also ich muss mal sagen: Seeeeehr Kryptisch das alles =O.o=

Also dann mal ab:

Ich habe es inzwischen geschafft eine Datenbank von einem Windows 8.2er Postgres in ein Linux 8.2er Postgres zu kopieren.

Allerdings muss ich sagen: Das erscheint mir recht unausgereift. Klar, mag meine Meinung als n00b sein. Aber dafür bin ich ja hier: Um zu lernen! :slight_smile:
Ich wäre also für eine Erläuterung dankbar.

Folgendes habe ich gemacht:

pg_dump.exe -c -d -i -h localhost -U username -W dbname | psql.exe -h linuxserver -U username -d dbname

Es hagelte ERROR - Meldungen.

Über pg_restore funktionierte der Vorgang zuvor auch nicht - ich habe mir jetzt nur diesen Weg gemerkt.

Verwunderlicherweise funktionierte es jedoch, als ich das phpbb2 auf diese Linux-Server-Datenbank habe zeigen lassen.

Testweise habe ich nochmal ein Dump der Linuxserverdb und einen der Windowsdb erstellt und die grösse verglichen: Die WindowsDB ist 1,4 MB gross, die Linuxdatei nur 960 KB.

Ich habe schon den ganzen Tag getestet - ich finde nichts das fehlt wenn ich mit dem Forum arbeite.

Meine Fragen lauten:

  1. Wieso hagelt es bei so etwas trivialem FEHLER, wenn hinterher doch alles in Ordnung ist?

  2. Warum unterscheidet sich der Dump so stark in der grösse?

  3. Wie funktioniert sowas regulär? Habe ich evtl. was falsch gemacht?

Welche?


Verwunderlicherweise funktionierte es jedoch, als ich das phpbb2 auf diese Linux-Server-Datenbank habe zeigen lassen.

Testweise habe ich nochmal ein Dump der Linuxserverdb und einen der Windowsdb erstellt und die grösse verglichen: Die WindowsDB ist 1,4 MB gross, die Linuxdatei nur 960 KB.

Wilde Vermutung: Windoze mit UTF8 als Client-Encoding, Linux ASCII.

Andere Vermutung: Windoze ist eh bloat…

Meine Fragen lauten:

  1. Wieso hagelt es bei so etwas trivialem FEHLER, wenn hinterher doch alles in Ordnung ist?

Fehler oder Warnungen? Welche Fehler?

Wilde Vermutung: durch Deine ganzen Versuche war die DB vielleicht schon gefüllt. Das könnte die fehler erklären (vielleicht sowas wie DUPLICATE KEY) und die Tatsache, daß nix fehlt.

  1. Warum unterscheidet sich der Dump so stark in der grösse?

Warum vergleichst Du nicht mal, was in den Dumps steht?

  1. Wie funktioniert sowas regulär? Habe ich evtl. was falsch gemacht?

Regulär funktioniert es.


Andreas