PostgreSQL在哪里存储数据库?


Answers:


355

若要查看数据目录在哪里,请使用此查询。

show data_directory;

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

show all;

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

SELECT * FROM pg_tablespace;

1
显示data_directory; 命令指向数据的确切位置。搜索特定的文件夹很麻烦,因为可能有人为您安装了该文件夹,现在您不知道其配置,因此执行sql可以节省时间。:)谢谢迈克。
维沙尔

3
它说“必须是超级用户才能检查数据目录” :(
临时

5
如果您不是DBA,那么您实际上根本不需要知道。
Mike Sherrill'Cat Recall'

8
顺便说一句-如果有人像我一样在Mac上寻找Postgres.app的数据库位置,则默认情况下它位于〜/ Library / Application Support / Postgres [ver] / var中。
sstringer 2014年

1
要运行查询,请使用PGAdmin III,并使用菜单栏中的“运行查询”图标。
罗格霍夫斯特

61

Windows7的上所有的数据库由指定的文件中的一些被称为pg_databaseC:\Program Files (x86)\PostgreSQL\8.2\data\global。然后,您应该在下按该编号搜索文件夹名称C:\Program Files (x86)\PostgreSQL\8.2\data\base。那就是数据库的内容。


3
除非问题明确说明了操作系统,否则请不要以操作系统特定的方式回答。
simonmenke 2012年

24
为什么不?如果您不提及操作系统而只是说“这可行”,那么在其他操作系统上尝试这样做的任何人都会感到困惑。这是相关的。编辑:哦,您可能是说“根本不给出特定于操作系统的答案”。我想这是有道理的,我不知道。
David Winiecki

34
@David,问题可能已关闭,因为未指定哪个操作系统。(如果它指定了操作系统,则可能由于过于具体而将其关闭。)您的回答很有帮助且提供了很多信息-只需忽略反对者和反对者,直到他们最终成功摧毁SO。仇恨者会讨厌,而这一切。
SamGoody

@SamGoody,如果这个答案是正确的话,那么您在说什么就可以了。(这并不是严格不正确的,因为该文件夹可能在Windows中存在,但肯定不是给定的)。遵循已经给出的答案,可以很容易地发现是否存在这种情况。
乔恩·汉纳

@senthilkumari我有postgresql 11和Windows10。正如您提到的,我试图查看global文件夹中的pg_database,但看不到任何内容。我可以看到一堆_vms,_fsm,config_exec_params,pg_control,pg_filenode.map,pg_internal.init。对于Windows 10,应该搜索哪个文件。不一样吗
Nachiket



27

在我的Linux安装下,它在这里: /var/lib/postgresql/8.x/

您可以用 initdb -D "c:/mydb/"


12
取决于发行版-对于Fedora 20,它位于之下/var/lib/pgsql/data。最好找出使用ps auxw|grep postgres|grep -- -D
Skippy le Grand Gourou 2014年

17

特定表/索引的位置可以通过TABLESPACE进行调整:

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;

15

每个人都已经回答,但仅是最新更新。如果您想知道所有配置文件所在的位置,请在外壳中运行此命令

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

14

我敢打赌,您在问这个问题,因为您尝试过pg_ctl start并收到以下错误:

pg_ctl:未指定数据库目录,并且未设置环境变量PGDATA

换句话说,您正在寻找要放置-Dpg_ctl start命令中的目录。

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

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

...而且有效。


1
如果您使用的自制,来定位这个数据更简单的方法就是brew info postgres

您对我正在寻找数据库文件夹的原因很正确。但问题是,我无法使用locate <filename>
aswin prabhakar

找到了它们...必须使用sudo locate <filename>
aswin prabhakar

14

Postgres将数据存储在其数据目录中的文件中。请按照以下步骤转到数据库及其文件:

与postgresql表文件相对应的数据库是目录。可以通过运行获取整个数据目录的位置SHOW data_directory。在UNIX之类的OS(例如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线程


11

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

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


13
如果您通过自制软件安装(为什么不呢?),则可以在/usr/local/var/postgres其中使用@MikeSherrill的show data_directory;技巧
Chris Beck

/Library/PostgreSQL/9.0/data/base似乎更像Mac /usr/local/var/postgres。如果不启用隐藏的Finder功能,则无法在Finder中浏览到后者。
查理

@Charlie您可以从“转到”菜单使用Finder浏览。前往>前往文件夹...或⇧⌘G
贾森小号

@JasonS是的,您可以使用该技巧在Finder中打开不类似于mac的文件夹。
查理

1
就我而言,它位于:/ Users / bob / Library / Application Support / Postgres / var-9.5
Bwyss

7

在Windows上,PostgresSQL文档描述的PGDATA目录位于C:\Program Files\PostgreSQL\8.1\data。特定数据库的数据位于(例如)下C:\Program Files\PostgreSQL\8.1\data\base\100929,我想其中100929是数据库编号。


1
注意:如果要进行文件系统级备份,请不要仅备份这些目录,因为,正如文档所述:“ ...您可能会试图尝试仅备份或还原各自表中的某些特定表或数据库文件或目录。这将不起作用,因为如果没有包含所有事务的提交状态的提交日志文件pg_clog / *,这些文件中包含的信息将无法使用。”
Janis Veinbergs

这取决于。您可以在安装时将其配置到其他文件夹。
ANeves 2014年

在我的机器上,C:\ Program Files \ PostgreSQL \ 9.4 \中没有数据文件夹,这是9.4特有的东西还是做错了?
LucyViolet

2

picmate的答案是正确的。在Windows上,主数据库文件夹位置为(至少在我的安装中)

C:\PostgreSQL\9.2\data\base\

不在程序文件中。

他的2个脚本,将为您提供所需的确切目录/文件:

SELECT oid from pg_database WHERE datname = <database_name>;
SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

我的是datname 16393和relfilenode 41603

PostgreSQL中的数据库文件


0

我正在docker容器中运行postgres(9.5)(在CentOS上发生),正如Skippy le Grand Gourou在上面的评论中提到的,这些文件位于中/var/lib/postgresql/data/

$ docker exec -it my-postgres-db-container bash
root@c7d61efe2a5d:/# cd /var/lib/postgresql/data/
root@c7d61efe2a5d:/var/lib/postgresql/data# ls -lh
total 56K
drwx------. 7 postgres postgres   71 Apr  5  2018 base
drwx------. 2 postgres postgres 4.0K Nov  2 02:42 global
drwx------. 2 postgres postgres   18 Dec 27  2017 pg_clog
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_commit_ts
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_dynshmem
-rw-------. 1 postgres postgres 4.4K Dec 27  2017 pg_hba.conf
-rw-------. 1 postgres postgres 1.6K Dec 27  2017 pg_ident.conf
drwx------. 4 postgres postgres   39 Dec 27  2017 pg_logical
drwx------. 4 postgres postgres   36 Dec 27  2017 pg_multixact
drwx------. 2 postgres postgres   18 Nov  2 02:42 pg_notify
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_replslot
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_serial
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_snapshots
drwx------. 2 postgres postgres    6 Sep 16 21:15 pg_stat
drwx------. 2 postgres postgres   63 Nov  8 02:41 pg_stat_tmp
drwx------. 2 postgres postgres   18 Oct 24  2018 pg_subtrans
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_tblspc
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_twophase
-rw-------. 1 postgres postgres    4 Dec 27  2017 PG_VERSION
drwx------. 3 postgres postgres   92 Dec 20  2018 pg_xlog
-rw-------. 1 postgres postgres   88 Dec 27  2017 postgresql.auto.conf
-rw-------. 1 postgres postgres  21K Dec 27  2017 postgresql.conf
-rw-------. 1 postgres postgres   37 Nov  2 02:42 postmaster.opts
-rw-------. 1 postgres postgres   85 Nov  2 02:42 postmaster.pid
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.