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 字节,因此不适合放在堆页中。类型为 text 、 varchar 和 char 等的可变长度字段的值,当值大到需要时,可以将其值存储在表中的 TOAST 表中。元组在表堆中只能保留一个 18 字节的指针。对于较短的可变长度字段,可以使用 4 字节或 1 字节字段头并将值存储在堆元组中。
已从表中删除的列也有助于最大元组数限制。此外,虽然新创建元组的已删列值在元组的位图中被内部标记为 null,但位图也占用空间。