• postgresql 之 数据目录内部结构 简介


    一、一切皆为Oid

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

    1.1 什么是Oid

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

    typedef unsigned int Oid;
    
    • 1

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

    1.2 数据库Oid

    postgres@2f9d6ce41c2b:~$ /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=# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    postgres@2f9d6ce41c2b:~$ 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.3 表Oid

    postgres@2f9d6ce41c2b:~$ /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=# 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    postgres@2f9d6ce41c2b:~$ 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
    
    • 1
    • 2

    二、和MySQL对比

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

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

    三、 数据目录结构

    root@2f9d6ce41c2b:/# 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    名称描述
    PG_VERSIONpg服务器主版本号文件
    base/数据库目录都在此目录下
    global/数据库集簇范围的表(比如pg_database, 类似mysql的performance_schema)
    pg_commit_ts/事物提交的时间戳数据
    pg_dynshmem/动态共享内存子系统中使用的文件
    pg_hba.conf控制pg客户端认证配置的文件
    pg_ident.confpg用户映射文件
    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文件
  • 相关阅读:
    Live800:在线客服系统如何帮助企业创造持续的服务价值?
    质数的判定和质因数分解
    Hive客户端和Beeline命令行的基本使用
    nginx进程间同步机制-互斥锁
    时序分析 42 -- 时序数据转为空间数据 (一) 格拉姆角场
    ArcGIS属性表导出时中文为乱码的解决办法
    【中间件篇-Redis缓存数据库08】Redis设计、实现、redisobject对象设计、多线程、缓存淘汰算法
    说说CDN和负载均衡具体是怎么实现的
    8.11 DAy39---MyBatis面试题
    1.0、C语言数据结构 ——初识数据结构和算法
  • 原文地址:https://blog.csdn.net/happytree001/article/details/125610460