9 Stimmen

Physikalischer Standort von Objekten in einer PostgreSQL-Datenbank?

Ich bin daran interessiert, die physischen Speicherorte von Tabellen, Ansichten, Funktionen, Daten/Inhalten zu erhalten, die in den Tabellen von PostgreSQL unter Linux OS verfügbar sind. Ich habe ein Szenario, in dem PostgreSQL auf einer SD-Card und einer Festplatte installiert werden könnte. Wenn ich Tabellen, Ansichten, Funktionen und Daten auf der SD-Karte habe, möchte ich die physischen Speicherorte derselben abrufen und sie auf meine Festplatte kopieren, wenn ich den Speicherplatz ersetzen möchte. Ich hoffe, dass die Speicherung der Datenbank in Form von einfachen Dateien Architektur sein sollte.

Ist es außerdem möglich, den Inhalt der Dateien einzusehen? Ich meine, kann ich auf sie zugreifen?

7voto

Erwin Brandstetter Punkte 530399

Kevin und Mike haben bereits Hinweise gegeben, wo man das Datenverzeichnis finden kann. Für den physischen Standort eines Tabelle im Dateisystem, verwenden:

SELECT pg_relation_filepath('my_table');

Arbeiten Sie nicht direkt an den Dateien, wenn Sie nicht genau wissen, was Sie tun.

A Datenbank als Ganzes wird durch ein Unterverzeichnis in PGDATA/base :

Wenn Sie Tablespaces wird es noch komplizierter. Lesen Sie Details im Kapitel Layout der Datenbankdatei im Handbuch :

Für jede Datenbank im Cluster gibt es eine PGDATA/base, benannt nach der OID der Datenbank in pg_database . Dieses Unterverzeichnis ist der Standardspeicherort für die Dateien der Datenbank; insbesondere Insbesondere die Systemkataloge werden dort gespeichert.

...

Jede Tabelle und Index wird in einer separaten Datei gespeichert. Für gewöhnliche Relationen werden diese Dateien nach dem Namen der Tabelle oder des Index . Nummer, die Sie unter pg_class.relfilenode .

...

En pg_relation_filepath() Funktion zeigt die PGDATA) einer beliebigen Beziehung.

Fettgedruckte Hervorhebung von mir.
Das Handbuch zur Funktion pg_relation_filepath() .

5voto

Die Anfrage show data_directory; zeigt Ihnen das Hauptdatenverzeichnis. Aber das sagt Ihnen nicht unbedingt, wo die Dinge gespeichert sind.

PostgreSQL erlaubt die Definition neuer Tablespaces . Ein Tablespace ist ein benanntes Verzeichnis im Dateisystem. Mit PostgreSQL können Sie einzelne Tabellen, Indizes und ganze Datenbanken in jedem zulässigen Tablespace speichern. Wenn also eine Datenbank in einem bestimmten Tablespace erstellt wurde, würde keines ihrer Objekte im Datenverzeichnis erscheinen.

Um zuverlässige Laufzeitinformationen darüber zu erhalten, wo die Dinge auf der Festplatte gespeichert sind, müssen Sie wahrscheinlich Folgendes abfragen pg_database , pg_tablespace , oder pg_tables aus den Systemkatalogen. Tablespace-Informationen können auch in den information_schema-Ansichten verfügbar sein.

Aber für das Zusammenführen oder Kopieren auf die Festplatte ist die Verwendung dieser Dateien mit Sicherheit eine schlechte Sache. Für diese Art von Arbeit ist pg_dump Ihr Freund.

3voto

kgrittn Punkte 16937

Wenn Sie das Kopieren von Festplattendateien als eine Form der Sicherung meinen, sollten Sie dies lesen, insbesondere den Abschnitt über kontinuierliche Archivierung und Point-in-Time Recovery (PITR):

http://www.postgresql.org/docs/current/interactive/backup.html

Wenn Sie versuchen wollen, direkt auf die Daten in den Festplattendateien zuzugreifen und sie zu interpretieren, indem Sie das Datenbankverwaltungssystem umgehen, ist das aus vielen Gründen eine sehr schlechte Idee. Zum einen ist das Speicherschema sehr komplex. Zum anderen ändert es sich in der Regel mit jeder neuen Hauptversion (die einmal pro Jahr erscheint). Drittens, der Geist von E.F. Codd werden Sie wahrscheinlich verfolgen; siehe Regeln 8, 9, 11 und 12 der Die 12 Regeln von Codd .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X