Wo speichert PostgreSQL die Datenbank?

Antworten:

355

Verwenden Sie diese Abfrage, um festzustellen, wo sich das Datenverzeichnis befindet.

show data_directory;

Verwenden Sie, um alle Laufzeitparameter anzuzeigen

show all;

Sie können Tabellenbereiche erstellen, um Datenbankobjekte in anderen Teilen des Dateisystems zu speichern. Verwenden Sie diese Abfrage, um Tabellenbereiche anzuzeigen, die sich möglicherweise nicht in diesem Datenverzeichnis befinden.

SELECT * FROM pg_tablespace;
Mike Sherrill 'Cat Recall'
quelle
1
show data_directory; Befehl zeigt auf den genauen Ort der Daten. Das Durchsuchen eines bestimmten Ordners ist schmerzhaft, da möglicherweise jemand anderes ihn für Sie installiert hat und Sie die Konfiguration jetzt nicht kennen. Wenn Sie also SQL folgen, können Sie Zeit sparen. :) Danke Mike.
Vishal
3
Es heißt "muss Superuser sein, um das Datenverzeichnis zu untersuchen" :(
temporärer_Benutzername
5
Wenn Sie kein DBA sind, müssen Sie es sowieso nicht wirklich wissen.
Mike Sherrill 'Cat Recall'
8
Übrigens: Wenn jemand auf einem Mac wie ich nach dem Datenbankspeicherort für Postgres.app sucht, befindet er sich standardmäßig in ~ / Library / Application Support / Postgres [ver] / var.
Sstringer
1
Verwenden Sie zum Ausführen einer Abfrage PGAdmin III und das Symbol "Abfrage ausführen" in der Menüleiste.
Rutger Hofste
61

Auf Windows7 alle Datenbanken werden durch eine Zahl in der Datei mit dem Namen bezeichnet pg_databaseunter C:\Program Files (x86)\PostgreSQL\8.2\data\global. Dann sollten Sie unter dieser Nummer unter nach dem Ordnernamen suchen C:\Program Files (x86)\PostgreSQL\8.2\data\base. Das ist der Inhalt der Datenbank.

senthilkumari
quelle
3
Antworten Sie nicht betriebssystemspezifisch, es sei denn, in der Frage wird das Betriebssystem ausdrücklich angegeben.
Simonmenke
24
Warum nicht? Wenn Sie das Betriebssystem nicht erwähnen und nur "das funktioniert" sagen, wird jeder, der dies auf einem anderen Betriebssystem versucht, verwirrt sein. Es ist relevant. EDIT: Oh, du meinst wahrscheinlich "gib überhaupt keine betriebssystemspezifische Antwort." Ich denke, das macht Sinn, ich weiß es nicht.
David Winiecki
34
@ David, Die Frage wurde vermutlich geschlossen, weil nicht angegeben wurde, welches Betriebssystem. (Wenn es ein Betriebssystem angegeben hätte, wäre es geschlossen worden, weil es zu spezifisch war.) Ihre Antwort war hilfreich und informativ - ignorieren Sie einfach die Neinsager und Downvoter, bis es ihnen gelingt, SO endgültig zu zerstören. Hasser werden es hassen und all das.
SamGoody
@SamGoody Es wäre ein bisschen sinnvoll, was Sie sagten, wenn diese Antwort tatsächlich richtig wäre. (Es ist nicht unbedingt falsch, da der Ordner möglicherweise in Windows vorhanden ist, aber sicherlich nicht selbstverständlich). Ob dies der Fall ist oder nicht, lässt sich leicht anhand der bereits gegebenen Antwort herausfinden.
Jon Hanna
@senthilkumari Ich habe Postgresql 11 und Windows 10. Wie Sie erwähnt haben, habe ich versucht, die pg_database im globalen Ordner zu sehen, aber ich konnte keine sehen. Ich konnte sehen, dass es eine Reihe von _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init gab. Für Windows 10 welche Datei soll ich suchen. Ist es anders
Nachiket
29

Öffnen Sie pgAdmin und gehen Sie zu Eigenschaften für eine bestimmte Datenbank. Suchen Sie die OID und öffnen Sie das Verzeichnis

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Es sollten Ihre DB-Dateien sein.

Almir Sarajčić
quelle
14
SELECT oid from pg_database where datname = '<dbname>'
Charlie
27

Unter meiner Linux-Installation ist es hier: /var/lib/postgresql/8.x/

Sie können es mit ändern initdb -D "c:/mydb/"

Sadegh
quelle
12
Kommt auf die Distribution an - für Fedora 20 ist es unter /var/lib/pgsql/data. Besser herausfinden mit ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou
17

Die Position bestimmter Tabellen / Indizes kann durch TABLESPACEs angepasst werden:

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;
ymv
quelle
15

Alle haben bereits geantwortet, aber nur für die neuesten Updates. Wenn Sie wissen möchten, wo sich alle Konfigurationsdateien befinden, führen Sie diesen Befehl in der Shell aus

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
Saad Saadi
quelle
14

Ich wette, Sie stellen diese Frage, weil Sie versucht haben, pg_ctl startden folgenden Fehler zu erhalten:

pg_ctl: Kein Datenbankverzeichnis angegeben und Umgebungsvariable PGDATA nicht festgelegt

Mit anderen Worten, Sie suchen nach dem Verzeichnis, nach dem Sie -Din Ihrem pg_ctl startBefehl suchen möchten.

In diesem Fall enthält das gesuchte Verzeichnis diese Dateien.

PG_VERSION      pg_dynshmem     pg_multixact
pg_snapshots    pg_tblspc       postgresql.conf
base            pg_hba.conf     pg_notify   
pg_stat         pg_twophase     postmaster.opts
global          pg_ident.conf   pg_replslot
pg_stat_tmp     pg_xlog         postmaster.pid
pg_clog         pg_logical      pg_serial
pg_subtrans     postgresql.auto.conf    server.log

Sie können es finden, indem Sie eine der oben genannten Dateien und Verzeichnisse mithilfe der mit Ihrem Betriebssystem bereitgestellten Suche suchen.

In meinem Fall (eine HomeBrew- Installation unter Mac OS X ) befinden sich diese Dateien beispielsweise in /usr/local/var/postgres. Um den Server zu starten, tippe ich:

pg_ctl -D /usr/local/var/postgres -w start

... und es funktioniert.

xagg
quelle
1
Wenn Sie Homebrew verwenden, ist eine einfachere Möglichkeit, diese Daten zu finden, einfachbrew info postgres
Ben
Sie haben Recht mit dem Grund, warum ich nach dem Datenbankordner suche. Aber die Sache ist, ich kann keine der oben genannten Dateien mitlocate <filename>
aswin prabhakar
Fand sie ... musste verwendensudo locate <filename>
aswin prabhakar
14

Postgres speichert Daten in Dateien in seinem Datenverzeichnis. Führen Sie die folgenden Schritte aus, um zu einer Datenbank und ihren Dateien zu gelangen:

Die Datenbank, die einer postgresql-Tabellendatei entspricht, ist ein Verzeichnis. Der Speicherort des gesamten Datenverzeichnisses kann durch Ausführen abgerufen werden SHOW data_directory. In einem UNIX-ähnlichen Betriebssystem (z. B. Mac) /Library/PostgreSQL/9.4/data Gehen Sie in den Basisordner des Datenverzeichnisses, in dem sich alle Datenbankordner befinden:/Library/PostgreSQL/9.4/data/base

Suchen Sie den Namen des Datenbankordners, indem Sie Folgendes ausführen (Gibt eine Ganzzahl an. Dies ist der Name des Datenbankordners):

SELECT oid from pg_database WHERE datname = <database_name>;

Suchen Sie den Tabellendateinamen durch Ausführen (Gibt eine Ganzzahl an. Dies ist der Dateiname):

SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

Dies ist eine Binärdatei. Dateidetails wie Größe und Erstellungsdatum können wie gewohnt abgerufen werden. Für weitere Informationen lesen Sie diesen SO-Thread

picmate 涅
quelle
11

Auf dem Mac: /Library/PostgreSQL/9.0/data/base

Das Verzeichnis kann nicht eingegeben werden, aber Sie können den Inhalt anzeigen über: sudo du -hc data

evgeni
quelle
13
Wenn Sie über Homebrew installiert haben (und warum nicht?), /usr/local/var/postgresKönnen Sie dies anhand des show data_directory;Tipps von @ MikeSherrill herausfinden
Chris Beck,
/Library/PostgreSQL/9.0/data/basescheint ein Mac-ähnlicher Ort zu sein als /usr/local/var/postgres. Sie können im Finder nicht zu letzterem navigieren, ohne versteckte Finder-Funktionen zu aktivieren.
Charlie
@Charlie Sie können mit dem Finder im Menü "Gehe zu" suchen. Gehe> Gehe zu Ordner ... oder ⇧⌘G
Jason S
@JasonS Ja, Sie könnten diesen Trick verwenden, um den nicht Mac-ähnlichen Ordner im Finder zu öffnen.
Charlie
1
In meinem Fall ist es in: / Users / bob / Library / Anwendungsunterstützung / Postgres / var-9.5
Bwyss
7

Unter Windows befindet sich das PGDATA-Verzeichnis, das in den PostgresSQL-Dokumenten beschrieben wird , ungefähr so C:\Program Files\PostgreSQL\8.1\data. Die Daten für eine bestimmte Datenbank befinden sich unter (zum Beispiel) C:\Program Files\PostgreSQL\8.1\data\base\100929, wobei 100929 die Datenbanknummer ist.

Ben Hoyt
quelle
1
Achtung: Wenn Sie eine Sicherung auf Dateisystemebene durchführen möchten, sichern Sie diese Verzeichnisse nicht einfach, da Sie, wie in den Dokumenten beschrieben, möglicherweise versucht sind, nur bestimmte einzelne Tabellen oder Datenbanken von ihren jeweiligen zu sichern oder wiederherzustellen Dateien oder Verzeichnisse. Dies funktioniert nicht, da die in diesen Dateien enthaltenen Informationen ohne die Festschreibungsprotokolldateien pg_clog / *, die den Festschreibungsstatus aller Transaktionen enthalten, nicht verwendet werden können. "
Janis Veinbergs
Das hängt davon ab. Sie könnten es bei der Installation in einem anderen Ordner konfiguriert haben.
ANeves
Bei mir gibt es keinen Datenordner in C: \ Programme \ PostgreSQL \ 9.4 \ Ist dies etwas Spezifisches für 9.4 oder haben Sie etwas falsch gemacht?
LucyViolet
2

Die Antwort von picmate ist richtig. Unter Windows ist der Hauptspeicherort des DB-Ordners (zumindest bei meiner Installation).

C:\PostgreSQL\9.2\data\base\

und nicht in Programmdateien.

Mit seinen 2 Skripten erhalten Sie genau das Verzeichnis / die Datei (en), die Sie benötigen:

SELECT oid from pg_database WHERE datname = <database_name>;
SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

meins ist in datname 16393 und relfilenode 41603

Datenbankdateien in postgresql

k3nn
quelle
0

Ich führe Postgres (9.5) in einem Docker-Container aus (unter CentOS, wie es passiert), und wie Skippy le Grand Gourou in einem Kommentar oben erwähnt, befinden sich die Dateien in /var/lib/postgresql/data/.

$ docker exec -it my-postgres-db-container bash
root@c7d61efe2a5d:/# cd /var/lib/postgresql/data/
root@c7d61efe2a5d:/var/lib/postgresql/data# ls -lh
total 56K
drwx------. 7 postgres postgres   71 Apr  5  2018 base
drwx------. 2 postgres postgres 4.0K Nov  2 02:42 global
drwx------. 2 postgres postgres   18 Dec 27  2017 pg_clog
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_commit_ts
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_dynshmem
-rw-------. 1 postgres postgres 4.4K Dec 27  2017 pg_hba.conf
-rw-------. 1 postgres postgres 1.6K Dec 27  2017 pg_ident.conf
drwx------. 4 postgres postgres   39 Dec 27  2017 pg_logical
drwx------. 4 postgres postgres   36 Dec 27  2017 pg_multixact
drwx------. 2 postgres postgres   18 Nov  2 02:42 pg_notify
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_replslot
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_serial
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_snapshots
drwx------. 2 postgres postgres    6 Sep 16 21:15 pg_stat
drwx------. 2 postgres postgres   63 Nov  8 02:41 pg_stat_tmp
drwx------. 2 postgres postgres   18 Oct 24  2018 pg_subtrans
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_tblspc
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_twophase
-rw-------. 1 postgres postgres    4 Dec 27  2017 PG_VERSION
drwx------. 3 postgres postgres   92 Dec 20  2018 pg_xlog
-rw-------. 1 postgres postgres   88 Dec 27  2017 postgresql.auto.conf
-rw-------. 1 postgres postgres  21K Dec 27  2017 postgresql.conf
-rw-------. 1 postgres postgres   37 Nov  2 02:42 postmaster.opts
-rw-------. 1 postgres postgres   85 Nov  2 02:42 postmaster.pid
Wählscheibe
quelle