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

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.


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';

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.


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

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

2

Öffne postgresql.conf, gehe zur Zeile:

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

ist deine Antwort.


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


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


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.


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


--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.


0

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

~/Library/Application Support/Postgres

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)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.