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
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.
Vous pouvez également l'interroger
select setting from pg_settings where name = 'data_directory';
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.
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
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
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.
Ouvrez postgresql.conf, allez sur la ligne:
data_directory='/var/lib/postgresql/main/'
est votre réponse.
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)
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.
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
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
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
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
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.