¿Cómo encuentro el directorio de datos de PostgreSQL?

124

Olvidé cómo comencé PostgreSQL la última vez (fue hace meses) y no recuerdo dónde se encuentra el directorio de datos. El postgrescomando parece requerir la ubicación del directorio de datos.

Estoy en MacOsX si eso ayuda.

/usr/local/postgres no existe en mi Mac.

Usando las respuestas proporcionadas a continuación, descubrí que estaba aquí:

/usr/local/var/postgres
chico al azar
fuente
Cuando se utiliza para instalar Homebrew Postgres, entonces dataes/usr/local/var/postgres
andrerpena

Respuestas:

154

Si puede conectarse a la base de datos con acceso de superusuario, entonces

SHOW data_directory;

Es el camino más corto.

Si el servidor no se está ejecutando y olvidó dónde estaba el directorio de datos, entonces realmente tiene que adivinarse. Una convención específica del sistema operativo o el historial del shell pueden proporcionar sugerencias.

Peter Eisentraut
fuente
77
si no se está ejecutando, intente ejecutar un find para postgresql.conf, que generalmente está en el directorio de datos, o tendrá información sobre el directorio de datos.
xzilla 12/12/11
35

También puedes consultarlo

select setting from pg_settings where name = 'data_directory';
DrColossos
fuente
18

pg_config muestra mucha información, incluido el directorio de datos:

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'

Sin embargo, esto podría ser algo específico para la preparación; sin cerveza no sé lo que muestra.

Dave Newton
fuente
1
Estoy usando cerveza también. A partir de ahora, el datadir que figura en la lista pg_config --configureno es el mismo que el brew info postgresqlrecomendado (que es $(brew --prefix)/var/postgresy no es un enlace simbólico al que figura en la lista). Parece que la fórmula es un poco laxa al usar los indicadores de configuración correctamente.
Vaz
Nota para Ubuntu / Debain: pg_config no está instalado con el postgresql-<ver>paquete apt, pero también requierepostgresql-server-dev-<ver>
pscl
@PSCL True, pero OP estaba bajo OS X.
Dave Newton
Entendido. Solo una nota para la referencia futura de los usuarios de Debian (como yo) que se toparon con esta pregunta en función de su título genérico.
pscl
1
@ Tom No creo que la fórmula realmente pretendiera usar el datadir pasado para configurar ... espera pasar el datadir como una línea de comando arg, puedes ver lo que se pasa cuando se ejecuta automáticamente como un servicio $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist, mira para el camino que sigue al -D(está /usr/local/var/postgresen el mío).
Vaz
16

En Ubuntu \ Debian, prueba el pg_lsclusterscomando.

En mi máquina

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
fuente
8

Si no puede iniciar sesión (por ejemplo, olvidó su contraseña) pero el servicio se está ejecutando, ya que MacOS X es una variante posix, siempre puede verificar pssi se pasa como argumento:

En un cuadro de Linux con dos instancias de postgres en ejecución:

-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
fuente
2

Abra postgresql.conf, vaya a la línea:

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

es tu respuesta

Ronaldinho
fuente
dónde encuentraspostgresql.conf
user5359531
@ user5359531 Puede hacer find / -iname "postgresql.conf" 2>/dev/nullpara averiguarlo
Tom
Mi postgresql.confno tiene data_directorydefinido. Solo se hace referencia en un comentario:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ
2

Las versiones modernas del cliente de escritorio PostgreSQL para OSX tienen un conveniente cuadro de diálogo "Configuración del servidor" que le permitirá no solo enumerar el directorio de datos, sino también abrirlo directamente.

Muy útil si experimenta un bloqueo aleatorio de la máquina que deja un archivo de bloqueo.

ingrese la descripción de la imagen aquí

Matthew Mark Miller
fuente
¿Dónde está este diálogo? No puedo encontrar algo así en una instalación directa (no en brew) de 9.5 a través de postgresql.org/download/macosx . Viene con pgadmin III, pero no parece tener este diálogo. No puedo encontrar ningún cliente de escritorio?
John Little
1

En OS X 10.8 y 10.9 (no 10.10) con la aplicación de servidor instalada, en una ventana de terminal, escriba

sudo serveradmin settings postgres

En OS X 10.9 Mavericks, este es el resultado que obtengo de eso, que incluye el directorio de datos.

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"

Acabo de probar esto en Yosemite (OS X 10.10) y postgres ya no aparece como un servicio en serveradmin (aunque postgres está instalado).

sudo serveradmin list

no enumera postgres

Jason S
fuente
1

En Windows Server 2012, el comando pg_configno reveló el directorio de datos por alguna extraña razón. Pero lo encontré mirando el archivo C:\Program Files\PostgreSQL\9.4\pg_env.bat, que contenía esta línea:

@SET PGDATA=E:\POSTGRESQL

Esa fue la respuesta que necesitaba.

usuario3618269
fuente
0

¿Qué tal el uso de la utilidad estándar pg_config como pg_config --bindirOne también podría obtener los parámetros de configuración utilizados para compilar PostgreSQL y analizarlos conpg_config --configure

Jacques
fuente
--bindirmuestra la ubicación de los ejecutables, no el directorio de datos. --configureestá bien, aunque uno tiene que analizar un poco la salida.
dezso
Sí, eso es cierto y desafortunadamente pg_config no tiene ningún parámetro que revele el datadir. Cuando escribí esto, pensé que al menos da algo cercano, suponiendo que el datadir no esté en una ubicación especial. datadir sería relativo al bindir como ../data
Jacques
0

Como se señaló, también se podría usar pspara capturar la ubicación de datos como:

ps -e |egrep postgres|egrep -E '[[:blank:]]+\-D'| perl -pe 's/^.*[[:blank:]]+-D[[:blank:]]+(\S+).*?$/$1/'.

Esto funcionaría la mayor parte del tiempo. Devolvería algo parecido /usr/local/pgsql/datao en cualquier otro lugar que se especificara en los parámetros de PostgreSQL en el lanzamiento.

Jacques
fuente
0

Según la respuesta de @Matthew Mark Miller, en macOS 10.14 con Postgres 11 se encuentra en:

~/Library/Application Support/Postgres
Navid
fuente
0

Generalizando a partir de las 2 respuestas principales:

Para mostrar el directorio de datos directamente en la línea de comandos:

psql -U postgres -tA -c "SHOW data_directory;"

Para ver también todas las demás rutas definidas a archivos y directorios:

psql -U postgres -c "SELECT name, setting FROM pg_settings WHERE setting LIKE '/%';"

Salida de muestra:

          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)

(En Windows, reemplace LIKE '/%'con LIKE '%/%'porque la ruta comienza con una letra de unidad)

mivk
fuente