Abfrage auf Datenbank Tabelle ```bash psql -U -d -c "SELECT * FROM information_schema.tables;" ``` .. fragt zB alle Tabellen in DB aus Systemtabelle ab ### Abfrage in Docker Container Finde zuerst Namen des Containers heraus mit ```bash docker ps ``` und dann ```bash docker exec -it psql -U -d ``` -> interaktive Session oder ```bash docker exec -it psql -U -d -c "SELECT FROM ;" ``` ### Export Ergebnisse ```bash docker exec -i psql -U -d -c "SELECT FROM
;" > path/tp/file.txt ``` ==WICHTIG==: Option `-i`, NICHT ~~`-it`~~, sonst hängt sich BASH auf ### Export Ergebnisse als CSV ```bash docker exec -i psql -U -d -A -F, --csv -c "SELECT FROM
;" > path/tp/file.csv ``` Erklärung: >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 -p -U -d ``` Beispiel: ```bash psql -h 127.0.0.1 -p 15432 -U -d ``` 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 # Lauscht auf der VM ein Prozess auf dem PostgreSQL-Port? sudo ss -ltnp | grep 5432 # Funktioniert die PostgreSQL-Verbindung mit denselben Parametern? psql -h -p 5432 -U -d ``` 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 docker logs --tail 100 ``` 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]].