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

Réponses:

134

Le " répertoire où postgresql conservera toutes les bases de données " (et la configuration) est appelé "répertoire de données" et correspond à ce que PostgreSQL appelle (un peu déroutant) un " cluster de bases de données ", qui n'est pas lié à l'informatique distribuée, cela signifie simplement un groupe des bases de données et des 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 de la source, la valeur par défaut est /usr/local/pgsql/data:

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

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 passé au démon du serveur (" postmaster " ou " postgres ") dans l' -Doption de ligne de commande, ou par la PGDATAvariable d'environnement (généralement dans la portée 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 sûr, chaque instance écouterait sur son propre port TCP / IP.

Leonbloy
la source
Je peux voir le répertoire de données actuel, mais je vois de nombreux autres dossiers et fichiers. Est-ce que psql "enregistre" la base de données dans de nombreux fichiers ou y en a-t-il un dans ce répertoire de données qu'est la base de données? parce que je pensais à quelque chose comme le fichier DB sur un serveur mysql ou sql par exemple ...
CamiloVA
70
/var/lib/postgresql/[version]/data/

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

Vous pouvez trouver postgresql.confet regarder param data_directory. S'il est commenté, le répertoire de la base de données est le même que celui du fichier de configuration.

silencieux
la source
21
Ce sera en fonction de la distribution, ils le font tous un peu différemment. Si vous pouvez vous connecter au système, utiliser "SHOW data_directory" est probablement le moyen le plus simple.
Magnus Hagander
@MagnusHagander c'est une réponse, vous ne faites pas de ce commentaire une réponse. Ça a bien marché pour moi.
Vishal le
dans Gnome je vois la même chose ici/var/lib/8.1/postgresql
Junior Mayhé
Pour moi c'est '/var/lib/postgresql/9.3/main'
radtek
9
pour Centos 7, chemin postgres 9.3/var/lib/pgsql/9.3
rana_stack
15

Valeur 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.

Léo Léopold Hertz 준영
la source
11

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.

Rappelez-vous chmod 700 et chown postgres:postgresvers le nouvel emplacement et vous êtes le patron.

Dum
la source
2

La commande pg_lsclusters(au moins sous Linux / Ubuntu) peut être utilisée pour lister les clusters existants et avec elle aussi 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
k_o_
la source
1

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

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

Production:

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

La requête ci-dessous vous aidera à trouver le fichier de configuration postgres.

postgres=# SHOW config_file;
             config_file
-------------------------------------
 /var/lib/pgsql/data/postgresql.conf
(1 row)

[root@node1 usr]# cd /var/lib/pgsql/data/
[root@node1 data]# ls -lrth
total 48K
-rw------- 1 postgres postgres    4 Nov 25 13:58 PG_VERSION
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_twophase
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_tblspc
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_snapshots
drwx------ 2 postgres postgres    6 Nov 25 13:58 pg_serial
drwx------ 4 postgres postgres   36 Nov 25 13:58 pg_multixact
-rw------- 1 postgres postgres  20K Nov 25 13:58 postgresql.conf
-rw------- 1 postgres postgres 1.6K Nov 25 13:58 pg_ident.conf
-rw------- 1 postgres postgres 4.2K Nov 25 13:58 pg_hba.conf
drwx------ 3 postgres postgres   60 Nov 25 13:58 pg_xlog
drwx------ 2 postgres postgres   18 Nov 25 13:58 pg_subtrans
drwx------ 2 postgres postgres   18 Nov 25 13:58 pg_clog
drwx------ 5 postgres postgres   41 Nov 25 13:58 base
-rw------- 1 postgres postgres   92 Nov 25 14:00 postmaster.pid
drwx------ 2 postgres postgres   18 Nov 25 14:00 pg_notify
-rw------- 1 postgres postgres   57 Nov 25 14:00 postmaster.opts
drwx------ 2 postgres postgres   32 Nov 25 14:00 pg_log
drwx------ 2 postgres postgres 4.0K Nov 25 14:00 global
drwx------ 2 postgres postgres   25 Nov 25 14:20 pg_stat_tmp
Srikant Patra
la source