it-swarm-eu.dev

Wie finde ich das Datenverzeichnis von PostgreSQL?

Ich habe vergessen, wie ich PostgreSQL das letzte Mal gestartet habe (vor Monaten), und ich kann mich nicht erinnern, wo sich das Datenverzeichnis befindet. Der Befehl postgres scheint den Speicherort des Datenverzeichnisses zu erfordern.

Ich bin auf MacOsX, wenn das hilft.

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

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

/usr/local/var/postgres
134
randomguy

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 befindet, müssen Sie sich wirklich selbst erraten. Eine betriebssystemspezifische Konvention oder der Shell-Verlauf können Hinweise geben.

168

Sie können auch danach fragen

select setting from pg_settings where name = 'data_directory';
38
DrColossos

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.

19
Dave Newton

Versuchen Sie unter Ubuntu\Debian das pg_lsclusters Befehl.

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
17
Adam Matan

Wenn Sie sich nicht anmelden können (z. B. Ihr Passwort vergessen haben), der Dienst jedoch ausgeführt wird, da MacOS X eine Posix-Variable ist, können Sie jederzeit ps überprüfen, um festzustellen, 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
9
Joe

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

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

(enter image description here

4

Öffnen Sie die postgresql.conf und gehen Sie zur Zeile:

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

ist deine Antwort.

4
Ronaldinho

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)

(Ersetzen Sie unter Windows LIKE '/%' mit LIKE '%/%' weil der Pfad mit einem Laufwerksbuchstaben beginnt)

1
mivk

Unter Windows Server 2012 wird der Befehl pg_config hat das Datenverzeichnis aus irgendeinem verrückten Grund nicht enthüllt. Aber ich habe es gefunden, indem ich mir die Datei C:\Program Files\PostgreSQL\9.4\pg_env.bat, die diese Zeile enthielt:

@SET PGDATA=E:\POSTGRESQL

Das war die Antwort, die ich brauchte.

1
user3618269

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 von dieser 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
Jason S

Wie wäre es mit dem Standarddienstprogramm pg_config wie pg_config --bindir? Man könnte auch die Konfigurationsparameter abrufen, die zum Kompilieren von PostgreSQL verwendet werden, und sie mit pg_config --configure Analysieren.

0
Jacques

Unter Fedora und wahrscheinlich mehreren anderen Linux-Distributionen können Sie zum Benutzer postgres wechseln und die Umgebungsvariable PGDATA lesen. Z.B.:

Sudo su - postgres
echo ${PGDATA}
/var/lib/pgsql/12/data
0
dbdemon

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

~/Library/Application Support/Postgres
0
Navid

Wie bereits erwähnt, kann man auch ps verwenden, um den Datenspeicherort zu erfassen, z.

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 wie /usr/local/pgsql/data Zurückgeben oder wo immer es beim Start in den Parametern von PostgreSQL angegeben wurde.

0
Jacques