it-swarm.it

Come trovo la directory dei dati di PostgreSQL?

Ho dimenticato come ho avviato PostgreSQL l'ultima volta (è stato mesi fa) e non ricordo dove si trova la directory dei dati. Il comando postgres sembra richiedere la posizione della directory dei dati.

Sono su MacOsX se questo aiuta.

/usr/local/postgres non esiste sul mio Mac.

Utilizzando le risposte fornite di seguito, ho scoperto che era qui:

/usr/local/var/postgres
134
randomguy

Se riesci a connetterti al database con accesso da superutente, allora

SHOW data_directory;

è il modo più breve.

Se il server non è in esecuzione e hai dimenticato dove si trovava la directory dei dati, allora devi davvero indovinare te stesso. Una convenzione specifica del sistema operativo o la cronologia di Shell potrebbero fornire suggerimenti.

168
Peter Eisentraut

Puoi anche fare una query per questo

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

pg_config mostra molte informazioni tra cui la directory dei dati:

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'

Questa potrebbe essere una cosa specifica per la birra, però; senza birra non so cosa mostri.

19
Dave Newton

Su Ubuntu\Debian, prova pg_lsclusters comando.

Sulla mia macchina:

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

Se non riesci ad accedere (ad esempio, hai dimenticato la password) ma il servizio è in esecuzione, poiché MacOS X è una variabile posix, puoi sempre controllare ps per vedere se viene passato come argomento:

Su un box Linux con due istanze di postgres in esecuzione:

-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

Le versioni moderne del client desktop PostgreSQL per OSX hanno una comoda finestra di dialogo "Impostazioni server" che ti permetterà non solo di elencare la directory dei dati ma di aprirla direttamente.

Molto utile se si verifica un arresto anomalo casuale della macchina che lascia un file di blocco.

enter image description here

4

Apri postgresql.conf, vai alla riga:

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

è la tua risposta.

4
Ronaldinho

Generalizzando dalle 2 risposte principali:

Per mostrare la directory dei dati direttamente dalla riga di comando:

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

Per vedere anche tutti gli altri percorsi definiti per file e directory:

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

Uscita campione:

          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)

(Su Windows, sostituire LIKE '/%' con LIKE '%/%' perché il percorso inizia con una lettera di unità)

1
mivk

Su Windows Server 2012, il comando pg_config non ha rivelato la directory dei dati per qualche motivo folle. Ma l'ho trovato guardando il file C:\Program Files\PostgreSQL\9.4\pg_env.bat, che conteneva questa riga:

@SET PGDATA=E:\POSTGRESQL

Questa era la risposta di cui avevo bisogno.

1
user3618269

Su OS X 10.8 e 10.9 (non 10.10) con l'app server installata, in una finestra di terminale, digitare

Sudo serveradmin settings postgres

Su OS X 10.9 Mavericks, questo è l'output che ottengo da quello, che include la directory dei dati.

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"

Ho appena provato questo in Yosemite (OS X 10.10) e Postgres non è più elencato come servizio in serveradmin (sebbene Postgres sia installato).

Sudo serveradmin list

non elenca postgres

1
Jason S

Che ne dici di usare l'utilità standard pg_config come pg_config --bindir Si potrebbero anche ottenere i parametri di configurazione usati per compilare PostgreSQL e analizzarli con pg_config --configure

0
Jacques

Su Fedora e probabilmente su molte altre distribuzioni Linux puoi passare all'utente postgres e leggere la variabile d'ambiente PGDATA. Per esempio.:

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

Basato sulla risposta di @Matthew Mark Miller, su macOS 10.14 utilizzando Postgres 11 si trova in:

~/Library/Application Support/Postgres
0
Navid

Come sottolineato, si potrebbe anche usare ps per acquisire la posizione dei dati come:

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

Funzionerebbe la maggior parte del tempo. Restituirebbe qualcosa come /usr/local/pgsql/data o ovunque sia stato specificato nei parametri di PostgreSQL all'avvio.

0
Jacques