Ubicación predeterminada de la base de datos PostgreSQL en Linux

Respuestas:

134

El " directorio donde postgresql mantendrá todas las bases de datos " (y la configuración) se llama "directorio de datos" y corresponde a lo que PostgreSQL llama (un poco confuso) un " clúster de base de datos ", que no está relacionado con la computación distribuida, solo significa un grupo de bases de datos y objetos relacionados gestionados por un servidor PostgreSQL.

La ubicación del directorio de datos depende de la distribución. Si instala desde la fuente, el valor predeterminado es /usr/local/pgsql/data:

En términos de sistema de archivos, un clúster de base de datos será un único directorio en el que se almacenarán todos los datos. A esto lo llamamos directorio de datos o área de datos. Depende completamente de usted dónde elija almacenar sus datos. No hay un valor predeterminado, aunque las ubicaciones como / usr / local / pgsql / data o / var / lib / pgsql / data son populares. ( ref )

Además, una instancia de un servidor PostgreSQL en ejecución está asociada a un clúster; la ubicación de su directorio de datos se puede pasar al demonio del servidor (" postmaster " o " postgres ") en la -Dopción de línea de comando, o por la PGDATAvariable de entorno (generalmente en el alcance del usuario que ejecuta, típicamente postgres). Por lo general, puede ver el servidor en ejecución con algo como esto:

[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

Tenga en cuenta que es posible, aunque no muy frecuente, ejecutar dos instancias del mismo servidor PostgreSQL (mismos binarios, procesos diferentes) que sirven a diferentes "clústeres" (directorios de datos). Por supuesto, cada instancia escucharía en su propio puerto TCP / IP.

Leonbloy
fuente
Puedo ver el directorio de datos actual, pero veo muchas otras carpetas y archivos. ¿Psql "guarda" la base de datos en muchos archivos o solo hay uno dentro de este directorio de datos que es la base de datos? porque estaba pensando en algo como el archivo DB en mysql o sql server, por ejemplo ...
CamiloVA
70
/var/lib/postgresql/[version]/data/

Al menos en Gentoo Linux y Ubuntu 14.04 por defecto.

Puede buscar postgresql.confy mirar param data_directory. Si se comenta, el directorio de la base de datos es el mismo que este directorio de archivos de configuración.

silencio
fuente
21
Dependerá de la distribución, todos lo hacen de forma ligeramente diferente. Si puede conectarse al sistema, usar "SHOW data_directory" es probablemente la forma más fácil.
Magnus Hagander
@MagnusHagander es una respuesta, y no haces de este comentario una respuesta. Funciono bien para mi.
Vishal
en Gnome veo lo mismo aquí/var/lib/8.1/postgresql
Junior Mayhé
Para mí es '/var/lib/postgresql/9.3/main'
radtek
9
para Centos 7, ruta de postgres 9.3/var/lib/pgsql/9.3
rana_stack
15

Por defecto en Debian 8.1 y PostgreSQL 9.4 después de la instalación con el administrador de paquetes 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

tan aparentemente /var/lib/postgresql/9.4/main.

Léo Léopold Hertz 준영
fuente
11

En Centos 6.5 / PostgreSQL 9.3:

Cambie el valor de "PGDATA=/var/lib/pgsql/data"a la ubicación que desee en el archivo de secuencia de comandos inicial /etc/init.d/postgresql.

Recuerde que debe chmod 700 y chown postgres:postgresa la nueva ubicación y usted es el jefe.

Dum
fuente
2

El comando pg_lsclusters(al menos en Linux / Ubuntu) se puede usar para listar los clústeres existentes y con él también el directorio de datos:

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_
fuente
1

Creo que el mejor método es consultar la pg_settingvista:

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

Salida:

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

La siguiente consulta ayudará a encontrar el archivo de configuración de 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
fuente