Standardspeicherort der PostgreSQL-Datenbank unter Linux

Antworten:

133

Das " Verzeichnis, in dem postgresql alle Datenbanken speichert " (und Konfiguration) heißt "Datenverzeichnis" und entspricht dem, was PostgreSQL (etwas verwirrend) als " Datenbankcluster " bezeichnet, der sich nicht auf verteiltes Rechnen bezieht, sondern nur eine Gruppe von Datenbanken und verwandten Objekten, die von einem PostgreSQL-Server verwaltet werden.

Der Speicherort des Datenverzeichnisses hängt von der Verteilung ab. Wenn Sie von der Quelle installieren, lautet die Standardeinstellung /usr/local/pgsql/data:

In Bezug auf das Dateisystem ist ein Datenbankcluster ein einzelnes Verzeichnis, in dem alle Daten gespeichert werden. Wir nennen dies das Datenverzeichnis oder den Datenbereich. Es liegt ganz bei Ihnen, wo Sie Ihre Daten speichern. Es gibt keine Standardeinstellung, obwohl Speicherorte wie / usr / local / pgsql / data oder / var / lib / pgsql / data beliebt sind. ( ref )

Außerdem ist eine Instanz eines laufenden PostgreSQL-Servers einem Cluster zugeordnet. Der Speicherort des Datenverzeichnisses kann in der Befehlszeilenoption oder über die Umgebungsvariable (normalerweise im Bereich des laufenden Benutzers ) an den Server-Daemon (" postmaster " oder " postgres " ) übergeben werden. Normalerweise sehen Sie den laufenden Server wie folgt:-DPGDATApostgres

[root@server1 ~]# ps auxw |  grep postgres | grep -- -D
postgres  1535  0.0  0.1  39768  1584 ?        S    May17   0:23 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

Beachten Sie, dass es möglich ist, wenn auch nicht sehr häufig, zwei Instanzen desselben PostgreSQL-Servers (gleiche Binärdateien, unterschiedliche Prozesse) auszuführen, die unterschiedliche "Cluster" (Datenverzeichnisse) bedienen. Natürlich würde jede Instanz ihren eigenen TCP / IP-Port abhören.

leonbloy
quelle
Ich kann das aktuelle Datenverzeichnis sehen, aber ich sehe viele andere Ordner und Dateien. Speichert psql die Datenbank in vielen Dateien oder gibt es nur eine in diesem Datenverzeichnis, nämlich die Datenbank? weil ich zum Beispiel in so etwas wie der DB-Datei auf MySQL oder SQL Server gedacht habe ...
CamiloVA
69
/var/lib/postgresql/[version]/data/

Zumindest in Gentoo Linux und Ubuntu 14.04 standardmäßig.

Sie können postgresql.confparam finden und betrachten data_directory. Wenn es kommentiert ist, ist das Datenbankverzeichnis dasselbe wie dieses Konfigurationsdateiverzeichnis.

Leise
quelle
21
Es wird abhängig von der Verteilung sein, alle machen es etwas anders. Wenn Sie eine Verbindung zum System herstellen können, ist die Verwendung von "SHOW data_directory" wahrscheinlich der einfachste Weg.
Magnus Hagander
@MagnusHagander es ist eine Antwort, y machst du diesen Kommentar nicht zu einer Antwort. Es hat gut für mich funktioniert.
Vishal
in Gnome sehe ich das gleiche hier/var/lib/8.1/postgresql
Junior Mayhé
Für mich ist es '/var/lib/postgresql/9.3/main'
radtek
9
für Centos 7, postgres 9.3 Pfad/var/lib/pgsql/9.3
rana_stack
15

Standard in Debian 8.1 und PostgreSQL 9.4 nach der Installation mit dem Paketmanager apt-get

ps auxw |  grep postgres | grep -- -D
postgres 17340  0.0  0.5 226700 21756 ?        S    09:50   0:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf

so anscheinend /var/lib/postgresql/9.4/main.

Léo Léopold Hertz 준영
quelle
11

Unter Centos 6.5 / PostgreSQL 9.3:

Ändern Sie den Wert von "PGDATA=/var/lib/pgsql/data"an einen beliebigen Speicherort in der anfänglichen Skriptdatei/etc/init.d/postgresql .

Denken Sie an chmod 700 und chown postgres:postgresan den neuen Standort und Sie sind der Chef.

Dum
quelle
2

Mit dem Befehl pg_lsclusters(zumindest unter Linux / Ubuntu) können die vorhandenen Cluster und damit auch das Datenverzeichnis aufgelistet werden:

Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5433 down   postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
10  main    5432 down   postgres /var/lib/postgresql/10/main  /var/log/postgresql/postgresql-10-main.log
k_o_
quelle
1

Ich denke, die beste Methode ist, die pg_settingAnsicht abzufragen :

 select s.name, s.setting, s.short_desc from pg_settings s where s.name='data_directory';

Ausgabe:

      name      |        setting         |            short_desc
----------------+------------------------+-----------------------------------
 data_directory | /var/lib/pgsql/10/data | Sets the server's data directory.
(1 row)
Null
quelle
0

Die folgende Abfrage hilft beim Auffinden der Postgres-Konfigurationsdatei.

postgres=# SHOW config_file;
             config_file
-------------------------------------
 /var/lib/pgsql/data/postgresql.conf
(1 row)

[root@node1 usr]# cd /var/lib/pgsql/data/
[root@node1 data]# ls -lrth
total 48K
-rw------- 1 postgres postgres    4 Nov 25 13:58 PG_VERSION
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_twophase
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_tblspc
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_snapshots
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_serial
drwx------ 4 postgres postgres   36 Nov 25 13:58 pg_multixact
-rw------- 1 postgres postgres  20K Nov 25 13:58 postgresql.conf
-rw------- 1 postgres postgres 1.6K Nov 25 13:58 pg_ident.conf
-rw------- 1 postgres postgres 4.2K Nov 25 13:58 pg_hba.conf
drwx------ 3 postgres postgres   60 Nov 25 13:58 pg_xlog
drwx------ 2 postgres postgres   18 Nov 25 13:58 pg_subtrans
drwx------ 2 postgres postgres   18 Nov 25 13:58 pg_clog
drwx------ 5 postgres postgres   41 Nov 25 13:58 base
-rw------- 1 postgres postgres   92 Nov 25 14:00 postmaster.pid
drwx------ 2 postgres postgres   18 Nov 25 14:00 pg_notify
-rw------- 1 postgres postgres   57 Nov 25 14:00 postmaster.opts
drwx------ 2 postgres postgres   32 Nov 25 14:00 pg_log
drwx------ 2 postgres postgres 4.0K Nov 25 14:00 global
drwx------ 2 postgres postgres   25 Nov 25 14:20 pg_stat_tmp
Srikant Patra
quelle