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

124

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 de l'emplacement du répertoire de données. La postgrescommande 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
type au hasard
la source
Lorsque vous utilisez Homebrew pour installer Postgres, puis dataest/usr/local/var/postgres
andrerpena

Réponses:

154

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

SHOW data_directory;

est le plus court chemin.

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

Peter Eisentraut
la source
7
s'il n'est pas en cours d'exécution, essayez de lancer une recherche pour postgresql.conf, qui se trouve généralement dans le répertoire de données, ou qui contiendra des informations sur le répertoire de données.
Xzilla
35

Vous pouvez également l'interroger

select setting from pg_settings where name = 'data_directory';
Dr Colossos
la source
18

pg_config montre 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 à la bière, cependant; sans breuvage je ne sais pas ce que ça montre.

Dave Newton
la source
1
J'utilise aussi de la bière. Pour l'instant, le datadir répertorié dans pg_config --configuren'est pas le même que celui brew info postgresqlrecommandé (qui est $(brew --prefix)/var/postgreset n'est pas un lien symbolique vers celui répertorié). Il semble que la formule soit un peu laxiste pour utiliser correctement les drapeaux de configuration.
Vaz
Note pour Ubuntu / Debain: pg_config n'est pas installé avec le postgresql-<ver>paquet apt, mais requiert égalementpostgresql-server-dev-<ver>
pscl
@PSCL C'est vrai, mais OP était sous OS X.
Dave Newton
Compris. Juste une note pour la future référence des utilisateurs de Debian (comme moi-même) tombant sur cette question en se basant sur son titre générique.
pscl
1
@Tom Je ne pense pas que la formule vise vraiment à utiliser le datadir transmis pour la configuration ... elle s'attend à recevoir le datadir en tant qu'argument en ligne de commande, vous pouvez voir ce qui est transmis lorsqu'il est exécuté automatiquement en tant que service dans $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist, regardez pour le chemin qui suit le -D(c'est /usr/local/var/postgressur le mien).
Vaz
16

Sur Ubuntu \ Debian, essayez la pg_lsclusterscommande.

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
Adam Matan
la source
8

Si vous ne pouvez pas vous connecter (par exemple, vous avez oublié votre mot de passe) mais que le service est en cours d'exécution, car MacOS X est une variante, vous pouvez toujours vérifier pss'il est transmis en tant qu'argument:

Sur une machine Linux avec deux instances de 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
Joe
la source
2

Ouvrez postgresql.conf, allez à la ligne:

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

est votre réponse.

Ronaldinho
la source
où trouvez-vouspostgresql.conf
user5359531
@ user5359531 Vous pouvez faire find / -iname "postgresql.conf" 2>/dev/nullpour savoir
Tom
Mon postgresql.confn'a pas data_directorydéfini. C'est seulement mentionné dans un commentaire:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ
2

Les versions modernes du client de bureau PostgreSQL pour OSX ont une boîte de dialogue pratique "Paramètres du serveur" qui vous permet non seulement de répertorier 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.

entrez la description de l'image ici

Matthew Mark Miller
la source
Où est ce dialogue? Je ne trouve rien de tel sur une installation directe (non brassée) de 9.5 via postgresql.org/download/macosx . Cela vient avec pgadmin III, mais cela ne semble pas avoir ce dialogue. Je ne trouve aucun client de bureau?
John Little
1

Sous OS X 10.8 et 10.9 (et non 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, voici le résultat obtenu, qui comprend 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 cela dans Yosemite (OS X 10.10) et postgres n’est plus répertorié en tant que service sous serveradmin (bien que postgres soit installé).

sudo serveradmin list

ne liste pas postgres

Jason S
la source
1

Sur Windows Server 2012, la commande pg_confign'a pas révélé le répertoire de données pour une raison quelconque. 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.

utilisateur3618269
la source
0

Pourquoi ne pas utiliser l’utilitaire standard pg_config tel que pg_config --bindirOn pourrait également obtenir les paramètres de configuration utilisés pour compiler PostgreSQL et les analyser avecpg_config --configure

Jacques
la source
--bindiraffiche l'emplacement des exécutables, pas le répertoire de données. --configureest OK, même s’il faut un peu analyser la sortie.
dezso
Oui, c'est vrai et malheureusement, pg_config n'a pas de paramètre permettant de révéler le datadir. Quand j'ai écrit ceci, j'ai pensé qu'au moins cela donne quelque chose de proche, en supposant que le datadir ne se trouve pas dans un endroit spécial. datadir serait alors relatif au bindir tel que ../data
Jacques
0

Comme indiqué, on pourrait également utiliser pspour 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. Il renverrait quelque chose comme /usr/local/pgsql/dataou à tout autre endroit spécifié dans les paramètres de PostgreSQL au lancement.

Jacques
la source
0

D'après la réponse de @Matthew Mark Miller, sous macOS 10.14 sous Postgres 11, il se trouve à l'adresse suivante:

~/Library/Application Support/Postgres
Navid
la source
0

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éfinis vers les fichiers et les 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 '/%'par LIKE '%/%'car le chemin commence par une lettre de lecteur)

mivk
la source