Postgresql: Ermitteln Datenbankname aus postgresql-filesystem

Postgres speichert seine Datenbanken in einem „base“-Ordner mit Unterordnern pro Datenbank. Das Problem ist, dass die Unterordner aus einer Zahlenkombination bestehen (welche die oid der Datenbank darstellt). Falls es zu Problemen mit dem Filesystem kommt, kann man mit folgender Abfrage ermitteln, welcher Unterordner zu welcher Datenbank gehört (von postgresql-console psql):

postgres=# SELECT pg_database.datname,pg_database.oid FROM pg_database ORDER BY datname;

Damit erhält man eine Auflistung aller Datenbanknamen und der zugehörigen oid (welche die Zahl des Unterordners ist).

Ist der Unterordner bekannt (Unterordner = oid zB 16429), kann man mit folgender Abfrage die Datenbank ermitteln:

postgres=# SELECT oid,datname from pg_database WHERE oid=16429;

Beispiel: rsync error in /var/lib/postgresql/9.3/main/base/16429/234035538

Dann verbindet man sich mit der betroffenen Datenbank:

postgres=# \c my-database

Um den Tabellennamen bei Postgresql < 9.4 zu ermitteln:

SELECT 
    n.nspname AS tableschema, 
    c.relname AS tablename
FROM pg_class c
INNER JOIN pg_namespace n ON (c.relnamespace = n.oid)
WHERE c.relfilenode = 234035538; -- "subdir name"
 tableschema |          tablename          
-------------+-----------------------------
public | customers_bookings_services
(1 row)

Für Postgresql > 9.4:

SELECT pg_filenode_relation(0, 234035538); -- "0" stands for default tablespace

Shell: IP’s und MAC-Adressen aus eigenem Netz – sortiert

Welche IP’s sind in meinem Netzwerk und welche MAC-Adresse ist ihnen zugeordnet?

arp -e | sort -t . -k 3,3n -k 4,4n

„arp -e“ listet IP-Adressen und MAC-Adressen im Netz auf (Linux-Style).

„sort“ sortiert diese (-t . = Delimiter „.“, -k x,xn sortieren nach x-tem Element und numerisch sortieren („n“ am Ende vom k-Parameter).

Um den ARP-Cache (IP und MAC gecached) anzuzeigen und zu sortieren:

ip n s | sort -t . -k 3,3n -k 4,4n

Postgresql: Prüfen, ob Replikation noch läuft

postgres=# SELECT client_addr, state, sent_location, write_location, replay_location 
           FROM pg_stat_replication; 

Ausgabe:

client_addr |   state   | sent_location | write_location | replay_location ------------+-----------+---------------+----------------+--------------
10.10.11.14 | streaming | 4C91/1700DF30 | 4C91/1700DF30  | 4C91/1700DE60
(1 row)

Siehe auch: https://blog.medianetix.de/2021/02/postgresql-pruefen-ob-replikation-laeuft/

Shell: SSH-Verbindung zu altem Server mit ssh-dss (oder ssh-rsa)

Nach einem Update funktioniert die SSH-Verbindung zu einem älteren Server nicht mehr? (Meldung: „Unable to negotiate with 192.168.80.95 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss„)

Dann kann das mitliefern der erlaubten/geduldeten Host-Key Alggorithmen helfen:

ssh -oHostKeyAlgorithms=+ssh-dss user@192.168.80.95

Alternativ kann auch in der ~/.ssh/config der Verbindungsparameter eingetragen werden:

Host OldServer
    Hostname 192.168.80.95
    HostKeyAlgorithms=+ssh-dss

Anmerkung: Parameter funktioniert auch mit scp.