Jak znaleźć katalog danych PostgreSQL?


123

Zapomniałem, jak ostatnio uruchomiłem PostgreSQL (to było miesiące temu) i nie pamiętam, gdzie znajduje się katalog danych. postgresPolecenia wydaje się wymagać lokalizację 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

Kiedy używasz Homebrew do instalowania Postgres, datato/usr/local/var/postgres
andrerpena

Odpowiedzi:


152

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 konkretnej konwencji systemu operacyjnego lub historii powłoki.


7
jeśli nie jest uruchomiony, spróbuj uruchomić find dla postgresql.conf, który zwykle znajduje się w katalogu danych lub będzie zawierał informacje o katalogu danych.
xzilla

34

Możesz również o to zapytać

select setting from pg_settings where name = 'data_directory';

18

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.


1
Ja też używam naparu. Na dzień dzisiejszy wymieniony datadir pg_config --configurenie jest taki sam, jak ten brew info postgresqlzalecany (który jest $(brew --prefix)/var/postgresi nie jest dowiązaniem symbolicznym do wymienionego). Wygląda na to, że formuła jest nieco luźna przy prawidłowym używaniu flag konfiguracji.
Vaz

Uwaga dla Ubuntu / Debain: pg_config nie jest instalowany z postgresql-<ver>pakietem apt, ale wymaga równieżpostgresql-server-dev-<ver>
pscl 20.04.2018

@PSCL To prawda, ale OP działało pod OS X.
Dave Newton,

Zrozumiany. Tylko uwaga do przyszłych odniesień użytkowników Debiana (takich jak ja), którzy natknęli się na to pytanie w oparciu o jego ogólny tytuł.
pscl

1
@Tom Nie sądzę, aby formuła naprawdę zamierzała użyć datadiru przekazanego do konfiguracji ... oczekuje, że da się go przekazać jako argument linii poleceń, możesz zobaczyć, co zostanie przekazane, gdy zostanie uruchomione automatycznie jako usługa $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist, spójrz dla ścieżki podążającej za -D(jest /usr/local/var/postgresna mojej).
Vaz

16

W systemie Ubuntu \ Debian wypróbuj pg_lsclusterspolecenie.

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

8

Jeśli nie możesz się zalogować (np. Zapomniałeś hasła), ale usługa jest uruchomiona, ponieważ MacOS X jest odmianą posix, zawsze możesz sprawdzić, psczy 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

2

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

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

jest twoja odpowiedź.


gdzie można znaleźćpostgresql.conf
5359531

@ user5359531 Możesz to find / -iname "postgresql.conf" 2>/dev/nullsprawdzić
Tom

Mój postgresql.confnie ma data_directoryzdefiniowanego. Jest to tylko odniesienie w komentarzu:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ

2

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

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

wprowadź opis zdjęcia tutaj


Gdzie jest to okno dialogowe? Nie mogę znaleźć czegoś takiego w bezpośredniej instalacji (nie warzonej) wersji 9.5 za pośrednictwem postgresql.org/download/macosx . Jest dostarczany z pgadmin III, ale wydaje się, że nie ma tego okna dialogowego. Nie mogę znaleźć żadnych klientów stacjonarnych?
John Little,

1

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 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ż wymieniony jako usługa w serveradmin (chociaż postgres jest zainstalowany).

sudo serveradmin list

nie wyświetla postgresów


1

W systemie Windows Server 2012 polecenie pg_confignie ujawniło 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.


0

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


--bindirpokazuje lokalizację plików wykonywalnych, a nie katalog danych. --configurejest OK, nawet jeśli trzeba trochę przeanalizować dane wyjściowe.
dezso

Tak, to prawda i niestety pg_config nie ma parametru, który ujawniałby datadir. Kiedy to napisałem, pomyślałem, że przynajmniej daje to coś bliskiego, zakładając, że datadir nie znajduje się w specjalnej lokalizacji. datadir byłby wówczas względny w stosunku do bindira, takiego jak ../data
Jacques

0

Jak wskazano, można również użyć psdo 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ś podobnego /usr/local/pgsql/datalub gdziekolwiek indziej zostało określone w parametrach PostgreSQL przy uruchomieniu.


0

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

~/Library/Application Support/Postgres

0

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, należy wymienić LIKE '/%'z LIKE '%/%'ponieważ ścieżka zaczyna się od litery dysku)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.