web-dev-qa-db-fra.com

Emplacement par défaut de la base de données PostgreSQL sous Linux

Quel est le répertoire par défaut où PostgreSQL gardera toutes les bases de données sur Linux?

95
gruszczy

Le répertoire "où postgresql conservera toutes les bases de données" (et sa configuration) est appelé "répertoire de données" et correspond à ce que PostgreSQL appelle (de façon quelque peu confuse) un " groupe de bases de données ", En rapport avec l'informatique distribuée, cela signifie simplement un groupe de bases de données et d'objets associés gérés par un serveur PostgreSQL. 

L'emplacement du répertoire de données dépend de la distribution. Si vous installez à partir des sources, la valeur par défaut est /usr/local/pgsql/data:

En termes de système de fichiers, une base de données le cluster sera un répertoire unique sous lequel toutes les données seront stockées . Nous appelons cela le répertoire de données ou zone de données. C'est entièrement à vous où vous choisissez de stocker vos données . Il n'y a pas de valeur par défaut, bien que endroits tels que /usr/local/pgsql/data ou /var/lib/pgsql/data sont populaires . ( ref )

En outre, une instance d'un serveur PostgreSQL en cours d'exécution est associée à un cluster. l'emplacement de son répertoire de données peut être transmis au démon du serveur (" postmaster " ou " postgres ") dans l'option de ligne de commande -D ou par la variable d'environnement PGDATA (généralement dans l'étendue de l'utilisateur en cours d'exécution, généralement postgres). Vous pouvez généralement voir le serveur en cours d'exécution avec quelque chose comme ceci:

[root@server1 ~]# ps auxw |  grep postgres | grep -- -D
postgres  1535  0.0  0.1  39768  1584 ?        S    May17   0:23 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

Notez qu'il est possible, bien que peu fréquent, d'exécuter deux instances du même serveur PostgreSQL (mêmes binaires, processus différents) qui desservent différents "clusters" (répertoires de données). Bien entendu, chaque instance écoutera sur son propre port TCP/IP.

116
leonbloy
/var/lib/postgresql/[version]/data/

Au moins dans Gentoo Linux et Ubuntu 14.04 par défaut.

Vous pouvez trouver postgresql.conf et consulter param data_directory. S'il est commenté, le répertoire de la base de données est identique à celui du fichier de configuration.

52
silent

Par défaut dans Debian 8.1 et PostgreSQL 9.4 après l’installation avec le gestionnaire de paquets apt-get

ps auxw |  grep postgres | grep -- -D
postgres 17340  0.0  0.5 226700 21756 ?        S    09:50   0:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf

donc apparemment /var/lib/postgresql/9.4/main

Connectez-vous à une base de données et exécutez la commande:

SHOW data_directory;

Plus d'information:

http://www.postgresql.org/docs/current/sql-show.htmlhttps://www.postgresql.org/docs/current/runtime-config-file-locations html

13
Roby Sottini

Sur Centos 6.5/PostgreSQL 9.3:

Modifiez la valeur de "PGDATA=/var/lib/pgsql/data" à l'emplacement de votre choix dans le fichier de script initial /etc/init.d/postgresql.

N'oubliez pas de chmod 700 et chown postgres:postgres au nouvel emplacement et vous êtes le patron. 

9
Dum

La commande pg_lsclusters (au moins sous Linux/Ubuntu) peut être utilisée pour lister les clusters existants et avec elle le répertoire de données:

Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5433 down   postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
10  main    5432 down   postgres /var/lib/postgresql/10/main  /var/log/postgresql/postgresql-10-main.log
0
k_o_

Je pense que la meilleure méthode consiste à interroger la vue pg_setting:

 select s.name, s.setting, s.short_desc from pg_settings s where s.name='data_directory';

Sortie:

      name      |        setting         |            short_desc
----------------+------------------------+-----------------------------------
 data_directory | /var/lib/pgsql/10/data | Sets the server's data directory.
(1 row)
0
Null