Onde o PostgreSQL armazena o banco de dados?

343

Onde estão armazenados os arquivos para um banco de dados PostgreSQL?

Teifion
fonte
17
sudo -u postgres psql -c "show data_directory;"mostrará os locais de armazenamento atuais em uma instalação padrão do PostgreSQL.

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;
Mike Sherrill 'Recolha de Gatos'
fonte
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.

senthilkumari
fonte
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.

Almir Sarajčić
fonte
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/"

Sadegh
fonte
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;
ymv
fonte
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';
Saad Saadi
fonte
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.

xagg
fonte
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

picmate 涅
fonte
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

evgeni
fonte
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.

Ben Hoyt
fonte
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

k3nn
fonte
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
rotarydial
fonte