集群目录中的 PostgreSQL 数据库文件在哪里?
Where are PostgreSQL database files in the cluster directory?
在 OSX,我最近通过 Homebrew 安装了 PostgreSQL:
brew install postgresql
然后我创建了一个新的数据库集群:
initdb /usr/local/var/postgres
我确认 postgresql 服务器是 运行 预期的数据库集群:
$ ps auxwww | grep postgres
0:00.03 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres
我创建了一个新数据库:
createdb mynewdb
我看到它存在。
$ psql
<user>=# \l
mynewdb | <user> | UTF8 | en_US.UTF-8 | en_US.UTF-8
但是,我发现集群目录没有明显变化(例如,仅通过检查内容 ls -lt
)。
数据库写入/存储在集群目录(或子目录)的什么位置?
因为@ahorsewithnoname 说它们在基本目录中,(在其他一些平台上 data/base)
数字名称是数据库的 OID
,目录中的文件将以 table 的 OID
或它们相关的索引命名。
可以使用此查询确定数据库 oid。 oid 就像一个隐藏的唯一 id 列。
select oid,* from pg_catalog.pg_database;
table 索引oid可以这样找到,
select * from pg_catalog.pg_class;
文件名基础的 relifilenode 列(感谢@jjames)
在 OSX,我最近通过 Homebrew 安装了 PostgreSQL:
brew install postgresql
然后我创建了一个新的数据库集群:
initdb /usr/local/var/postgres
我确认 postgresql 服务器是 运行 预期的数据库集群:
$ ps auxwww | grep postgres
0:00.03 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres
我创建了一个新数据库:
createdb mynewdb
我看到它存在。
$ psql
<user>=# \l
mynewdb | <user> | UTF8 | en_US.UTF-8 | en_US.UTF-8
但是,我发现集群目录没有明显变化(例如,仅通过检查内容 ls -lt
)。
数据库写入/存储在集群目录(或子目录)的什么位置?
因为@ahorsewithnoname 说它们在基本目录中,(在其他一些平台上 data/base)
数字名称是数据库的 OID
,目录中的文件将以 table 的 OID
或它们相关的索引命名。
可以使用此查询确定数据库 oid。 oid 就像一个隐藏的唯一 id 列。
select oid,* from pg_catalog.pg_database;
table 索引oid可以这样找到,
select * from pg_catalog.pg_class;
文件名基础的 relifilenode 列(感谢@jjames)