Kodierung nachträglich ändern

Hallo,

ich habe eine Datenbank vom alten System in ein neues mittels dem Befehl:

pg_dumpall

und zurück mit

sql < dump

Nun habe ich erst nach einigen Tagen bemerkt das es mit den Umlauten nicht mehr passt.
Hier die Kodierung vom psql des alten Systems:

postgres=# \l
    Liste der Datenbanken
    Name | Eigentümer | Kodierung | Sortierfolge | Zeichentyp |
    -----------±-----------±----------±-------------±-----------±------------------------
    dbwichtig | dbuser | LATIN1 | de_DE | de_DE |
    postgre s | postgres | LATIN1 | de_DE | de_DE |
    template0 | postgres | LATIN1 | de_DE | de_DE |

und psql des neuen Systems:

 postgres-# \l
    Liste der Datenbanken
    Name | Eigentümer | Kodierung | Sortierfolge | Zeichentyp |
    -----------±-----------±----------±-------------±------------±------------------------
    dbwichtig | dbuser | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 |
    postgres | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 |
    template 0 | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 |

Soweit ich mich eingelesen habe sind die Zeichen in der neuen Datenbank nun Latin1 und Psql denkt sie sind UTF8.
Wenn ich diese jetzt Konvertiere mach ich vermutlich mehr kaputt oder?
Kann man die Kodierung auch einfach Umstellen ohne zu Konvertieren?
Hätte der Dump das nicht richtig einstellen müssen? :frowning:

Grüße Jörg

Nein, vermutlich ist alles in Ordnung.

Du hast instinktiv die Methode gefunden, die Kodierung einer DB zu ändern: auslesen und in der gewünschen Kodierung einlesen.

Hast Du denn sichtbare Probleme? Ich vermute: nein.

Hallo ,
doch ich habe Probleme die Datenbank gehört zu einer Cloud und alle Dateien bzw. Ordner mit Umlauten können nicht geöffnet werden da sie im Dateisystem nicht gefunden werden. Im Dateisystem werden alle Umlaute richtig dargestellt. Im Browser sehe ich es wie unten im Beispiel.

Beispiel einer Datei die schon auf dem alten System erstellt wurde:
neu => Test über dä ömlaut.pdf
normal=> Test über dä ömlaut.pdf

habe gerade nochmal die Dump´s angeschaut
die alten enthielten den Befehl :
SET client_encoding = ‘LATIN1’;

die sicherung der neuen “Fehlerhaften” Datenbank ist:
SET client_encoding = ‘UTF8’;

daher vermute ich das die Daten in Latin1 sind und die Datenbank denkt es ist UTF8

vemutlich reicht es, daß in Deiner Applikation (Nextcloud?) auf den neuen Wert einzustellen.

ich kann dort nur bei php, und im header die Kodierung einstellen steht immer auf UTF-8
und das war auch früher schon so…

Man kann alle Dateien aus dem Dateisystem neu einlesen dann würde es vermutlich passen,
jedoch habe ich auch einen Passwortmanager der Verschlüsselt die Passwörter speichert und da sind einige Korupt geworden.
Die Passwörter kann ich mit dem einlesen nicht Retten.

Ist es normal so das der Dump beim einspielen automatisch konvertiert wird wenn eine andere Kodierung vorliegt?

Nach langen suchen denke ich über folgende möglichkeit nach.

Ich fand ein skript für mysql aber nicht für psql.

Daher würde ich jetzt einen neuen pg_dumpall erstellen und die Zeichen mit Notepad suchen und ersetzen austauschen.
Danach den dump wieder einspielen.
Die Passwörter kann ich vermutlich nicht retten da die daten verschlüsselt sein sollten.

Kann ich den dumpall einfach drüberbügeln oder muss ich die vorherige Datenbank löschen?

Ist dies überhaupt zu Empfehlen?

Ich würde die Datei des alten dump_all einfach in UTF-8 kodieren. Hast du zufällig jemanden mit Linux - da gibt es für sowas iconv.
Dann ganz normal mit psql einspielen in die neue DB. die darf bei einem Laden aus dump_all nicht vorhanden sein, wird ja da automatisch angelegt. Die Definitionen sind ja in der dump_all-Datei enthalten.