Umlaute in psql

Ok, danke. Habe es gelesen und komme jetzt in die Umgebungsvariablen rein. Was noch hilfreich wäre, wenn ich wüsste, ob ich PATH als Umgebungsvariable oder Systemvariable verändern muss. Muss ich dann den Pfad von psql.exe in die Liste von PATH ziehen?

@castorp ich bin leider noch nicht ganz durch…darf ich noch um deine Hilfe bitten? Ich finde leider psql.exe nicht…

“C:\Program Files\PostgreSQL\13\scripts\runpsql.bat”

Ich habe eine Verknüpfung zu runpsql.bat auf dem Desktop und ich steige so in psql ein.

Müsste ich hier den Pfad eingeben von runpsql.bat? Oder wie ist das Vorgehen?

psql.exe liegt normalerweise in dem bin Verzeichnis, also müsstest Du es so aufrufen:

"C:\Program Files\PostgreSQL\13\bin\psql"

Wenn C:\Program Files\PostgreSQL\13\bin im Pfad ist, dann reicht halt auch psql. Das sind aber Grundkenntnisse in der Bedienung eines Windows Computer und hat nichts mit PostgreSQL zu tun.

Was genau die Batchdatei macht, die Du hast, kann ich nicht sagen.

Habe vorhin diesen Artikel gefunden:
Der Befehl xxx ist entweder falsch geschrieben oder konnte nicht gefunden werden - Tipps & Tricks (wintotal.de)

Wahrscheinlich muss ich es so machen…

Meine Systemvariablen sehen so aus:

Habe noch diesen früheren post von dir gefunden:
psql Konsole & Encoding - Verwaltungstools / Sonstige - PG-Forum.de

Das heisst, die geänderte Einstellung geht nach jedem schliessen von psql verloren…

Gibt es keine andere Möglichkeit, dass die neue Einstellung “bleibt”?

Wie man die Codepage in Windows dauerhaft ändert, weiß ich nicht.

Den entsprechenden chcp Aufruf kannst Du natürlich in eine Batchdatei packen und psql dann immer über diese Batchdatei starten.

Das set client_encoding kannst Du in psqlrc einstellen.

Leider wird der Buchstabe ü immer noch nicht richtig dargestellt, wie im angehängten print screen zu sehen ist.

Ich stelle zuerst die console codepage um mit chcp 1252 und rufe dann psql auf mit psql -U postgres. Die Warnung erscheint zwar nicht mehr, aber wenn ich dann einen Datensatz importiere, dann wird z.B. das ü nicht richtig angezeigt. Du siehst ‘Zürich’ und ‘Graubünden’ wird nicht korrekt angezeigt. Woran könnte das liegen?

Der Datensatz ist eine .sql-Datei, die ich mit mockaroo.com erstellt habe und dann mit \i Pfad/zur/.sql-Datei in postgres importiere. In der .sql-Datei sind die Umlaute korrekt.

Das mit dem client_encoding habe ich noch nicht ganz verstanden, was zu tun ist…könntest du mir das bitte nochmal kurz erklären? Danke!

Vermutlich sind die Zeichen in der DB als UTF-8 gespeichert. Dann brauchst Du wohl eher codepage 65001 und client_encoding = UTF8 - aber generell funktioniert UTF-8 unter Windows auf der Konsole eher mässig. Vielleicht wäre ein anderer SQL Client eine bessere Idee

Ich habe mal den pgcli SQL Client installiert mit Ananconda. Dies hat gut funktioniert. Ich weiss aber leider nicht, wie ich pgcli überhaupt benutze, um an meine Datenbank reinzukommen. Es scheint, dass ich den Anaconda prompt benutzen muss. Wenn ich pgcli eingebe, werde ich nach einem Administratoren Passwort gefragt. Ist das nicht das Passwort, das ich bei der Installation von postgres registriert habe, so wie es läuft, wenn ich psql auf Windows starte? Ich blick da ehrlich gesagt nicht ganz durch. Hast du pgcli schon mal genutzt?

Wie machen es eigentlich andere deutschsprachige Windows Benutzer mit Postgres? Gehen alle den Weg über die batch Datei? Seit ich seit mehreren Tagen auf dem Web (v.a. stackoverflow, hier) nach Informationen suche, fällt mir auf, dass auch andere mit dem Problem kämpfen.

Wie machst du es? Zeigt es bei dir Umlaute korrekt an, wenn du Worte mit Umlauten in einem Datensatz importierst in postgres?

Ich verwende unter Windows kein psql (bzw. nur für administrative Arbeiten, bei denen keine Umlaute benötigt werden. Ich denke die grundsätzlichen Probleme von UTF-8 in der Windows Konsole können auch andere Konsolen-Clients (wie pgcli) nicht beheben.

Nimm einen GUI Client, dann solltest Du keine Probleme mit den Umlauten haben.

Ich habe es bei mir nochmal ausprobiert.

Datenbank encoding ist UTF-8. Mit chcp 1252 vor dem Aufruf von psql und folgendem set client_encoding=win1252; werden Umlaute in den Daten korrekt angezeigt.

Ja, ich sehe, dass es bei dir geht.

Bei mir geht’s leider nicht:

Warum wohl?

Bei mir wird es sogar in pgAdmin4 falsch angezeigt :frowning_face:

Was lässt sich daraus schliessen? Das ist doch seltsam…

Meine .sql-Datei, die ich importiere sieht so aus:

Ich blick nicht mehr durch…

Das set client_encoding ... musst Du vor den INSERTs laufen lassen, sonst kommen die Umlaute natürlich falsch an.

Klar, ich De** :wink: Werde dies noch überprüfen. Vielen Dank für deine Geduld und deine Hilfe, habe viel gelernt!

Es geht leider immer noch nicht…

Ich setze das client_encoding VOR den inserts…

Was mache ich falsch?

Mit was für einem Encoding ist denn die Datei gespeichert? Funktioniert es wenn Du die INSERTs via Copy & Paste direkt ausführst?

Mit UTF-8.

Wenn ich die inserts manuell einfüge, klappt es:

Warum klappt es wohl nicht, wenn ich die Befehle aus einer Datei ausführen lasse mit \i DATEI? Gut, habe jetzt wenigstens einen “work around” für mein Problem, aber so richtig elegant ist copy/paste ja nicht :see_no_evil: