Umlaute in psql

Hallo, ich bin Einsteiger in Sachen PostgreSQL. In der SQL Shell (psql) habe ich festgestellt, dass die Umlaute nicht korrekt angezeigt werden, z.B. ‘ü’ wird als eine hochgestellte 3 dargestellt. ö als Zeichen für geteilt durch. ä als o mit einer Tilde darüber…

Wie lässt sich dies ändern? Ist das ein Konfigurations-Problem?

psql.bin (13.2.5 (Ubuntu 13.2.5-1+ubuntu4), server 13.2.5 (Ubuntu 13.2.5-1+ubuntu4))
Type "help" for help.

edb=# select 'äöüÄÖÜß';
 ?column? 
----------
 äöüÄÖÜß
(1 row)

edb=*# 

hier geht es. Version, Betriebsystem, …

Habe psql 13.3 und Windows 10. Wenn ich mit \help z.B. die Hilfe aufrufe, kommt:

Verf(3)gbare Hilfe…

Stellvertretend für ü erscheint eine 3 im Exponent…

Wenn ich den gleichen Befehl eingebe:

SELECT 'äöü';

Kommt…

FEHLER:  Zeichen mit Byte-Folge 0x81 in Kodierung »WIN1252« hat keine Entsprechung in Kodierung »UTF8«

z.B. im Screenshot wird “Eigentümer” nicht korrekt angezeigt.

Wenn Du psql startest bekommst Du vermutlich eine Warnung wie diese:

WARNING: Console code page (850) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

Damit psql unter Windows Umlaute korrekt darstellt müssen client_encoding und die aktuelle Windows code page zusammen passen.
cmd-1

Wenn man aber die Codepage via chcp umstellt und dann client_encoding anpasst passt das:

cmd-2

Ja, genau: bei mir erscheint die Meldung oben. Aber das mit der Codepage ging mir jetzt etwas zu schnell. Muss ich etwas in der Kommandozeile eingeben und ändern? Oder muss ich in psql etwas eingeben?

Die entsprechenden Befehle sind alle in meinem 2. Screenshot zu sehen.

Bei mir erscheint dies…ist doch komisch, wenn ich psql installiert habe, oder nicht?

Das hat nichts mit Postgres zu tun. Das Verzeichnis in dem psql.exe liegt wurde schlicht nicht in die Liste der Verzeichnisse in der Umgebungsvariable PATH aufgenommen.

Ok. Ich habe postgres normal installiert. Wie kann ich nachträglich psql.exe in die Liste der Verzeichnisse der Umgebungsvariable PATH aufnehmen?

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?