web-dev-qa-db-ja.com

PostgreSQLのデータディレクトリを見つけるにはどうすればよいですか?

前回(数か月前)にPostgreSQLを起動した方法を忘れており、データディレクトリの場所を覚えていません。 postgresコマンドには、データディレクトリの場所が必要なようです。

それが役立つ場合は、MacOsXを使用しています。

/usr/local/postgresが私のMacに存在しません。

以下の回答を使用して、それがここにあることがわかりました。

/usr/local/var/postgres
134
randomguy

スーパーユーザーアクセスでデータベースに接続できる場合、

SHOW data_directory;

最短の方法です。

サーバーが実行されておらず、データディレクトリの場所を忘れた場合は、実際に推測する必要があります。オペレーティングシステム固有の規則またはシェルの履歴からヒントが得られる場合があります。

168

クエリすることもできます

select setting from pg_settings where name = 'data_directory';
38
DrColossos

pg_configは、データディレクトリを含む多くの情報を表示します。

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'

しかし、これは醸造特有のことかもしれません。醸造なしでは、それが何を示しているのかわかりません。

19
Dave Newton

Ubuntu\Debianで、pg_lsclustersコマンドを試してください。

私のマシンでは:

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
17
Adam Matan

ログインできない(パスワードを忘れたなど)が、サービスが実行されている場合、MacOS Xはposixバリアントであるため、いつでもpsをチェックして、引数として渡されているかどうかを確認できます。

2つのpostgresインスタンスが実行されているLinuxボックス:

-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
9
Joe

OSX用PostgreSQLデスクトップクライアントの最新バージョンには、便利な「サーバー設定」ダイアログがあり、データディレクトリを一覧表示するだけでなく、直接開くことができます。

ロックファイルを残すランダムなマシンクラッシュが発生した場合に非常に役立ちます。

enter image description here

4

Postgresql.confを開き、次の行に移動します。

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

あなたの答えです。

4
Ronaldinho

上位2つの回答から一般化:

コマンドラインで直接データディレクトリを表示するには:

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

ファイルとディレクトリへの他のすべての定義済みパスも表示するには:

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

出力例:

          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)

(Windowsでは、LIKE '/%'LIKE '%/%'パスはドライブ文字で始まるため)

1
mivk

Windows Server 2012では、コマンドpg_configは、なんらかの理由でデータディレクトリを明らかにしませんでした。しかし、次の行が含まれているファイルC:\Program Files\PostgreSQL\9.4\pg_env.batを調べて見つけました。

@SET PGDATA=E:\POSTGRESQL

それが私が必要とした答えでした。

1
user3618269

サーバーアプリがインストールされているOS X 10.8および10.9(10.10ではない)で、ターミナルウィンドウに次のように入力します。

Sudo serveradmin settings postgres

OS X 10.9 Mavericksでは、これは私がそこから取得する出力で、データディレクトリが含まれています。

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"

私はこれをヨセミテ(OS X 10.10)で試したところ、postgresがserveradminの下のサービスとしてリストされなくなりました(postgresはインストールされています)。

Sudo serveradmin list

postgresをリストしません

1
Jason S

Fedoraおよびおそらく他のいくつかのLinuxディストリビューションでは、postgresユーザーに変更して、PGDATA環境変数を読み取ることができます。例えば。:

Sudo su - postgres
echo ${PGDATA}
/var/lib/pgsql/12/data
0
dbdemon

@Matthew Mark Millerの回答に基づくと、macOS 10.14ではPostgres 11を使用しており、次の場所にあります。

~/Library/Application Support/Postgres
0
Navid

指摘したように、psを使用して次のようなデータの場所を取得することもできます。

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

これはほとんどの場合機能します。起動時に/usr/local/pgsql/dataなどのPostgreSQLのパラメータで指定された場所を返します。

0
Jacques