¿Dónde almacena PostgreSQL la base de datos?

Respuestas:

355

Para ver dónde está el directorio de datos, use esta consulta.

show data_directory;

Para ver todos los parámetros de tiempo de ejecución, use

show all;

Puede crear espacios de tablas para almacenar objetos de base de datos en otras partes del sistema de archivos. Para ver espacios de tablas, que podrían no estar en ese directorio de datos, use esta consulta.

SELECT * FROM pg_tablespace;
Mike Sherrill 'Retiro del gato'
fuente
1
muestre directorio_datos; El comando apunta a la ubicación exacta de los datos. Buscar una carpeta específica es doloroso ya que alguien más podría haberlo instalado para usted y ahora no conoce la configuración, por lo que seguir SQL ayuda a ahorrar tiempo. :) Gracias Mike.
Vishal
3
Dice "debe ser superusuario para examinar el directorio de datos" :(
temporary_user_name
55
Si no eres un DBA, no necesitas saberlo de todos modos.
Mike Sherrill 'Cat Recall'
8
Por cierto, si alguien está buscando la ubicación de la base de datos para Postgres.app en una Mac como yo, está en ~ / Library / Application Support / Postgres [ver] / var por defecto.
sstringer
1
Para ejecutar una consulta, use PGAdmin III y use el icono "ejecutar una consulta" en la barra de menú.
Rutger Hofste
61

En Windows7, todas las bases de datos están referidas por un número en el archivo nombrado pg_databasedebajo C:\Program Files (x86)\PostgreSQL\8.2\data\global. Luego debe buscar el nombre de la carpeta por ese número debajo C:\Program Files (x86)\PostgreSQL\8.2\data\base. Ese es el contenido de la base de datos.

senthilkumari
fuente
3
No responda de manera específica del sistema operativo a menos que la pregunta indique explícitamente el sistema operativo.
simonmenke
24
Por qué no? Si no menciona el sistema operativo y simplemente dice "esto funciona", cualquiera que lo intente en un sistema operativo diferente se confundirá. Es relevante. EDITAR: Oh, probablemente quiere decir "no dar una respuesta específica del sistema operativo en absoluto". Supongo que tiene sentido, no lo sé.
David Winiecki
34
@David, la pregunta se cerró presumiblemente porque no especificaba qué sistema operativo. (Si hubiera especificado un sistema operativo, se habría cerrado por ser demasiado específico). Su respuesta fue útil e informativa: simplemente ignore a los opositores y votantes negativos hasta que finalmente puedan destruir SO. Los que odian odiarán, y todo eso.
SamGoody
@SamGoody habría un poco de sentido a lo que estabas diciendo, si esta respuesta fuera realmente correcta. (No es estrictamente incorrecto, ya que la carpeta puede estar allí en Windows, pero ciertamente no es un hecho). Si es así o no, se puede averiguar fácilmente siguiendo la respuesta ya dada.
Jon Hanna
@senthilkumari Tengo postgresql 11 y windows 10. Como mencionaste, intenté ver la pg_database dentro de la carpeta global pero no pude ver ninguna. Pude ver un montón de _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init. Para Windows 10, qué archivo debe buscar. ¿Es diferente?
Nachiket
29

Abra pgAdmin y vaya a Propiedades para una base de datos específica. Encuentra OID y luego abre el directorio

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Debería haber sus archivos DB.

Almir Sarajčić
fuente
14
SELECT oid from pg_database where datname = '<dbname>'
Charlie
27

Bajo mi instalación de Linux, está aquí: /var/lib/postgresql/8.x/

Puedes cambiarlo con initdb -D "c:/mydb/"

Sadegh
fuente
12
Depende de la distribución: para Fedora 20 está debajo /var/lib/pgsql/data. Es mejor averiguarlo usando ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou
17

La ubicación de tablas / índices específicos se puede ajustar mediante TABLESPACEs:

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;
ymv
fuente
15

Todos ya respondieron pero solo las últimas actualizaciones. Si desea saber dónde residen todos los archivos de configuración, ejecute este comando en el shell

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
Saad Saadi
fuente
14

Apuesto a que estás haciendo esta pregunta porque intentaste pg_ctl starty recibiste el siguiente error:

pg_ctl: no se especificó el directorio de la base de datos y la variable de entorno PGDATA no se configuró

En otras palabras, está buscando el directorio para poner después -Den su pg_ctl startcomando.

En este caso, el directorio que busca contiene estos archivos.

PG_VERSION      pg_dynshmem     pg_multixact
pg_snapshots    pg_tblspc       postgresql.conf
base            pg_hba.conf     pg_notify   
pg_stat         pg_twophase     postmaster.opts
global          pg_ident.conf   pg_replslot
pg_stat_tmp     pg_xlog         postmaster.pid
pg_clog         pg_logical      pg_serial
pg_subtrans     postgresql.auto.conf    server.log

Puede localizarlo localizando cualquiera de los archivos y directorios anteriores utilizando la búsqueda provista con su sistema operativo.

Por ejemplo, en mi caso (una instalación de HomeBrew en Mac OS X ), estos archivos se encuentran en /usr/local/var/postgres. Para iniciar el servidor escribo:

pg_ctl -D /usr/local/var/postgres -w start

... y funciona.

xagg
fuente
1
Si usa homebrew, una forma más fácil de localizar estos datos es simplementebrew info postgres
Ben
Tiene razón sobre la razón por la que estoy buscando la carpeta de la base de datos. Pero la cuestión es que no puedo encontrar ninguno de los archivos anteriores conlocate <filename>
aswin prabhakar
Los encontré ... Tuve que usarsudo locate <filename>
aswin prabhakar
14

Postgres almacena datos en archivos en su directorio de datos. Siga los pasos a continuación para ir a una base de datos y sus archivos:

La base de datos correspondiente a un archivo de tabla postgresql es un directorio. La ubicación de todo el directorio de datos se puede obtener mediante la ejecución SHOW data_directory. en un sistema operativo tipo UNIX (por ejemplo: Mac) /Library/PostgreSQL/9.4/data Vaya dentro de la carpeta base en el directorio de datos que tiene todas las carpetas de la base de datos:/Library/PostgreSQL/9.4/data/base

Encuentre el nombre de la carpeta de la base de datos ejecutando (Da un número entero. Este es el nombre de la carpeta de la base de datos):

SELECT oid from pg_database WHERE datname = <database_name>;

Encuentre el nombre del archivo de la tabla ejecutando (Da un número entero. Este es el nombre del archivo):

SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

Este es un archivo binario. Los detalles del archivo, como el tamaño y la fecha y hora de creación, se pueden obtener como de costumbre. Para más información lea este hilo SO

picmate 涅
fuente
11

En Mac: /Library/PostgreSQL/9.0/data/base

El directorio no se puede ingresar, pero puede ver el contenido a través de: sudo du -hc data

evgeni
fuente
13
Si lo instaló a través de homebrew (¿y por qué no lo haría?), Sería en el /usr/local/var/postgresque podría descubrir usando el show data_directory;consejo de @ MikeSherrill
Chris Beck
/Library/PostgreSQL/9.0/data/baseparece una ubicación más similar a Mac que /usr/local/var/postgres. No puede buscar este último en Finder sin habilitar las funciones ocultas del Finder.
Charlie
@ Charlie Puedes navegar usando Finder desde el menú Ir. Ir> Ir a la carpeta ..., o ⇧⌘G
Jason S
@JasonS Sí, podría usar ese truco para abrir la carpeta no similar a Mac en Finder.
Charlie
1
En mi caso está en: / Users / bob / Library / Application Support / Postgres / var-9.5
Bwyss
7

En Windows, el directorio PGDATA que describen los documentos de PostgresSQL está en algún lugar como C:\Program Files\PostgreSQL\8.1\data. Los datos para una base de datos en particular están debajo (por ejemplo) C:\Program Files\PostgreSQL\8.1\data\base\100929, donde supongo que 100929 es el número de la base de datos.

Ben Hoyt
fuente
1
Tenga cuidado: si desea hacer una copia de seguridad a nivel del sistema de archivos, no solo haga una copia de seguridad de estos directorios, porque, como lo describen los documentos : "... podría verse tentado a intentar hacer una copia de seguridad o restaurar solo ciertas tablas o bases de datos individuales de sus respectivos archivos o directorios. Esto no funcionará porque la información contenida en estos archivos no se puede utilizar sin los archivos de registro de confirmación, pg_clog / *, que contienen el estado de confirmación de todas las transacciones ".
Janis Veinbergs
Esto depende Podría haberlo configurado en una carpeta diferente en la instalación.
ANeves
en la mía, no hay una carpeta de datos dentro de C: \ Archivos de programa \ PostgreSQL \ 9.4 \ ¿esto es algo específico de 9.4 o ha hecho algo mal?
LucyViolet
2

La respuesta de picmate es correcta. en Windows, la ubicación de la carpeta DB principal es (al menos en mi instalación)

C:\PostgreSQL\9.2\data\base\

y no en archivos de programa.

Sus 2 scripts le darán el directorio / archivo exacto que necesita:

SELECT oid from pg_database WHERE datname = <database_name>;
SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

el mío está en datname 16393 y relfilenode 41603

archivos de base de datos en postgresql

k3nn
fuente
0

Estoy ejecutando postgres (9.5) en un contenedor acoplable (en CentOS, como sucede), y como Skippy le Grand Gourou menciona en un comentario anterior, los archivos se encuentran en /var/lib/postgresql/data/.

$ docker exec -it my-postgres-db-container bash
root@c7d61efe2a5d:/# cd /var/lib/postgresql/data/
root@c7d61efe2a5d:/var/lib/postgresql/data# ls -lh
total 56K
drwx------. 7 postgres postgres   71 Apr  5  2018 base
drwx------. 2 postgres postgres 4.0K Nov  2 02:42 global
drwx------. 2 postgres postgres   18 Dec 27  2017 pg_clog
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_commit_ts
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_dynshmem
-rw-------. 1 postgres postgres 4.4K Dec 27  2017 pg_hba.conf
-rw-------. 1 postgres postgres 1.6K Dec 27  2017 pg_ident.conf
drwx------. 4 postgres postgres   39 Dec 27  2017 pg_logical
drwx------. 4 postgres postgres   36 Dec 27  2017 pg_multixact
drwx------. 2 postgres postgres   18 Nov  2 02:42 pg_notify
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_replslot
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_serial
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_snapshots
drwx------. 2 postgres postgres    6 Sep 16 21:15 pg_stat
drwx------. 2 postgres postgres   63 Nov  8 02:41 pg_stat_tmp
drwx------. 2 postgres postgres   18 Oct 24  2018 pg_subtrans
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_tblspc
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_twophase
-rw-------. 1 postgres postgres    4 Dec 27  2017 PG_VERSION
drwx------. 3 postgres postgres   92 Dec 20  2018 pg_xlog
-rw-------. 1 postgres postgres   88 Dec 27  2017 postgresql.auto.conf
-rw-------. 1 postgres postgres  21K Dec 27  2017 postgresql.conf
-rw-------. 1 postgres postgres   37 Nov  2 02:42 postmaster.opts
-rw-------. 1 postgres postgres   85 Nov  2 02:42 postmaster.pid
rotarydial
fuente