Como encontro o diretório de dados do PostgreSQL?

124

Esqueci como iniciei o PostgreSQL da última vez (há meses) e não me lembro onde o diretório de dados está localizado. O postgrescomando parece exigir a localização do diretório de dados.

Estou no MacOsX se isso ajudar.

/usr/local/postgres não existe no meu Mac.

Usando as respostas fornecidas abaixo, descobri que estava aqui:

/usr/local/var/postgres
cara aleatório
fonte
Quando você usa o Homebrew para instalar o Postgres, então dataé/usr/local/var/postgres
andrerpena

Respostas:

154

Se você pode se conectar ao banco de dados com acesso de superusuário,

SHOW data_directory;

é o caminho mais curto.

Se o servidor não estiver em execução e você esqueceu onde estava o diretório de dados, precisará realmente se adivinhar. Uma convenção específica do sistema operacional ou o histórico do shell pode fornecer dicas.

Peter Eisentraut
fonte
7
se não estiver em execução, tente executar uma localização para o postgresql.conf, que geralmente está no diretório de dados ou terá informações sobre o diretório de dados.
Xzilla
35

Você também pode consultá-lo

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

pg_config mostra muitas informações, incluindo o diretório de dados:

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'

Isso pode ser uma coisa específica de fermentação; sem bebida não sei o que mostra.

Dave Newton
fonte
1
Eu estou usando cerveja também. A partir de agora, o datadir listado pg_config --configurenão é o mesmo que o brew info postgresqlrecomendado (que é $(brew --prefix)/var/postgrese não é um link simbólico para o listado). Parece que a fórmula é um pouco relaxada no uso de sinalizadores de configuração corretamente.
Vaz
Nota para Ubuntu / Debain: pg_config não é instalado com o postgresql-<ver>pacote apt, mas exige tambémpostgresql-server-dev-<ver>
pscl
@PSCL É verdade, mas OP estava sob OS X.
Dave Newton
Entendido. Apenas uma nota para referência futura de usuários do Debian (como eu) tropeçando nesta questão com base em seu título genérico.
Pscl
1
@ Tom: Eu não acho que a fórmula realmente pretenda usar o datadir passado para configurar ... ela espera que o datadir seja passado como um argumento de linha de comando, você pode ver o que é passado quando é executado automaticamente como um serviço $(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist, veja para o caminho que segue o -D(está /usr/local/var/postgresno meu).
Vaz
16

No Ubuntu \ Debian, tente o pg_lsclusterscomando

Na minha 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
fonte
8

Se você não conseguir fazer login (por exemplo, esqueceu sua senha), mas o serviço estiver em execução, como o MacOS X é uma variante posix, você sempre poderá verificar psse está sendo transmitido como argumento:

Em uma caixa Linux com duas instâncias do postgres em execução:

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

Abra o postgresql.conf, vá para a linha:

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

é a sua resposta.

Ronaldinho
fonte
onde você encontrapostgresql.conf
user5359531 13/11
@ user5359531 Você pode fazer find / -iname "postgresql.conf" 2>/dev/nullpara descobrir
Tom
Meu postgresql.confnão tem data_directorydefinido. É referenciado apenas em um comentário:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ
2

As versões modernas do cliente de desktop PostgreSQL para OSX possuem uma conveniente caixa de diálogo "Configurações do servidor", que permitirá não apenas listar o diretório de dados, mas abri-lo diretamente.

Muito útil se ocorrer uma falha aleatória na máquina que deixa para trás um arquivo de bloqueio.

insira a descrição da imagem aqui

Matthew Mark Miller
fonte
Onde está esse diálogo? Não consigo encontrar nada parecido com isso em uma instalação direta (não brew) da 9.5 via postgresql.org/download/macosx . Ele vem com o pgadmin III, mas isso não parece ter esse diálogo. Não consigo encontrar clientes de desktop?
John pouco
1

No OS X 10.8 e 10.9 (não 10.10) com o aplicativo do servidor instalado, em uma janela do terminal, digite

sudo serveradmin settings postgres

No OS X 10.9 Mavericks, essa é a saída que recebo disso, que inclui o diretório de dados.

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"

Eu apenas tentei isso no Yosemite (OS X 10.10) e o postgres não está mais listado como um serviço em serveradmin (embora o postgres esteja instalado).

sudo serveradmin list

não lista postgres

Jason S
fonte
1

No Windows Server 2012, o comando pg_confignão revelou o diretório de dados por algum motivo maluco. Mas eu encontrei olhando o arquivo C:\Program Files\PostgreSQL\9.4\pg_env.bat, que continha esta linha:

@SET PGDATA=E:\POSTGRESQL

Essa foi a resposta que eu precisava.

user3618269
fonte
0

Que tal usar o utilitário padrão pg_config como pg_config --bindirOne também pode obter os parâmetros de configuração usados ​​para compilar o PostgreSQL e analisá-los compg_config --configure

Jacques
fonte
--bindirmostra a localização dos executáveis, não o diretório de dados. --configureestá OK, mesmo que seja necessário analisar um pouco a saída.
Dezso
Sim, isso é verdade e, infelizmente, o pg_config não possui um parâmetro que revele o datadir. Quando escrevi isso, pensei que pelo menos isso dá algo próximo, supondo que o datadir não esteja em um local especial. datadir seria relativa, em seguida, ao bindir como ../data
Jacques
0

Como apontado, também se pode usar pspara capturar a localização dos dados, como:

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

Isso funcionaria na maioria das vezes. Ele retornaria algo como /usr/local/pgsql/dataou onde quer que fosse especificado nos parâmetros do PostgreSQL no lançamento.

Jacques
fonte
0

Com base na resposta de @Matthew Mark Miller, no macOS 10.14 usando o Postgres 11, está localizado em:

~/Library/Application Support/Postgres
Navid
fonte
0

Generalizando a partir das 2 principais respostas:

Para mostrar o diretório de dados diretamente na linha de comando:

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

Para ver também todos os outros caminhos definidos para arquivos e diretórios:

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

Saída de amostra:

          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)

(No Windows, substitua LIKE '/%'por LIKE '%/%'porque o caminho começa com uma letra de unidade)

mivk
fonte