PostgreSQL在哪里存储数据库?

Where does PostgreSQL store the database?

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


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

1
SHOW data_directory;

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

1
SHOW ALL;

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

1
SELECT * FROM pg_tablespace;


在Windows7上,所有数据库都由C:\Program Files (x86)\PostgreSQL\8.2\data\global下名为pg_database的文件中的数字引用。然后,您应该在C:\Program Files (x86)\PostgreSQL\8.2\data\base下按该编号搜索文件夹名称。那是数据库的内容。


打开pgAdmin并转到特定数据库的Properties。找到OID然后打开目录

1
<POSTGRESQL_DIRECTORY>/DATA/base/<OID>

应该有你的DB文件。


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

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


正如"Linux上的PostgreSQL数据库默认位置"所述,在Linux下,您可以使用以下命令找到:

1
ps aux | grep postgres | grep -- -D

TABLESPACEs可以调整特定表/索引的位置:

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


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

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

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

对应于postgresql表文件的数据库是目录。可以通过运行SHOW data_directory获取整个数据目录的位置。
在类似OS的UNIX(例如:Mac)/Library/PostgreSQL/9.4/data
进入包含所有数据库文件夹的数据目录中的基本文件夹:/Library/PostgreSQL/9.4/data/base

通过运行查找数据库文件夹名称(给出一个整数。这是数据库文件夹名称):

1
SELECT oid FROM pg_database WHERE datname = <database_name>;

通过运行查找表文件名(给出一个整数。这是文件名):

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

这是一个二进制文件。可以像往常一样获取文件详细信息,例如大小和创建日期时间。有关更多信息,请阅读此SO线程


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

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


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

pg_ctl: no database directory specified and environment variable PGDATA unset

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

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

1
2
3
4
5
6
7
8
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中。要启动服务器,我输入:

1
pg_ctl -D /usr/LOCAL/var/postgres -w START

......它有效。


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


picmate的回答是对的。在Windows上主DB文件夹的位置是(至少我的安装)

1
C:\PostgreSQL\9.2\DATA\base\

而不是在程序文件中。

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

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

我的数据名是16393,而relfilenode是41603

database files in postgresql