sql-info.de
DeutschEnglish

4. psql

4.1. Wie kann ich Abfrage-Ergebnisse im selben Format wie MySQL or Oracle (SQL*PLUS) ausgeben lassen?

Um Ausgabe mit voller Umrandung, ähnlich wie beim MySQL-Befehlszeileprogramm (MySQL monitor), ausgeben zu lassen, \pset border 2 ausführen.

test=# SELECT 'Hello', 'World';
+----------+----------+
| ?column? | ?column? |
+----------+----------+
| Hello    | World    |
+----------+----------+
(1 row)

Ausgabe im Format wie beim oracle'schen SQL*PLUS gibt es mit \pset border 0.

test=# SELECT 'Hello', 'World';
?column? ?column?
-------- --------
Hello    World
(1 row)

\pset border 1 bringt das normale psql Format wieder.

test=# SELECT 'Hello', 'World';
 ?column? | ?column? 
----------+----------
 Hello    | World
(1 row)

4.2. Wie kann ich NULL-Werte als NULL anzeigen lassen?

Einfach:\pset null NULL.

Sie können auch jede andere Zeichenkette angeben.

Um diese Einstellung dauerhaft zu machen, fügen Sie sie in die ~/.psqlrc-Konfigurationsdatei.

4.3. Wie kann ich Zeichen mit dem numerischen Code 0xC3A4 in psql einfügen?

Sie möchten ein Zeichen mittels dessen numerischen Wert einfügen. Zum Beispiel möchten Sie das Zeichen ä mittels des numerischen Wertes der UTF8-Kodierung (hex. C3A4) einfügen. Wenn die Anweisung in einer externen Sprache ausgeführt wird, ist dies kein Problem, da die Umwandlung meiste mit einer eingebauten Funktion der jeweiligen Sprache gemacht werden kann.

Direkt geht es mit den Oktalwerten:

INSERT INTO my_tbl (unitxt) VALUES('\303\244')

Falls die Umwandlung in Oktal zu aufwendig ist, können Sie mit encode() etwas langatmiger folgendes machen:

INSERT INTO my_tbl (unitxt) VALUES(encode(decode('c3a4','hex'), 'escape'))

( encode() konvertiert einen Hexadezimal-Wert in einen binären (bytea) Wert, der anschliessend von decode() in einen TEXT-Wert umgewandelt wird).

Falls Sie nur mit Dezimal-Werten arbeiten möchten, kommt noch to_hex() dazu:

INSERT INTO my_tbl (unitxt) VALUES(encode(decode(to_hex(50084),'hex'), 'escape'))

4.4. Der Befehl \connect mit einem ungültigen Nutzernamen verursacht einen Verbindungsabbruch

Wenn Sie einen\connect-Befehl von einem Skript ausführen, wo der angegebene Nutzername in der Datenbank nicht existiert, bricht psql mit einem FATAL Fehler ab und kehrt nicht zur vorigen Verbindung zurück. Dies passiert nicht, wenn man den Befehl direkt in psql eingibt. Beispiel:

foo=# \! cat /tmp/connect.sql
\connect - foo
foo=# \connect - foo
FATAL:  user "foo" does not exist
Previous connection kept
foo=# \i /tmp/connect.sql
psql:/tmp/connect.sql:1: \connect: FATAL:  user "foo" does not exist
!> \l
You are currently not connected to a database.
!>  

Dieses Verhalten ist absichtlich und dient vor allem dazu, bei automatischen Skripten einen Abbruch auszulösen, um Operationen unter dem falschen User bzw. in einer falschen Datenbank zu vermeiden. Siehe man 1 psql für weitere Hinweise.