Onde o PostgreSQL armazena o banco de dados?


Respostas:


355

Para ver onde está o diretório de dados, use esta consulta.

show data_directory;

Para ver todos os parâmetros de tempo de execução, use

show all;

Você pode criar espaços de tabela para armazenar objetos de banco de dados em outras partes do sistema de arquivos. Para ver os espaços de tabela, que podem não estar nesse diretório de dados, use esta consulta.

SELECT * FROM pg_tablespace;

11
mostre o diretório de dados; O comando aponta para a localização exata dos dados. Pesquisando pastas específicas é doloroso, pois outra pessoa pode ter instalado para você e agora você não conhece a configuração. Portanto, seguir o sql ajuda a economizar tempo. :) Obrigado Mike.
Vishal

3
Ele diz que "deve ser super examinar diretório de dados" :(
temporary_user_name

5
Se você não é um DBA, realmente não precisa saber.
Mike Sherrill 'Recall Cat'

8
BTW - se alguém está procurando o local do banco de dados para Postgres.app em um mac como eu, está em ~ / Library / Application Support / Postgres [ver] / var por padrão.
sstringer

11
Para executar uma consulta, use o PGAdmin III e use o ícone "executar uma consulta" na barra de menus.
Rutger Hofste

61

No Windows7, todos os bancos de dados são referidos por um número no arquivo nomeado pg_databaseem C:\Program Files (x86)\PostgreSQL\8.2\data\global. Em seguida, você deve procurar o nome da pasta com esse número em C:\Program Files (x86)\PostgreSQL\8.2\data\base. Esse é o conteúdo do banco de dados.


3
Não responda de uma maneira específica do SO, a menos que a pergunta indique explicitamente o SO.
simonmenke

24
Por que não? Se você não mencionar o sistema operacional e apenas disser "isso funciona", qualquer pessoa que tentar isso em um sistema operacional diferente ficará confusa. É relevante. EDIT: Ah, você provavelmente quer dizer "não dê uma resposta específica ao SO". Eu acho que faz sentido, eu não sei.
David Winiecki

34
@ David, a questão foi encerrada presumivelmente porque não especificou qual sistema operacional. (Se ele tivesse especificado um sistema operacional, ele teria sido fechado por ser muito específico.) Sua resposta foi útil e informativa - apenas ignore os pessimistas e os que rejeitam até que eles consigam finalmente destruir o SO. Aborrecedores odeiam, e tudo isso.
58513 SamGoody

@ SamGoody, haveria um certo ponto no que você estava dizendo, se essa resposta estivesse realmente correta. (Não é estritamente incorreto, pois a pasta pode estar lá no Windows, mas certamente não é um dado). Seja esse o caso ou não, pode ser facilmente descoberto seguindo a resposta já dada.
9137 Jon Hanna

@senthilkumari Tenho o postgresql 11 e o windows 10. Como você mencionou, tentei ver o pg_database na pasta global, mas não consegui ver nenhum. Eu podia ver um monte de _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init. Para o Windows 10, qual arquivo nomeado devo procurar. É diferente?
Nachiket

29

Abra o pgAdmin e vá para Propriedades para um banco de dados específico. Encontre o OID e abra o diretório

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Deve haver seus arquivos de banco de dados.


14
SELECT oid from pg_database where datname = '<dbname>'
Charlie


27

Sob minha instalação do Linux, está aqui: /var/lib/postgresql/8.x/

Você pode mudar com initdb -D "c:/mydb/"


12
Depende da distribuição - para o Fedora 20 está abaixo /var/lib/pgsql/data. Melhor descobrir usando ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou

17

A localização de tabelas / índices específicos pode ser ajustada por TABLESPACEs:

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

15

Todo mundo já respondeu, mas apenas para as atualizações mais recentes. Se você quiser saber onde todos os arquivos de configuração residem, execute este comando no shell

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';

14

Aposto que você está fazendo esta pergunta porque tentou pg_ctl starte recebeu o seguinte erro:

pg_ctl: nenhum diretório de banco de dados especificado e variável de ambiente PGDATA desativada

Em outras palavras, você está procurando o diretório para colocar -Dem seu pg_ctl startcomando.

Nesse caso, o diretório que você está procurando contém esses arquivos.

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

Você pode localizá-lo localizando qualquer um dos arquivos e diretórios acima, usando a pesquisa fornecida com o seu sistema operacional.

Por exemplo, no meu caso (uma instalação HomeBrew no Mac OS X ), esses arquivos estão localizados em /usr/local/var/postgres. Para iniciar o servidor, digite:

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

... e funciona.


11
Se você usar homebrew, uma maneira mais fácil de localizar esses dados é simplesmentebrew info postgres
Ben

Você está certo sobre o motivo pelo qual estou procurando a pasta do banco de dados. Mas o problema é que não consigo encontrar nenhum dos arquivos acima comlocate <filename>
aswin prabhakar

Encontrei-os ... Tinha que usarsudo locate <filename>
aswin prabhakar

14

O Postgres armazena dados em arquivos em seu diretório de dados. Siga as etapas abaixo para acessar um banco de dados e seus arquivos:

O banco de dados correspondente a um arquivo de tabela postgresql é um diretório. A localização de todo o diretório de dados pode ser obtida executando SHOW data_directory. em um sistema operacional UNIX como (por exemplo: Mac) /Library/PostgreSQL/9.4/data Entre na pasta base no diretório de dados que possui todas as pastas do banco de dados:/Library/PostgreSQL/9.4/data/base

Localize o nome da pasta do banco de dados executando (Fornece um número inteiro. Esse é o nome da pasta do banco de dados):

SELECT oid from pg_database WHERE datname = <database_name>;

Localize o nome do arquivo da tabela executando (Fornece um número inteiro. Este é o nome do arquivo):

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

Este é um arquivo binário. Detalhes do arquivo, como tamanho e data e hora da criação, podem ser obtidos como de costume. Para obter mais informações, leia este tópico do SO


11

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

O diretório não pode ser inserido, mas você pode ver o conteúdo via: sudo du -hc data


13
Se você instalou via homebrew (? E por que você não), seria na /usr/local/var/postgresqual você pode descobrir usando @ de MikeSherrill show data_directory;ponta
Chris Beck

/Library/PostgreSQL/9.0/data/baseparece um local mais parecido com um Mac do que /usr/local/var/postgres. Você não pode procurar o último no Finder sem ativar os recursos ocultos do Finder.
Charlie

@Charlie Você pode navegar usando o Finder no menu Ir. Ir> Ir para Pasta ..., ou ⇧⌘G
Jason S

@JasonS Sim, você pode usar esse truque para abrir a pasta não-mac-like no Finder.
309 Charlie

11
No meu caso, está em: / Usuários / bob / Biblioteca / Suporte a aplicativos / Postgres / var-9.5
Bwyss

7

No Windows, o diretório PGDATA que os documentos do PostgresSQL descrevem está em algum lugar como C:\Program Files\PostgreSQL\8.1\data. Os dados para um banco de dados específico estão em (por exemplo) C:\Program Files\PostgreSQL\8.1\data\base\100929, onde acho que 100929 é o número do banco de dados.


11
Cuidado: se você deseja fazer um backup no nível do sistema de arquivos, não faça o backup desses diretórios, porque, como os documentos descrevem: "... você pode tentar fazer o backup ou restaurar apenas determinadas tabelas ou bancos de dados de seus respectivos arquivos ou diretórios. Isso não funcionará porque as informações contidas nesses arquivos não são utilizáveis ​​sem os arquivos de log de confirmação, pg_clog / *, que contêm o status de confirmação de todas as transações. "
Janis Veinbergs

Isso depende Você pode ter configurado para uma pasta diferente na instalação.
ANRS

no meu, não há pasta de dados dentro de C: \ Arquivos de Programas \ PostgreSQL \ 9.4 \ isso é algo específico para 9.4 ou fez algo errado?
precisa saber é o seguinte

2

A resposta do picmate está certa. no windows, o local principal da pasta DB é (pelo menos na minha instalação)

C:\PostgreSQL\9.2\data\base\

e não em arquivos de programa.

seus 2 scripts, fornecerão o diretório / arquivo exato que você precisa:

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

o meu está no nome de dados 16393 e no relfilenode 41603

arquivos de banco de dados no postgresql


0

Estou executando o postgres (9.5) em um contêiner de encaixe (no CentOS, por acaso) e, como Skippy le Grand Gourou menciona em um comentário acima, os arquivos estão localizados em /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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.