为什么postgresql最大的单表只能是32TB?
这需要从数据文件来说起。
在postgresql中,一张表对应多个数据文件。
数据文件中存储的是page,每一个page都有一个单独的编号,因为pg寻址空间采用的是32位,也就是2^32=4294967296,也就是一组数据文件中最多存放这些page。
按照默认的block_size设置为8K,可以计算出来一组数据文件最大的大小是32T。
这里,注意我说的是一组,而不是一个。
一组说的是单张表使用的一批数据文件。
默认的,数据文件大小最大被设置为1G。
这样理论上单张表可以产生多达32000个数据文件。
而且,每组数据文件的页编号是连续的。
也就是,如果一组中上一个数据文件的最后一页编号是0x14159265,那么下一个数据文件第一个页编号是0x14159266而不是0x00000000。
这样就明白了为什么最大的单表只能是32TB。
如果,使用32K的block_size,那么可存放的最大数据量就是4倍的32T,也就是128T了。