PostgreSQL数据库存储在哪里?

469

PostgreSQL数据库的文件存储在哪里?


4
https://www.postgresql.org/docs/9.5/static/storage-file-layout.html - William Pursell
46
sudo -u postgres psql -c "show data_directory;" 命令可显示标准 PostgreSQL 安装的当前存储位置。 - user6901258
1
psql -U postgres -c "show data_directory;" 对我有效。 - E Epsylon
14个回答

452

要查看数据目录的位置,请使用以下查询。

show data_directory;

要查看所有运行时参数,请使用

show all;

您可以创建表空间以将数据库对象存储在文件系统的其他部分。要查看可能不在该数据目录中的表空间,请使用此查询。

SELECT *, pg_tablespace_location(oid) FROM pg_tablespace;

1
显示 data_directory 命令会指向数据的确切位置。搜索特定文件夹很困难,因为有人可能已经为您安装了它,现在您不知道配置,所以以下 SQL 语句可以帮助节省时间。 :) 谢谢 Mike。 - Vishal
3
提示:"必须是超级用户才能查看数据目录" :( - temporary_user_name
7
如果你不是数据库管理员,那么你真的不需要知道。 - Mike Sherrill 'Cat Recall'
8
顺便说一句,如果有人像我一样在寻找Mac上Postgres.app的数据库位置,它默认是在~/Library/Application Support/Postgres[版本]/var目录下。 - sstringer
1
要运行查询,请使用PGAdmin III,并在菜单栏中使用“运行查询”图标。 - Rutger Hofste
要直接在命令行获取它,可以使用以下命令:psql -U postgres -tA -c "SHOW data_directory;" - mivk

82

在 Windows7 上,所有的数据库都是通过名为 pg_database 的文件下的编号来引用的,该文件位于 C:\Program Files (x86)\PostgreSQL\8.2\data\global 目录下。然后,您应该在 C:\Program Files (x86)\PostgreSQL\8.2\data\base 目录下搜索以该数字命名的文件夹,这就是数据库的内容。


5
除非问题明确指出操作系统,否则不要以特定操作系统的方式回答。 - simonmenke
47
为什么不提及操作系统,只说“这有效”,这样在尝试在不同操作系统上运行时会让人感到困惑。这是相关的。编辑:噢,你可能是指“根本不要给出特定于操作系统的答案”。我想这有道理,但我不确定。 - David Winiecki
1
@SamGoody 如果这个答案是正确的,你所说的话可能有点意义。(它并不完全是错误的,因为在Windows中该文件夹 可能 存在,但绝对不是一定的)。是否存在可以通过遵循已经给出的答案轻松得到答案。 - Jon Hanna
1
@senthilkumari,我有postgresql 11和windows 10。正如你所提到的,我尝试查看全局文件夹中的pg_database,但我没有看到任何内容。我只能看到一堆_vms、_fsm、config_exec_params、pg_control、pg_filenode.map和pg_internal.init。对于Windows 10,我应该搜索哪个文件名?它不同吗? - Nachiket

43

1
简单易懂,无需进行数据库认证! - jouell

36

打开pgAdmin并转到特定数据库的属性。查找OID,然后打开目录

<POSTGRESQL_DIRECTORY>/data/base/<OID>

这里应该是您的数据库文件。


27
SELECT oid from pg_database where datname = '<dbname>' - Charlie

31

在我的Linux系统中,它的位置是:/var/lib/postgresql/8.x/

您可以使用initdb -D "c:/mydb/"来更改它。


15
根据发行版而定,对于 Fedora 20,它位于 /var/lib/pgsql/data 目录下。最好使用 ps auxw|grep postgres|grep -- -D 命令来查找。 - Skippy le Grand Gourou
(直到F34仍在同一目录下,顺便说一句) - Giampaolo Ferradini

24

大家已经回答了,但仅限于最新的更新。如果您想知道所有配置文件的位置,则在 shell 中运行此命令。

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';

你真是个救命恩人!我已经找了好几天了。 - Tucker

20

PostgreSQL 将数据存储在其数据目录中的文件中。按照以下步骤前往数据库及其文件:

与 PostgreSQL 表文件对应的数据库是一个目录。可以通过运行 SHOW data_directory 命令获取整个数据目录的位置。 在类 UNIX 的操作系统(例如:Mac)中,数据目录的位置为:/Library/PostgreSQL/9.4/data。 进入数据目录中包含所有数据库文件夹的基础文件夹:/Library/PostgreSQL/9.4/data/base

通过运行以下命令查找数据库文件夹名称(会返回一个整数,这就是数据库文件夹名称):

SELECT oid from pg_database WHERE datname = <database_name>;

运行以下命令以获取表格文件名称(将返回一个整数,这个整数即为文件名):

SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

这是一个二进制文件。可以像通常一样获得文件大小和创建日期时间等文件详细信息。要了解更多信息,请阅读此SO线程


20

我打赌你问这个问题是因为你尝试过pg_ctl start,并收到以下错误信息:

pg_ctl: no database directory specified and environment variable PGDATA unset

换句话说,你正在寻找在pg_ctl start命令中放置-D后面的目录。

在这种情况下,你要找的目录包含这些文件。

PG_VERSION      pg_dynshmem     pg_multixact
pg_snapshots    pg_tblspc       postgresql.conf
base            pg_hba.conf     pg_notify   
pg_stat         pg_twophase     postmaster.opts
global          pg_ident.conf   pg_replslot
pg_stat_tmp     pg_xlog         postmaster.pid
pg_clog         pg_logical      pg_serial
pg_subtrans     postgresql.auto.conf    server.log

通过使用操作系统提供的搜索功能,您可以通过查找上面列出的任何文件或目录来找到它。

例如,在我的情况下(在 Mac OS X 上进行的 HomeBrew 安装),这些文件位于 /usr/local/var/postgres。要启动服务器,我键入:

pg_ctl -D /usr/local/var/postgres -w start

...并且它起作用了。


2
如果您使用Homebrew,查找此数据的更简单的方法是brew info postgres - Ben
你对我寻找数据库文件夹的原因是正确的。但问题是我无法使用“locate <文件名>”命令找到上述任何文件。 - wardaddy
找到它们了...必须使用 sudo locate <文件名> - wardaddy

18
特定表和索引的位置可以通过TABLESPACE进行调整:
CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;

12

在Mac上:/Library/PostgreSQL/9.0/data/base

无法进入该目录,但可以通过以下方式查看内容:sudo du -hc data


14
如果您使用Homebrew进行安装(为什么不呢?),那么它将位于/usr/local/var/postgres,您可以使用@MikeSherrill的show data_directory;提示来发现它。 - Chris Beck
"/Library/PostgreSQL/9.0/data/base" 似乎比 "/usr/local/var/postgres" 更符合 Mac 的位置。如果不启用隐藏的 Finder 功能,您无法在 Finder 中浏览到后者。 - Charlie
@Charlie 你可以使用Finder从菜单栏中的“前往”选项浏览。选择“前往” > “前往文件夹...”,或者按下 ⇧⌘G。 - Jason S
@JasonS 是的,你可以使用那个技巧在Finder中打开不像Mac的文件夹。 - Charlie
FYI,截至Postgres 9.4,使用EnterpriseDB提供的安装程序仍然是正确的。 - Basil Bourque
1
在我的情况下,它位于:/Users/bob/Library/Application Support/Postgres/var-9.5。 - Bwyss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接