it-swarm.dev

Jak znaleźć katalog danych PostgreSQL?

Zapomniałem, jak ostatnio uruchomiłem PostgreSQL (to było miesiące temu) i nie pamiętam, gdzie znajduje się katalog danych. Wydaje się, że polecenie postgres wymaga lokalizacji katalogu danych.

Jestem na MacOsX, jeśli to pomaga.

/usr/local/postgres nie istnieje na moim komputerze Mac.

Korzystając z odpowiedzi podanych poniżej, stwierdziłem, że to tutaj:

/usr/local/var/postgres
134
randomguy

Jeśli możesz połączyć się z bazą danych z dostępem administratora, to

SHOW data_directory;

jest najkrótszą drogą.

Jeśli serwer nie działa i zapomniałeś, gdzie był katalog danych, naprawdę musisz zgadnąć. Wskazówki dotyczące poszczególnych konwencji systemu operacyjnego lub historii powłoki.

168
Peter Eisentraut

Możesz również o to zapytać

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

pg_config pokazuje wiele informacji, w tym katalog danych:

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'

Może to jednak dotyczyć konkretnego naparu; bez naparu nie wiem, co to pokazuje.

19
Dave Newton

W systemie Ubuntu\Debian wypróbuj pg_lsclusters Komenda.

Na mojej maszynie:

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

Jeśli nie możesz się zalogować (np. Zapomniałeś hasła), ale usługa jest uruchomiona, ponieważ MacOS X jest wariantem posix, zawsze możesz sprawdzić ps, aby sprawdzić, czy jest przekazywana jako argument:

W systemie Linux z uruchomionymi dwoma instancjami postgres:

-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

Nowoczesne wersje klienta komputerowego PostgreSQL dla OSX mają wygodne okno dialogowe „Ustawienia serwera”, które pozwala nie tylko wyświetlić listę danych, ale otworzyć je bezpośrednio.

Bardzo przydatne, jeśli wystąpi przypadkowa awaria komputera, która pozostawia plik blokady.

enter image description here

4

Otwórz postgresql.conf, przejdź do linii:

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

jest twoja odpowiedź.

4
Ronaldinho

Uogólnienie na podstawie 2 najlepszych odpowiedzi:

Aby wyświetlić katalog danych bezpośrednio w wierszu polecenia:

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

Aby zobaczyć także wszystkie inne zdefiniowane ścieżki do plików i katalogów:

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

Przykładowe dane wyjściowe:

          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)

(W systemie Windows zamień LIKE '/%' z LIKE '%/%', ponieważ ścieżka zaczyna się od litery dysku)

1
mivk

W systemie Windows Server 2012 polecenie pg_config nie ujawnił katalogu danych z jakiegoś szalonego powodu. Ale znalazłem to, patrząc na plik C:\Program Files\PostgreSQL\9.4\pg_env.bat, który zawierał ten wiersz:

@SET PGDATA=E:\POSTGRESQL

To była odpowiedź, której potrzebowałem.

1
user3618269

W systemach OS X 10.8 i 10.9 (nie 10.10) z zainstalowaną aplikacją serwera, w oknie terminala wpisz

Sudo serveradmin settings postgres

W systemie OS X 10.9 Mavericks jest to wynik, który otrzymuję z tego, który zawiera katalog danych.

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"

Właśnie próbowałem tego w Yosemite (OS X 10.10) i postgres nie jest już wyświetlany jako usługa pod serveradmin (chociaż postgres jest zainstalowany).

Sudo serveradmin list

nie wymienia postgresów

1
Jason S

Co powiesz na użycie standardowego narzędzia pg_config, takiego jak pg_config --bindir Można również pobrać parametry konfiguracji używane do kompilacji PostgreSQL i parsować je za pomocą pg_config --configure

0
Jacques

Na Fedorze i prawdopodobnie kilku innych dystrybucjach Linuksa możesz przejść do użytkownika postgres i odczytać zmienną środowiskową PGDATA. Na przykład.:

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

Na podstawie odpowiedzi @Matthew Mark Miller na MacOS 10.14 przy użyciu Postgres 11 znajduje się pod adresem:

~/Library/Application Support/Postgres
0
Navid

Jak wskazano, można również użyć ps do przechwycenia lokalizacji danych, takich jak:

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

To działałoby przez większość czasu. Zwróci coś w stylu /usr/local/pgsql/data lub gdziekolwiek indziej zostało to określone w parametrach PostgreSQL przy uruchomieniu.

0
Jacques