postgresql 数据目录内部结构

一、一切皆为Oid

在Linux中一切皆为文件,在postgresql中一切皆为Oid。

1.1 什么是Oid

Object identifier(Oid), 对象标识符。 在postgresql内部,所有的数据库对象都是通过相应的Oid进行管理。

typedef unsigned int Oid;

Oid在代码中是一个4字节的无符号的整数。

1.2 数据库Oid

postgres@uw:~$ /usr/local/pgsql/bin/psql 
psql (14.2)
Type "help" for help.

postgres=# select datname,oid from pg_database where datname='test';
 datname |  oid  
---------+-------
 test    | 16384
(1 row)

postgres=# 
postgres@uw:~$ ls /usr/local/pgsql/data/base/ -l
total 24
drwx------ 2 postgres postgres 4096 Jun  6 14:38 1
drwx------ 2 postgres postgres 4096 Jun  6 14:38 12971
drwx------ 2 postgres postgres 4096 Jul  4 12:50 12972
drwx------ 2 postgres postgres 4096 Jun  7 12:19 16384
drwx------ 2 postgres postgres 4096 Jun 11 02:01 24577
drwx------ 2 postgres postgres 4096 Jul  4 12:50 40960

1.3 表Oid

postgres@uw:~$ /usr/local/pgsql/bin/psql test
psql (14.2)
Type "help" for help.

test=# create table stu (name varchar(32), age int, sex char(2));
CREATE TABLE
test=# \dS+ stu
                                                  Table "public.stu"
 Column |         Type          | Collation | Nullable | Default | Storage  | Compression | Stats target | Description 
--------+-----------------------+-----------+----------+---------+----------+-------------+--------------+-------------
 name   | character varying(32) |           |          |         | extended |             |              | 
 age    | integer               |           |          |         | plain    |             |              | 
 sex    | character(2)          |           |          |         | extended |             |              | 
Access method: heap

test=# select oid,relname from pg_class where relname  = 'stu';
  oid  | relname 
-------+---------
 49152 | stu
(1 row)

test=# 

postgres@uw:~$ ls /usr/local/pgsql/data/base/16384/49152 -hal
-rw------- 1 postgres postgres 0 Jul  4 12:57 /usr/local/pgsql/data/base/16384/49152

二、和MySQL对比

数据库数据库存储表存储编码影响
postgresql目录名为对应的Oid(数字)文件名为对应的Oid (数字)只是一个数值,不受影响
mysql目录名为数据库名(字符串)文件名为表名 (字符串)受影响

postgresql和mysql都是将数据库作为目录,对应的表则在对应的目录下,方便查找以及管理。

三、 数据目录结构

root@uw:/# tree /usr/local/pgsql/data/ -L 1
/usr/local/pgsql/data/
|-- PG_VERSION 
|-- base
|-- global
|-- pg_commit_ts
|-- pg_dynshmem
|-- pg_hba.conf
|-- pg_ident.conf
|-- pg_logical
|-- pg_multixact
|-- pg_notify
|-- pg_replslot
|-- pg_serial
|-- pg_snapshots
|-- pg_stat
|-- pg_stat_tmp
|-- pg_subtrans
|-- pg_tblspc
|-- pg_twophase
|-- pg_wal
|-- pg_xact
|-- postgresql.auto.conf 
|-- postgresql.conf 
|-- postmaster.opts
`-- postmaster.pid

17 directories, 7 files

名称	描述
PG_VERSION	pg服务器主版本号文件
base/	数据库目录都在此目录下
global/	数据库集簇范围的表(比如pg_database, 类似mysql的performance_schema)
pg_commit_ts/	事物提交的时间戳数据
pg_dynshmem/	动态共享内存子系统中使用的文件
pg_hba.conf	控制pg客户端认证配置的文件
pg_ident.conf	pg用户映射文件
pg_logical/	逻辑解码的状态数据
pg_multixact/	多事务状态数据
pg_notify/	Listen/Notify状态数据
pg_replslot/	复制槽数据
pg_serial/	已提交的可串行化事务相关信息
pg_snapshots/	快照信息
pg_stat/	统计子系统的永久文件
pg_stat_tmp/	统计子系统的临时文件
pg_subtrans/	子事务状态数据
pg_tblspc/	指向表空间的符号链接
pg_twophase/	两阶段事务的状态文件
pg_wal/	WAL文件
pg_xact/	事务提交状态数据
postgresql.auto.conf	存储使用alter system修改的配置
postgresql.conf	配置文件
postmaster.opts	记录服务器上一次启动的命令行选项
postmaster.pid	服务器pid文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值