22 praktische PostgreSQL Befehle

Zum Wochenende eine kleine Auflistung praktischer PostgreSQL Befehle.

postgresql

Zu PostgreSQL verbinden

In eine PostgreSQL Konsole Einloggen

sudo -u postgres psql

Einloggen und direkt zu einer Datenbank verbinden

sudo -u postgres psql -d datanbank


Arbeiten mit Konsolenbefehlen

Alle Datenbanken anzeigen

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

oder ohne vorherigen Login mit "sudo -u postgres psql -l"

Benutzer auflisten

postgres-# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 yolo      | Superuser                                      | {}

Zu einer Datenbank verbinden

postgres=#\c Datenbankname

You are now connected to database "Datenbankname" as user "postgres".

Tabellen anzeigen

postgres=#\dt 

Schemas anzeigen

postgres=#\dn

Funktionen anzeigen

postgres=#\df oder df+

Sequenzen anzeigen

postgres=#\ds

Views anzeigen

postgres=#\dv

Datenbank und Benutzer mit Rechten erstellen

CREATE datenbank;
CREATE USER benutzer WITH PASSWORD 'Geheim';  
GRANT ALL PRIVILEGES ON DATABASE datenbank to benutzer; 

Alle verfügbaren Konsolenbefehle anzeigen

postgres=#\?

Eine bestimmte Datenbankgröße auslesen

select pg_database_size('Datenbankname');

oder in schön

SELECT pg_size_pretty(pg_database_size('Datenbankname'));

oder alle vorhanden Datenbankgrößen anzeigen

select datname, pg_size_pretty(pg_database_size(datname)) as size from pg_database;


Offene Datenbankverbindungen anzeigen

SELECT datname,usename,client_addr,client_port FROM pg_stat_activity ;

Die Konfiguration neu laden (ohne Neustart)

select pg_reload_conf();

Logfile Rotation anwerfen

select pg_rotate_logfile()

PostgreSQL verlassen

postgres=#\q

Backup und Wiederherstellung

Ein Datenbank Backup erstellen

pg_dump --user username --host hostname -b -F c datenbank > /tmp/datenbank.dump 

Alle verfügbaren Datenbanken sichern

pg_dumpall

Datenbank wiederherstellen

pg_restore --user username --host hostname -c -d datenbank datenbank.dump


Das könnte dich auch interessieren

[Lösung] vSphere/ESXi 6.0 U1 mit Veeam - Error: NFC storage connection is unavailable

Es ist mal wieder Zeit für einen Ausflug in virtuelle Gefilde, genauer gesagt soll es um das neueste Update aus dem Hause VMware gehen.

vSphere/Veeam - NFC storage connection is unavailable

VMware hat vor wenigen Tagen ein Update 60u1 für vCenter und ESXi Maschinen veröffentlicht (Changelog). 
Dieses bringt neben Neuerungen auch neue Probleme mit sich, so lässt sich nach einem Update auf die aktuellste Version keine virtuelle Maschine mit der Sicherungssoftware Veeam sichern, auch wenn dort die aktuellste Patch Version installiert ist. 

Die Sicherung bricht mit dem folgenden Fehler ab:

Getting VM info from vSphere
Error: NFC storage connection is unavailable. Storage: [stg:datastore-666,nfchost:host-666,conn:127.0.1.1]. Storage display name: [datastore]
Failed to create NFC download stream. NFC path: [nfc://conn:127.0.1.1,nfchost:host-667,stg:datastore-666@localhost.vmx]. 

Im Netz finden sich einige Vorschläge die dieses Problem angeblich lösen. Viele bringen den Fehler mit falschen DNS Einstellungen in Verbindung und schlagen vor alle Geräte richtig ins DNS einzutragen, bzw. die Host Datei anzupassen.
Leider beziehen sich die Lösungen oft auf ältere ESXi bzw. Veeam Versionen und führen somit nicht zum gewünschten Ziel.

veeam

Hier hilft ein Blick in die Logs der Sicherungssoftware oft weiter:

ERR |Failed to initiate NFC session. Target host: [127.0.0.1]. VI connection ID: [127.0.1.1]. Storage MOID: [datastore-666].
ERR |SSL error, code: [3368].error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
>>  |SSL_connect() function call has failed.

Der Meldung lässt sich entnehmen, dass die Verbindung an der SSL Aushandlung scheitert. Der Fehler hat somit Nichts mit DNS oder ähnlichem zu tun, es kommt schlicht keine sichere Verbindung zu Stande.


Ein weiterer Blick in den Changelog von ESXi 6.0 Update 1 zeigt folgenden Satz "Support for SSLv3: Support for SSLv3 has been disabled by default."
Das heißt, aktualisierte ESXi Hosts unterstützen dieses Protokoll in der neuesten Version nicht mehr. Das ist nicht weiter verwunderlich, denn es gilt als unsicher.

vSphere6

Leider benötigt Veeam SSLv3 weiterhin für seine Sicherungen, genauer betrifft es den Port 902. Die Funktion lässt sich über einen Eintrag in der Config wieder aktivieren. Dazu muss auf die jeweilige ESXi Maschine via SSH zugegriffen werden. Die unten erwähnte Konfigurationsdatei gilt es anzupassen.

cp /etc/vmware/config /etc/vmware/config.date
vi /etc/vmware/config
    vmauthd.ssl.noSSLv3 = false
    

Danach ist ein Neustart des Dienstes erforderlich

/etc/init.d/rhttpproxy restart 

Nach dieser Änderung sollten Sicherungen mit Veeam wieder funktionieren. Weitere Details dazu unter kb2063.