Dump unter Linux auf Windows wiederherstellen

Hallo,

ich stehe vor dem Problem, dass ich ein pg_dump, das auf einem unter Linux laufenden Postgresql-Server erstellt wurde, in einem anderen Netzwerk wiederherstellen muss. Dort läuft der Postgresql-Server aber unter Windows.

Wenn ich die Fehlermeldungen richtig interpretiere liegt das wohl daran, dass unter Windows LC-COLLATE und LC_CTYPE bei mir beim Anlegen einer neuen Datenbank immer ‘German_Germany.1252’ heißt, auf Linux aber ‘de_DE.UTF8’.

Lässt sich das Problem irgendwie lösen? Ich habe schon hier im Forum gesucht aber die Antworten haben mir nicht wirklich weiter geholfen.

Danke schon mal für alle Antworten

Windows? Was ist das? Nie gehört …

Wenn ich die Fehlermeldungen richtig interpretiere liegt das wohl daran, dass unter Windows LC-COLLATE und LC_CTYPE bei mir beim Anlegen einer neuen Datenbank immer ‘German_Germany.1252’ heißt, auf Linux aber ‘de_DE.UTF8’.

Lässt sich das Problem irgendwie lösen? Ich habe schon hier im Forum gesucht aber die Antworten haben mir nicht wirklich weiter geholfen.

Danke schon mal für alle Antworten

Google könnte helfen. Ich fand z.B. http://postgresql.1045698.n5.nabble.com/UTF-8-collation-on-Windows-td5792707.html

Nur viel helfen kann ich nicht - nutze keine solchen Exoten-Umgebungen… jedenfalls baut PG in diesen Dingen auf das unterliegende OS. Wenn das zu davon keine Ahnung hat, sieht es schlecht aus.

Warum legst Du dann die Datenbank nicht mit UTF-8 an?
z.B. mit:

initdb -D "%ProgramData%\postgres" -U postgres -E UTF8 -A md5

Der Parameter -E legt fest mit welchem Encoding die Datenbank angelegt werden soll.

Die Datenbank ist mit Kodierung UTF8 angelegt. Den Teil habe ich selber in der Hand. Die Sortierfolge und der Zeichentyp werden dann aber unter Windows automatisch auf German_Germany.1252 gesetzt. Da greift Postgresql in der Tat automatisch auf das zugrunde liegende OS zu (das hatte ich auch schon rausbekommen), bei Linux heißt dies dann eben de_DE.UTF8.

Was mich nur irritiert ist, dass pg_dump und pg_restore mit diesem Unterschied anscheinend nicht umgehen können. Bei pg_dump kann ich über den Schalter “–encoding” eine bestimmt Kodierung einstellen. Wähle ich dort “WIN1252” gelingt das restore und sowohl die Kodierung als auch die Sortierreihenfolge und Zeichttyp sind wie gewünscht korrekt.

Wenn ich aber unter Linux eine Datensicherung mache (meist ja ein Skript) gebe ich (und ich vermute die meisten anderen auch) ja keine andere Kodierung an. Zumindest bis jetzt nicht. Wenn dieser Umstand dann aber bedeutet, dass ich diese Datensicherung nur unter Linux wiederherstellen kann, nicht aber unter Windows, dann finde ich das suboptimal. Wie es sich mit den Kodierungen unter OS X und anderen Betriebssystemen verhält kann ich mangels Verfügbarkeit nicht testen.

Langer Rede kurzer Sinn: Ich bin davon ausgegangen, dass sich ein pg_dump auf jedem beliebigen Postgres-System per pg_restore wiederherstellen lässt. Da das bei mir nicht geklappt hat dachte ich, ich mache was falsch. Aber das scheint dann wohl noch nicht so zu sein, es geht einfach nicht.

Aber das ist ja das client encoding welches Du jederzeit ändern kannst.

set client_encoding=UTF-8

bzw. dauerhaft über die Umgebungsvariable PGCLIENTENCODING oder in der postgresql.conf: PostgreSQL: Documentation: 16: 20.11. Client Connection Defaults