web-dev-qa-db-fra.com

Comment trouver le répertoire de données de PostgreSQL?

J'ai oublié comment j'ai démarré PostgreSQL la dernière fois (c'était il y a des mois) et je ne me souviens pas où se trouve le répertoire de données. La commande postgres semble nécessiter l'emplacement du répertoire de données.

Je suis sur MacOsX si cela aide.

/usr/local/postgres n'existe pas sur mon Mac.

En utilisant les réponses fournies ci-dessous, j'ai trouvé que c'était ici:

/usr/local/var/postgres
134
randomguy

Si vous pouvez vous connecter à la base de données avec un accès superutilisateur,

SHOW data_directory;

est le chemin le plus court.

Si le serveur ne fonctionne pas et que vous avez oublié où se trouvait le répertoire de données, vous devez vraiment vous deviner. Une convention spécifique au système d'exploitation ou l'historique du shell peut fournir des conseils.

168
Peter Eisentraut

Vous pouvez également l'interroger

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

pg_config affiche beaucoup d'informations, y compris le répertoire de données:

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'

Cela pourrait être une chose spécifique au brassage, cependant; sans infusion je ne sais pas ce que ça montre.

19
Dave Newton

Sur Ubuntu\Debian, essayez le pg_lsclusters commande.

Sur ma machine:

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

Si vous ne pouvez pas vous connecter (par exemple, vous avez oublié votre mot de passe) mais que le service fonctionne, comme MacOS X est une variante posix, vous pouvez toujours vérifier ps pour voir s'il est passé en argument:

Sur une boîte Linux avec deux instances postgres en cours d'exécution:

-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

Les versions modernes du client de bureau PostgreSQL pour OSX ont une boîte de dialogue "Paramètres du serveur" qui vous permettra non seulement de lister le répertoire de données mais de l'ouvrir directement.

Très utile si vous rencontrez un crash machine aléatoire qui laisse un fichier de verrouillage.

enter image description here

4

Ouvrez postgresql.conf, allez sur la ligne:

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

est votre réponse.

4
Ronaldinho

Généraliser à partir des 2 premières réponses:

Pour afficher le répertoire de données directement sur la ligne de commande:

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

Pour voir également tous les autres chemins d'accès définis aux fichiers et répertoires:

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

Exemple de sortie:

          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)

(Sous Windows, remplacez LIKE '/%' avec LIKE '%/%' car le chemin commence par une lettre de lecteur)

1
mivk

Sur Windows Server 2012, la commande pg_config n'a pas révélé le répertoire de données pour une raison folle. Mais je l'ai trouvé en regardant le fichier C:\Program Files\PostgreSQL\9.4\pg_env.bat, qui contenait cette ligne:

@SET PGDATA=E:\POSTGRESQL

C'était la réponse dont j'avais besoin.

1
user3618269

Sous OS X 10.8 et 10.9 (pas 10.10) avec l'application serveur installée, dans une fenêtre de terminal, tapez

Sudo serveradmin settings postgres

Sur OS X 10.9 Mavericks, c'est la sortie que j'obtiens, qui inclut le répertoire de données.

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"

Je viens d'essayer ceci dans Yosemite (OS X 10.10) et postgres n'est plus répertorié comme service sous serveradmin (bien que postgres soit installé).

Sudo serveradmin list

ne répertorie pas les postgres

1
Jason S

Que diriez-vous d'utiliser l'utilitaire standard pg_config tel que pg_config --bindir On pourrait également obtenir les paramètres de configuration utilisés pour compiler PostgreSQL et les analyser avec pg_config --configure

0
Jacques

Sur Fedora et probablement plusieurs autres distributions Linux, vous pouvez passer à l'utilisateur postgres et lire la variable d'environnement PGDATA. Par exemple.:

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

Sur la base de la réponse de @Matthew Mark Miller, sur macOS 10.14 utilisant Postgres 11, il se trouve à:

~/Library/Application Support/Postgres
0
Navid

Comme indiqué, on pourrait également utiliser ps pour capturer l'emplacement des données tel que:

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

Cela fonctionnerait la plupart du temps. Cela retournerait quelque chose comme /usr/local/pgsql/data ou partout où cela a été spécifié dans les paramètres de PostgreSQL lors du lancement.

0
Jacques