Skip to content

附录 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,但空位图也会占用空间。