Redrock Postgres 搜索 英文
版本: 12 / 13 / 14 / 15 / 16

附录 K. PostgreSQL 限制

表 K.1描述了 PostgreSQL 的各种硬限制。但是,在达到绝对硬限制之前,可能会应用实际限制,例如性能限制或可用磁盘空间。

表 K.1. PostgreSQL 限制

项目 上限 注释
数据库大小 无限制  
数据库数量 4,294,950,911  
每个数据库的关系 1,431,650,303  
关系大小 32 TB 默认 BLCKSZ 为 8192 字节
每张表中的行 受可容纳在 4,294,967,295 个页面上的元组数量限制  
每张表中的列 1,600 进一步受元组大小限制,即元组大小必须适合单个页面;请参见下文注释
结果集中的列 1,664  
字段大小 1 GB  
每张表中的索引 无限制 受每个数据库的最大关系数限制
每个索引中的列 32 可以通过重新编译 PostgreSQL 来增加
分区键 32 可以通过重新编译 PostgreSQL 来增加
标识符长度 63 字节 可以通过重新编译 PostgreSQL 来增加
函数参数 100 可以通过重新编译 PostgreSQL 来增加
查询参数 65,535  

由于存储的元组必须适合单个 8192 字节堆页,因此表的最大列数会进一步减少。例如,除去元组头,一个由 1600 个 int 列组成的元组将占用 6400 字节,并且可以存储在堆页中,但一个由 1600 个 bigint 列组成的元组将占用 12800 字节,因此不适合堆页。当值足够大时,类型为 textvarcharchar 等的可变长度字段的值可以存储在表的 TOAST 表中。在表堆中的元组内必须保留一个 18 字节指针。对于较短的可变长度字段,使用 4 字节或 1 字节字段头,并将值存储在堆元组中。

从表中删除的列也会影响最大列数限制。此外,尽管新创建的元组的已删除列值在元组的空位图中内部标记为 null,但空位图也会占用空间。