回答:
スーパーユーザーアクセスでデータベースに接続できる場合、
SHOW data_directory;
最短の方法です。
サーバーが実行されておらず、データディレクトリの場所を忘れた場合は、実際に推測する必要があります。オペレーティングシステム固有の規則またはシェル履歴がヒントを提供する場合があります。
クエリすることもできます
select setting from pg_settings where name = 'data_directory';
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'
ただし、これは醸造固有のものかもしれません。醸造なしでは、それが何を示しているのか分かりません。
pg_config --configure
と同じではないbrew info postgresql
(これはお勧めし$(brew --prefix)/var/postgres
、列挙されたものとシンボリックリンクではありません)。公式は設定フラグを適切に使用するのに少し緩いようです。
postgresql-<ver>
aptパッケージと共にインストールされませんが、次も必要ですpostgresql-server-dev-<ver>
$(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist
、-D
(それ/usr/local/var/postgres
は私のものです)に続くパスに対して。
ログインできない(パスワードを忘れたなど)が、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
postgresql.confを開き、次の行に移動します。
data_directory='/var/lib/postgresql/main/'
あなたの答えです。
postgresql.conf
find / -iname "postgresql.conf" 2>/dev/null
見つけるためにできること
postgresql.conf
はdata_directory
定義がありません。コメントでのみ参照されます:#data_directory = 'ConfigDir' # use data in another directory
OSX用PostgreSQLデスクトップクライアントの最新バージョンには、データディレクトリを一覧表示するだけでなく、直接開くことができる便利な[サーバー設定]ダイアログがあります。
ロックファイルが残るランダムなマシンクラッシュが発生した場合に非常に便利です。
サーバーアプリがインストールされた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"
Yosemite(OS X 10.10)でこれを試したところ、postgresはserveradminの下にサービスとしてリストされなくなりました(postgresはインストールされていますが)。
sudo serveradmin list
postgresをリストしません
Windows Server 2012では、pg_config
何らかの理由でコマンドがデータディレクトリを公開しませんでした。しかし、私はC:\Program Files\PostgreSQL\9.4\pg_env.bat
この行を含むファイルを見て、それを見つけました:
@SET PGDATA=E:\POSTGRESQL
それが私が必要とした答えでした。
pg_config --bindir
One などの標準ユーティリティpg_configを使用して、PostgreSQLのコンパイルと解析に使用する設定パラメータを取得する方法もあります。pg_config --configure
--bindir
データディレクトリではなく、実行可能ファイルの場所を示します。 --configure
出力を少し解析する必要がある場合でも、問題ありません。
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 '%/%'
、パスはドライブ文字から始まるため)
data
で/usr/local/var/postgres