如何找到PostgreSQL的数据目录?


123

我忘记了上次(几个月前)如何启动PostgreSQL,而且我不记得数据目录位于何处。该postgres命令似乎需要数据目录的位置。

如果有帮助,我就使用MacOsX。

/usr/local/postgres 在我的Mac上不存在。

使用下面提供的答案,我发现它在这里:

/usr/local/var/postgres

当您使用Homebrew来安装Postgres时,则data/usr/local/var/postgres
andrerpena '18

Answers:


152

如果可以通过超级用户访问权限连接到数据库,则

SHOW data_directory;

是最短的方法。

如果服务器未运行,而您忘记了数据目录的位置,那么您真的必须猜测自己。特定于操作系统的约定或外壳历史记录可能会提供提示。


7
如果未运行,请尝试运行通常位于数据目录中的postgresql.conf查找,或者将包含有关数据目录的信息。
xzilla 2011年

34

您也可以查询

select setting from pg_settings where name = 'data_directory';

18

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'

不过,这可能是酿造专用的东西。没有酿造我不知道它显示什么。


1
我也在用啤酒。截至目前,其中列出的datadir pg_config --configure与所brew info postgresql建议的datadir 不同(它$(brew --prefix)/var/postgres不是与所列出的符号链接的符号链接)。似乎该公式对于正确使用配置标志有点松懈。
Vaz 2015年

Ubuntu / Debain注意:postgresql-<ver>apt软件包未安装pg_config ,但也需要postgresql-server-dev-<ver>
pscl

@PSCL没错,但OP是在OS X下
戴夫·牛顿

明白了 只是一个注释,供Debian用户(例如我)将来参考时根据其通用标题绊倒这个问题。
pscl

1
@Tom我不认为该公式真的打算使用传递的datadir进行配置...它期望将datadir作为命令行arg传递,您可以看到当它作为服务自动运行时传递的内容$(brew --prefix postgresql)/homebrew.mxcl.postgresql.plist,请看跟随-D/usr/local/var/postgres在我的)路径。
Vaz

16

在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

8

如果您无法登录(例如,忘记密码)但该服务正在运行,则由于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

2

打开postgresql.conf,转到以下行:

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

是你的答案。


您在哪里找到postgresql.conf
user5359531

@ user5359531您可以find / -iname "postgresql.conf" 2>/dev/null找到答案
Tom

postgresql.conf没有data_directory定义。仅在评论中引用:#data_directory = 'ConfigDir' # use data in another directory
SimpleJ,

2

用于OSX的PostgreSQL桌面客户端的现代版本具有方便的“服务器设置”对话框,该对话框不仅允许您列出数据目录,还可以直接打开它。

如果您遇到随机的机器崩溃并留下锁定文件的情况,这将非常有用。

在此处输入图片说明


该对话框在哪里?我无法通过postgresql.org/download/macosx在9.5的直接安装(不是brew)上找到类似的内容。pgadmin III附带了它,但是似乎没有此对话框。我找不到任何桌面客户端?
约翰·利特尔

1

在安装了服务器应用程序的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

在Windows Server 2012上,由于pg_config某些疯狂的原因,该命令未显示数据目录。但是我通过查看C:\Program Files\PostgreSQL\9.4\pg_env.bat包含以下行的文件找到了它:

@SET PGDATA=E:\POSTGRESQL

那就是我需要的答案。


0

如何使用诸如pg_config --bindirOne之类的标准实用程序pg_config,也可以获取用于编译PostgreSQL并使用以下命令解析它们的configure参数pg_config --configure


--bindir显示可执行文件的位置,而不是数据目录。 --configure是可以的,即使必须解析输出一点。
dezso

是的,这是正确的,但是遗憾的是pg_config没有显示数据目录的参数。当我写这篇文章时,我认为至少假设datadir不在一个特殊的位置,它提供了一些便利。datadir将是相对于bindir的相对目录,例如../data
Jacques

0

如前所述,还可以ps用来捕获数据位置,例如:

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

这在大多数情况下都会起作用。在启动时,它将返回类似/usr/local/pgsql/dataPostgreSQL的参数中指定的内容或其他内容。


0

根据@Matthew Mark Miller的回答,在使用Postgres 11的macOS 10.14上,它位于:

~/Library/Application Support/Postgres

0

从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 '%/%'因为路径以驱动器号开头)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.