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

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.


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';

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.


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

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

2

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

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

é a sua resposta.


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


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


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.


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


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


0

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

~/Library/Application Support/Postgres

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)

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.