目录
一、查看数据库文件位置
-- 数据库名字是 catdb
select oid,datname from pg_database where datname = 'catdb';
oid | datname
-------+---------
16638 | catdb
那么数据库 catdb 的文件就存储在了目录 ${PGDATA}/base/16638 里面。
$ ls -l ${PGDATA}/base/
total 48
drwx------ 2 postgres postgres 4096 Nov 5 11:57 1
drwx------ 2 postgres postgres 4096 Nov 5 11:57 13756
drwx------ 2 postgres postgres 4096 Nov 5 11:58 13757
drwx------ 2 postgres postgres 12288 Jan 11 04:43 16638
drwx------ 2 postgres postgres 20480 Jan 11 01:43 16902
drwx------ 2 postgres postgres 4096 Jan 6 06:19 pgsql_tmp
二、查看表文件位置
表 tasks 是数据库 catdb 中的一个table 。
-- 表的名字是 tasks
select oid,relfilenode from pg_class where relname = 'tasks';
oid | relfilenode
-------+-------------
16681 | 16681
可以看到查询到的 relfilenode 是 16681。综合第一步查询到的数据库的文件位置 16638,那么表 tasks 对应的文件就是:${PGDATA}/base/16638/16681
查看一下所有以 16681 开头的文件:
$ ls -hl ${PGDATA}/base/16638/16681*
-rw------- 1 postgres postgres 1.0G Jan 11 04:50 /home/pgdata/base/16638/16681
-rw------- 1 postgres postgres 1.0G Jan 11 04:50 /home/pgdata/base/16638/16681.1
-rw------- 1 postgres postgres 1.0G Jan 11 04:50 /home/pgdata/base/16638/16681.2
-rw------- 1 postgres postgres 187M Jan 11 04:52 /home/pgdata/base/16638/16681.3
-rw------- 1 postgres postgres 840K Jan 11 04:50 /home/pgdata/base/16638/16681_fsm
-rw------- 1 postgres postgres 96K Jan 11 04:50 /home/pgdata/base/16638/16681_vm
好多文件,为什么呢?
因为 PG 在存储表的数据时,默认情况下,当一个表占用的磁盘空间到了 1G的时候,就会对表文件进行分割。每个被分割出来的文件,都会加上一个顺序号,来代表是分割后的第几个文件。