Postgresql 中文操作指南

Appendix K. PostgreSQL Limits

Table K.1 描述了 PostgreSQL 的各种硬限制。但是,实际上在达到绝对硬限制之前,可能受到性能限制或可用磁盘空间等实际限制。

Table K.1. PostgreSQL Limitations

Item

Upper Limit

Comment

database size

unlimited

number of databases

4,294,950,911

relations per database

1,431,650,303

relation size

32 TB

默认 BLCKSZ 为 8192 字节

rows per table

受可以容纳到 4,294,967,295 页中的元组数限制

columns per table

1,600

进一步受元组大小限制,使其适合于单个页面;见下文说明

结果集中列

1,664

field size

1 GB

indexes per table

unlimited

受每个数据库的最大关系限制

columns per index

32

可以通过重新编译 PostgreSQL 来增加

partition keys

32

可以通过重新编译 PostgreSQL 来增加

identifier length

63 bytes

可以通过重新编译 PostgreSQL 来增加

function arguments

100

可以通过重新编译 PostgreSQL 来增加

query parameters

65,535

表的最大列数进一步减少的原因为,要存储的元组必须安装在一个 8192 字节的堆页中。例如,排除元组头,由 1,600 个 int 列构成的元组会占用 6400 字节,可以存储在堆页中,但由 1,600 个 bigint 列构成的元组将占用 12800 字节,因此不适合放在堆页中。类型为 textvarcharchar 等的可变长度字段的值,当值大到需要时,可以将其值存储在表中的 TOAST 表中。元组在表堆中只能保留一个 18 字节的指针。对于较短的可变长度字段,可以使用 4 字节或 1 字节字段头并将值存储在堆元组中。

已从表中删除的列也有助于最大元组数限制。此外,虽然新创建元组的已删列值在元组的位图中被内部标记为 null,但位图也占用空间。