继续我提出的一个问题,将高容量和高访问量的表移至单独的数据库是否是一个好主意?,我正在寻找可用于PostgreSQL中数据库归档的不同技术/解决方案。
我能想到的解决方案很少:
- 表分区
- 单独的表空间和/或架构
- 将存档的记录/表移动到其他硬盘
任何其他建议/指针/解决方案都将受到欢迎和赞赏。
注意:我们在CentOS5.2上运行PostgreSQL v9.1.3
继续我提出的一个问题,将高容量和高访问量的表移至单独的数据库是否是一个好主意?,我正在寻找可用于PostgreSQL中数据库归档的不同技术/解决方案。
我能想到的解决方案很少:
任何其他建议/指针/解决方案都将受到欢迎和赞赏。
注意:我们在CentOS5.2上运行PostgreSQL v9.1.3
Answers:
我对归档的建议:
archive_tablespace
(如果需要,可以在存档中分离硬件)创建表。例如,我们要存档表帖子。
create table posts_all ( LIKE public.posts) ;
create table posts_archive () inherits ( public.posts_all) ;
alter table public.posts inherits ( public.posts_all ) ;
之后,我们将有2个新表:public.posts_all(具有与post中相同的列)以查询所有帖子(归档和生产)和public.posts_archive以查询所有归档帖子。Public.posts将继承自posts_all。
除非您将在posts_all上编写触发器以将插入重定向到posts表,否则插入应该以旧的方式(到表public.posts)去。如果进行分区,它将更加复杂。在正常工作的应用程序中以及在进行旧数据迁移之前,您无需更改应用程序代码中的任何内容即可使用此方法。
创建模式存档以进行逻辑分离。我的建议是,如果可能的话,请按一定时间段(年或月)将归档数据分开(archive_2005)。
在archive_year模式中创建存档表
create table archive_2005.posts (
check(record_date >= '2005-01-01 00:00:00'::timestamp
and record_date < '2006-01-01 00:00:00'::timestamp)
) inherits (posts_archive) tablespace archive_tablesapce;
之后,您将在schema archive_2005中有新的表发布,并且postgresql Planer将知道那里的数据仅在设计的时间段内。如果您在另一个时间段查询,postgresql将不在此表中搜索。
创建函数/过程/触发器以将数据移至存档表。
如果实施:
archive_tablespace
或将其更改为从posts_archive继承(我没有对此进行测试)这是通用技术,您应该根据需要进行调整。有什么建议可以改善吗?
进一步阅读:PostgreSQL继承,分区
posts
,posts-all
或posts-archive
),存在只是为了代表整个数据集?
Create tables (table posts example):
。您能解释一下总共有多少个表以及表之间的继承如何相互关联的特定步骤吗?