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
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.
Sie können auch danach fragen
select setting from pg_settings where name = 'data_directory';
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.
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
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
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.
Öffnen Sie die postgresql.conf und gehen Sie zur Zeile:
data_directory='/var/lib/postgresql/main/'
ist deine Antwort.
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)
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.
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
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.
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
Basierend auf der Antwort von @Matthew Mark Miller befindet es sich unter macOS 10.14 mit Postgres 11 unter:
~/Library/Application Support/Postgres
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.