Answers:
如果可以通过超级用户访问权限连接到数据库,则
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
建议的datadir 不同(它$(brew --prefix)/var/postgres
不是与所列出的符号链接的符号链接)。似乎该公式对于正确使用配置标志有点松懈。
postgresql-<ver>
apt软件包未安装pg_config ,但也需要postgresql-server-dev-<ver>
$(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist
,请看跟随-D
(/usr/local/var/postgres
在我的)路径。
在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
如果您无法登录(例如,忘记密码)但该服务正在运行,则由于MacOS X是posix变量,您始终可以检查ps
它是否作为参数传递:
在运行两个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
在安装了服务器应用程序的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
从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