Come trovo la directory dei dati di PostgreSQL?


124

Ho dimenticato come ho avviato PostgreSQL l'ultima volta (è stato mesi fa) e non ricordo dove si trova la directory dei dati. Il postgrescomando 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

Quando usi Homebrew per installare Postgres, allora dataè/usr/local/var/postgres
andrerpena il

Risposte:


154

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 della shell potrebbero fornire suggerimenti.


7
se non è in esecuzione, provare a eseguire una ricerca per postgresql.conf, che di solito si trova nella directory dei dati o conterrà informazioni sulla directory dei dati.
Xzilla,

35

Puoi anche fare una query per questo

select setting from pg_settings where name = 'data_directory';

18

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.


1
Sto usando anche la birra. A partire da ora, il datadir elencato in pg_config --configurenon è lo stesso di quello brew info postgresqlraccomandato (che è $(brew --prefix)/var/postgrese non è un link simbolico a quello elencato). Sembra che la formula sia un po 'lenta sull'uso corretto dei flag di configurazione.
Vaz,

Nota per Ubuntu / Debain: pg_config non è installato con il postgresql-<ver>pacchetto apt, ma richiede anchepostgresql-server-dev-<ver>
pscl

@PSCL Vero, ma OP era sotto OS X.
Dave Newton,

Inteso. Solo una nota per il futuro riferimento degli utenti Debian (come me) che si imbattono in questa domanda in base al suo titolo generico.
pscl

1
@Tom Non penso che la formula abbia davvero intenzione di usare il datadir passato per configurare ... si aspetta che venga passato il datadir come arg della riga di comando, puoi vedere cosa viene passato quando viene eseguito automaticamente come servizio $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist, guarda per il percorso che segue il -D/usr/local/var/postgressul mio).
Vaz,

16

Su Ubuntu \ Debian, prova il pg_lsclusterscomando.

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

8

Se non riesci ad accedere (ad esempio, hai dimenticato la password) ma il servizio è in esecuzione, poiché MacOS X è una variabile posix, puoi sempre verificare psse 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

2

Apri postgresql.conf, vai alla riga:

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

è la tua risposta.


dove trovipostgresql.conf
user5359531

@ user5359531 Puoi farlo find / -iname "postgresql.conf" 2>/dev/nullper scoprirlo
Tom,

Il mio postgresql.confnon ha data_directorydefinito. Si fa riferimento solo in un commento:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ

2

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 della macchina casuale che lascia un file di blocco.

inserisci qui la descrizione dell'immagine


Dov'è questa finestra di dialogo? Non riesco a trovare nulla del genere su un'installazione diretta (non prodotta) di 9.5 tramite postgresql.org/download/macosx . Viene fornito con pgadmin III, ma questo non sembra avere questo dialogo. Non riesco a trovare alcun client desktop?
John Little,

1

Su OS X 10.8 e 10.9 (non 10.10) con l'app server installata, in una finestra del 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

Su Windows Server 2012, il comando pg_confignon 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.


0

Che ne dici di usare l'utilità standard pg_config come pg_config --bindirOne potrebbe anche ottenere i parametri di configurazione usati per compilare PostgreSQL e analizzarli conpg_config --configure


--bindirmostra la posizione degli eseguibili, non la directory dei dati. --configureva bene, anche se bisogna analizzare un po 'l'output.
dezso,

Sì, è vero e sfortunatamente pg_config non ha parametri che rivelino il datadir. Quando ho scritto questo, ho pensato che almeno dava qualcosa di simile, supponendo che il datadir non fosse in una posizione speciale. il datadir sarebbe quindi relativo al bindir come ../data
Jacques

0

Come sottolineato, si potrebbe anche utilizzare psper 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 del genere /usr/local/pgsql/datao dovunque sia stato specificato nei parametri di PostgreSQL all'avvio.


0

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

~/Library/Application Support/Postgres

0

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, sostituisci LIKE '/%'con LIKE '%/%'perché il percorso inizia con una lettera di unità)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.