update
This commit is contained in:
+58
-1
@@ -27,4 +27,61 @@ docker exec -i <container_name> psql -U <username> -d <dbname> -c "SELECT <field
|
||||
docker exec -i <container_name> psql -U <username> -d <dbname> -A -F, --csv -c "SELECT <fields> FROM <table>;" > path/tp/file.csv
|
||||
```
|
||||
Erklärung:
|
||||
>The `-A` flag (unaligned output), `-F,` (field separator comma), and `--csv` together produce CSV
|
||||
>The `-A` flag (unaligned output), `-F,` (field separator comma), and `--csv` together produce CSV
|
||||
|
||||
## Verbindung zu einem bestimmten Host und Port
|
||||
|
||||
Für eine Verbindung zu einem PostgreSQL-Server auf einem bestimmten Host und
|
||||
Port werden `-h` und `-p` verwendet:
|
||||
|
||||
```bash
|
||||
psql -h <host> -p <port> -U <username> -d <dbname>
|
||||
```
|
||||
|
||||
Beispiel:
|
||||
|
||||
```bash
|
||||
psql -h 127.0.0.1 -p 15432 -U <username> -d <dbname>
|
||||
```
|
||||
|
||||
Das ist beispielsweise der lokale Endpunkt eines SSH-Tunnels. Bei einem
|
||||
Docker-Setup kann der Host dagegen eine Container-IP, ein Docker-Service-Name
|
||||
oder die Loopback-Adresse der VM sein. Entscheidend ist, von wo aus die
|
||||
Verbindung hergestellt wird.
|
||||
|
||||
## PostgreSQL-Verbindung diagnostizieren
|
||||
|
||||
Eine schrittweise Prüfung hilft dabei, Netzwerk-, Tunnel- und
|
||||
Authentifizierungsprobleme voneinander zu unterscheiden:
|
||||
|
||||
```bash
|
||||
# Ist der TCP-Port erreichbar?
|
||||
nc -vz <host> <port>
|
||||
|
||||
# Lauscht auf der VM ein Prozess auf dem PostgreSQL-Port?
|
||||
sudo ss -ltnp | grep 5432
|
||||
|
||||
# Funktioniert die PostgreSQL-Verbindung mit denselben Parametern?
|
||||
psql -h <host> -p 5432 -U <username> -d <dbname>
|
||||
```
|
||||
|
||||
Wenn `psql` direkt auf der VM funktioniert, ist damit nur bewiesen, dass die
|
||||
VM diesen Endpunkt erreichen kann. Es ist noch nicht bewiesen, dass ein
|
||||
externer Client denselben Weg über den SSH-Tunnel verwendet. Zu prüfen sind
|
||||
deshalb zusätzlich der lokale Tunnel-Port, der entfernte Zielhost, der
|
||||
entfernte Zielport und die SSL-Einstellung des Clients.
|
||||
|
||||
Für eine Docker-Datenbank sind außerdem hilfreich:
|
||||
|
||||
```bash
|
||||
docker ps
|
||||
docker inspect <postgres-container>
|
||||
docker logs --tail 100 <postgres-container>
|
||||
```
|
||||
|
||||
Eine Container-IP kann sich ändern, wenn der Container neu erstellt wird. Für
|
||||
dauerhafte Konfigurationen sind veröffentlichte Host-Ports oder Docker-
|
||||
Service-Namen meist besser geeignet als eine fest eingetragene Container-IP.
|
||||
|
||||
Siehe auch [[SSH Verbindung in Linux]], [[Docker]] und
|
||||
[[DBeaver PostgreSQL via SSH-Tunnel]].
|
||||
|
||||
Reference in New Issue
Block a user