Wie finde ich das PostgreSQL-Datenverzeichnis?

124

Ich habe vergessen, wie ich PostgreSQL das letzte Mal gestartet habe (es war vor Monaten) und ich erinnere mich nicht, wo sich das Datenverzeichnis befindet. Der postgresBefehl erfordert anscheinend den Speicherort des Datenverzeichnisses.

Ich bin auf MacOsX, wenn das hilft.

/usr/local/postgres existiert nicht auf meinem Mac.

Anhand der folgenden Antworten stellte ich fest, dass es hier war:

/usr/local/var/postgres
zufälliger Typ
quelle
Wenn Sie Postgres mit Homebrew installieren, dataist es/usr/local/var/postgres
andrerpena

Antworten:

154

Wenn Sie mit Superuser-Zugriff eine Verbindung zur Datenbank herstellen können, dann

SHOW data_directory;

ist der kürzeste Weg.

Wenn der Server nicht läuft und Sie vergessen haben, wo sich das Datenverzeichnis befand, müssen Sie sich wirklich selbst raten. Eine betriebssystemspezifische Konvention oder der Shell-Verlauf können Hinweise geben.

Peter Eisentraut
quelle
7
Wenn es nicht ausgeführt wird, versuchen Sie, eine Suche nach postgresql.conf auszuführen, die sich normalerweise im Datenverzeichnis befindet oder Informationen zum Datenverzeichnis enthält.
Xzilla
35

Sie können auch danach fragen

select setting from pg_settings where name = 'data_directory';
DrColossos
quelle
18

pg_config zeigt viele Informationen einschließlich des Datenverzeichnisses:

CONFIGURE = '--disable-debug' '--prefix=/usr/local/Cellar/postgresql/9.3.2' 
            '--datadir=/usr/local/Cellar/postgresql/9.3.2/share/postgresql' 
            '--docdir=/usr/local/Cellar/postgresql/9.3.2/share/doc/postgresql' 
            '--enable-thread-safety' '--with-bonjour' '--with-gssapi' '--with-krb5' 
            '--with-ldap' '--with-openssl' '--with-pam' '--with-libxml' '--with-libxslt'
            '--with-ossp-uuid' '--with-python' '--with-perl' '--with-tcl' 'CC=clang' 
            'CFLAGS=-I/usr/local/Cellar/ossp-uuid/1.6.2/include' 
            'LDFLAGS=-L/usr/local/Cellar/ossp-uuid/1.6.2/lib' 'LIBS=-luuid'

Dies könnte jedoch eine brauspezifische Sache sein; Ohne Gebräu weiß ich nicht, was es zeigt.

Dave Newton
quelle
1
Ich benutze auch Brauen. Ab sofort ist der in aufgeführte Datadir pg_config --configurenicht derselbe wie der brew info postgresqlempfohlene (was $(brew --prefix)/var/postgresein Symlink zu dem aufgelisteten ist und nicht). Es sieht so aus, als ob die Formel bei der korrekten Verwendung von Konfigurations-Flags ein bisschen nachlässig ist.
Vaz
Hinweis für Ubuntu / Debain: pg_config wird nicht mit dem postgresql-<ver>apt-Paket installiert , benötigt aber auchpostgresql-server-dev-<ver>
pscl
@PSCL Wahr, aber OP war unter OS X.
Dave Newton
Verstanden. Nur ein Hinweis für die zukünftige Referenz von Debian-Benutzern (wie ich selbst), die aufgrund ihres generischen Titels über diese Frage stolpern.
PSCL
1
@Tom Ich glaube nicht, dass die Formel wirklich dazu gedacht ist, den übergebenen Datadir für die Konfiguration zu verwenden. Es wird erwartet, dass der Datadir als Befehlszeilenargument übergeben wird. Sie können sehen, was übergeben wird, wenn er automatisch als Dienst ausgeführt $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plistwird für den Pfad, der dem folgt -D(er liegt /usr/local/var/postgresbei mir).
Vaz
16

Versuchen Sie unter Ubuntu \ Debian den pg_lsclustersBefehl.

Auf meiner Maschine:

pg_lsclusters 
Version Cluster   Port Status Owner    Data directory             Log file
8.4     main      5432 online postgres /home/adam/db/main/data    /home/adam/db/main/log
Adam Matan
quelle
8

Wenn Sie sich nicht anmelden können (z. B. Ihr Passwort vergessen haben), der Dienst jedoch ausgeführt wird, weil MacOS X eine Posix-Variante ist, können Sie jederzeit überprüfen ps, ob es als Argument übergeben wird:

Auf einer Linux-Box mit zwei Postgres-Instanzen:

-bash-3.2$ ps ax | grep postgres | grep -v postgres:
 4698 ?        S      9:59 /opt/PostgreSQL/8.4/bin/postgres -D /opt/PostgreSQL/8.4/data
 6115 ?        S      8:16 /opt/PostgreSQL/8.4/bin/postgres -D /opt/PostgreSQL/8.4/data_sums
30694 pts/9    S+     0:00 grep postgres
Joe
quelle
2

Öffne postgresql.conf, gehe zur Zeile:

data_directory='/var/lib/postgresql/main/'

ist deine Antwort.

Ronaldinho
quelle
Wo finden Siepostgresql.conf
user5359531
@ user5359531 Das können Sie find / -iname "postgresql.conf" 2>/dev/nullherausfinden
Tom
Meine postgresql.confhat keine data_directorydefiniert. Es wird nur in einem Kommentar erwähnt:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ
2

