Local padrão do banco de dados PostgreSQL no Linux

Respostas:

134

O " diretório onde o postgresql irá manter todos os bancos de dados " (e configuração) é chamado de "diretório de dados" e corresponde ao que o PostgreSQL chama (um pouco confuso) de " cluster de banco de dados ", que não está relacionado à computação distribuída, significa apenas um grupo de bancos de dados e objetos relacionados gerenciados por um servidor PostgreSQL.

A localização do diretório de dados depende da distribuição. Se você instalar a partir da fonte, o padrão é /usr/local/pgsql/data:

Em termos de sistema de arquivos, um cluster de banco de dados será um único diretório no qual todos os dados serão armazenados. Chamamos isso de diretório de dados ou área de dados. Depende totalmente de você escolher onde armazenar seus dados. Não há padrão, embora locais como / usr / local / pgsql / data ou / var / lib / pgsql / data sejam populares. ( ref )

Além disso, uma instância de um servidor PostgreSQL em execução está associada a um cluster; a localização de seu diretório de dados pode ser passada para o daemon do servidor (" postmaster " ou " postgres ") na -Dopção de linha de comando, ou pela PGDATAvariável de ambiente (geralmente no escopo do usuário em execução, normalmente postgres). Normalmente, você pode ver o servidor em execução com algo assim:

[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

Observe que é possível, embora não muito frequente, executar duas instâncias do mesmo servidor PostgreSQL (mesmos binários, processos diferentes) que atendem a "clusters" diferentes (diretórios de dados). Claro, cada instância escutaria em sua própria porta TCP / IP.

leonbloy
fonte
Posso ver o diretório de dados atual, mas vejo muitas outras pastas e arquivos. O psql "salva" o banco de dados em muitos arquivos ou há apenas um dentro desse diretório de dados que é o banco de dados? porque eu estava pensando em algo como o arquivo DB no servidor mysql ou sql por exemplo ...
CamiloVA
70
/var/lib/postgresql/[version]/data/

Pelo menos no Gentoo Linux e Ubuntu 14.04 por padrão.

Você pode encontrar postgresql.confe olhar para param data_directory. Se for comentado, o diretório do banco de dados é o mesmo que este diretório do arquivo de configuração.

silencioso
fonte
21
Vai depender da distribuição, todos eles fazem de forma um pouco diferente. Se você pode se conectar ao sistema, usar "SHOW data_directory" é provavelmente a maneira mais fácil.
Magnus Hagander
@MagnusHagander é uma resposta, y não torne este comentário uma resposta. Isso funcionou bem para mim.
Vishal
no Gnome vejo o mesmo aqui/var/lib/8.1/postgresql
Junior Mayhé
Para mim é '/var/lib/postgresql/9.3/main'
radtek
9
para Centos 7, caminho postgres 9.3/var/lib/pgsql/9.3
rana_stack
15

Padrão no Debian 8.1 e PostgreSQL 9.4 após a instalação com o gerenciador de pacotes 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

tão aparentemente /var/lib/postgresql/9.4/main.

Léo Léopold Hertz 준영
fonte
11

No Centos 6.5 / PostgreSQL 9.3:

Altere o valor "PGDATA=/var/lib/pgsql/data"para qualquer local que desejar no arquivo de script inicial /etc/init.d/postgresql.

Lembre-se de chmod 700 e chown postgres:postgrespara o novo local e você é o chefe.

Dum
fonte
2

O comando pg_lsclusters(pelo menos no Linux / Ubuntu) pode ser usado para listar os clusters existentes e com ele também o diretório de dados:

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

Acho que o melhor método é consultar a pg_settingvisualização:

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

Resultado:

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

A consulta abaixo ajudará a encontrar o arquivo de configuração do 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
fonte