PostgreSQL的分区实际上是一堆使用检查约束来验证每个分区中只有正确数据的视图。创建一个父表和其他分区创建从主继承:
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
);
CREATE TABLE measurement_y2006m02 () INHERITS (measurement);
CREATE TABLE measurement_y2006m03 () INHERITS (measurement);
...
CREATE TABLE measurement_y2007m11 () INHERITS (measurement);
CREATE TABLE measurement_y2007m12 () INHERITS (measurement);
CREATE TABLE measurement_y2008m01 () INHERITS (measurement);
很显然,我省略了一些代码,但你可以在PostgreSQL table partitioning检查出的文档。分区最重要的部分是确保您构建自动脚本以创建未来的新分区以及合并旧分区。
在操作上,当PostgreSQL运行你的查询时,它看起来好像是SELECT * FROM measurement WHERE logdate BETWEEN '2006-02-13' AND '2006-02-22';
优化器会出现“AH HA!我知道这里有什么,有一个分区,我只要看看表measurement_y2006m02
并撤回相应的数据。
随着年龄的增长数据从主分区,你可以只删除旧表,否则将它们合并到一个归档分区。这些工作大部分都可以通过脚本实现自动化 - 您真正需要做的就是编写一次脚本并对其进行测试。一个好处是,旧数据往往不会改变 - 许多分区不需要索引维护或抽真空。
请记住,分区主要是数据管理解决方案,可能无法提供您需要的性能优势。调整查询,应用索引以及检查PostgreSQL配置(postgresql.conf,存储配置和操作系统配置)可能会导致更高的性能提升,从而对数据进行分区。
你能详细说一下吗? – EmirZ