Moderne Versionen des PostgreSQL-Desktop-Clients für OSX verfügen über ein praktisches Dialogfeld "Servereinstellungen", mit dem Sie das Datenverzeichnis nicht nur auflisten, sondern direkt öffnen können.

Sehr nützlich, wenn ein zufälliger Maschinenabsturz auftritt, der eine Sperrdatei zurücklässt.

Bildbeschreibung hier eingeben

Matthew Mark Miller
quelle
Wo ist dieser Dialog? Ich kann so etwas auf einer direkten Installation (nicht brauen) von 9,5 über postgresql.org/download/macosx nicht finden . Es kommt mit pgadmin III, aber dies scheint nicht diesen Dialog zu haben. Ich kann keine Desktop-Clients finden?
John Little
1

Geben Sie unter OS X 10.8 und 10.9 (nicht 10.10) mit installierter Server-App in einem Terminalfenster Folgendes ein

sudo serveradmin settings postgres

Unter OS X 10.9 Mavericks ist dies die Ausgabe, die ich davon erhalte, einschließlich des Datenverzeichnisses.

postgres:log_connections = "on"
postgres:unix_socket_directory = "/private/var/pgsql_socket"
postgres:listen_addresses = "127.0.0.1,::1"
postgres:unix_socket_group = "_postgres"
postgres:log_statement = "ddl"
postgres:log_line_prefix = "%t "
postgres:unix_socket_permissions = "0770"
postgres:log_lock_waits = "on"
postgres:logging_collector = "on"
postgres:log_filename = "PostgreSQL.log"
postgres:dataDir = "/Library/Server/PostgreSQL/Data"
postgres:log_directory = "/Library/Logs/PostgreSQL"

Ich habe dies gerade in Yosemite (OS X 10.10) versucht und postgres wird unter serveradmin nicht mehr als Dienst aufgeführt (obwohl postgres installiert ist).

sudo serveradmin list

listet keine Postgres auf

Jason S
quelle
1

Unter Windows Server 2012 hat der Befehl pg_configdas Datenverzeichnis aus verrückten Gründen nicht angezeigt. Aber ich fand es, indem ich mir die Datei ansah C:\Program Files\PostgreSQL\9.4\pg_env.bat, die diese Zeile enthielt:

@SET PGDATA=E:\POSTGRESQL

Das war die Antwort, die ich brauchte.

user3618269
quelle
0

Wie wäre es mit dem Standard-Dienstprogramm pg_config wie pg_config --bindirOne, das auch die Konfigurationsparameter abrufen könnte, mit denen PostgreSQL kompiliert und analysiert wird ?pg_config --configure

Jacques
quelle
--bindirZeigt den Speicherort der ausführbaren Dateien an, nicht das Datenverzeichnis. --configureist OK, obwohl man die Ausgabe etwas analysieren muss.
Dezso
Ja, das ist wahr und leider hat pg_config keinen Parameter, der den Datadir enthüllen würde. Als ich dies schrieb, dachte ich, dass es zumindest etwas Nahes gibt, vorausgesetzt, der Datadir befindet sich nicht an einem bestimmten Ort. datadir wäre dann relativ zum bindir wie ../data
Jacques
0

Wie bereits erwähnt, kann psder Datenstandort auch wie folgt erfasst werden:

ps -e |egrep postgres|egrep -E '[[:blank:]]+\-D'| perl -pe 's/^.*[[:blank:]]+-D[[:blank:]]+(\S+).*?$/$1/'.

Dies würde die meiste Zeit funktionieren. Es würde so etwas zurückgeben wie /usr/local/pgsql/dataoder wo immer es beim Start in den Parametern von PostgreSQL angegeben wurde.

Jacques
quelle
0

Basierend auf der Antwort von @Matthew Mark Miller unter macOS 10.14 mit Postgres 11 befindet es sich unter:

~/Library/Application Support/Postgres
Navid
quelle
0

Verallgemeinern aus den 2 Top-Antworten:

So zeigen Sie das Datenverzeichnis direkt in der Befehlszeile an:

psql -U postgres -tA -c "SHOW data_directory;"

So zeigen Sie auch alle anderen definierten Pfade zu Dateien und Verzeichnissen an:

psql -U postgres -c "SELECT name, setting FROM pg_settings WHERE setting LIKE '/%';"

Beispielausgabe:

          name           |                 setting                  
-------------------------+------------------------------------------
 config_file             | /etc/postgresql/9.6/main/postgresql.conf
 data_directory          | /mnt/pg_ssd_500/9.6/main
 external_pid_file       | /var/run/postgresql/9.6-main.pid
 hba_file                | /etc/postgresql/9.6/main/pg_hba.conf
 ident_file              | /etc/postgresql/9.6/main/pg_ident.conf
 ssl_cert_file           | /etc/ssl/pg_server.cer
 ssl_key_file            | /etc/ssl/private/pg_server.key
 stats_temp_directory    | /var/run/postgresql/9.6-main.pg_stat_tmp
 unix_socket_directories | /var/run/postgresql
(9 rows)

(Unter Windows ersetzen LIKE '/%'mit , LIKE '%/%'weil der Pfad mit einem Laufwerksbuchstaben beginnt)

mivk
quelle