我是Postgresql的新手,不知道如何管理分区表。
我有基于日期的分区表。在插入数据之前,触发器检查日期并放入相应的子表中。
例如:
11.15.2014 -插入到名为11-15-2014_log的表中。
11.16.2014 -插入到名为11-16-2014_log的表中。
现在我想创建一个函数来删除旧的子表,例如,超过90天的表。我应该根据表名找到并删除子表(因为它包含创建日期),还是应该在主表中找到超过90天的记录??
任何建议或提示都将不胜感激。谢谢。
发布于 2014-11-21 16:22:53
我将只从主表中删除较旧的记录,如下所示:
DELETE FROM master_table WHERE creation_date < 'today' - INTERVAL '90 days';但是,我的建议是将此查询安排在服务器最空闲的时间运行,比如5:00am
发布于 2019-04-07 22:56:29
关于删除分区,下面的示例删除了sales表的一个分区。使用以下命令创建sales表:
CREATE TABLE sales
(
dept_no number,
part_no varchar2,
country varchar2(20),
date date,
amount number
)
PARTITION BY LIST(country)
(
PARTITION europe VALUES('FRANCE', 'ITALY'),
PARTITION asia VALUES('INDIA', 'PAKISTAN'),
PARTITION americas VALUES('US', 'CANADA')
);查询ALL_TAB_PARTITIONS视图将显示分区名称:
acctg=# SELECT partition_name, server_name, high_value FROM ALL_TAB_PARTITIONS;
partition_name | server_name | high_value
----------------+-------------+---------------------
europe | seattle | 'FRANCE', 'ITALY'
asia | chicago | 'INDIA', 'PAKISTAN'
americas | boston | 'US', 'CANADA'
(3 rows)要从sales表中删除americas分区,请调用以下命令:
ALTER TABLE sales DROP PARTITION americas;查询ALL_TAB_PARTITIONS视图表明分区已被成功删除:
acctg=# SELECT partition_name, server_name, high_value FROM ALL_TAB_PARTITIONS;
partition_name | high_value
----------------+---------------------
asia | 'INDIA', 'PAKISTAN'
europe | 'FRANCE', 'ITALY'
(2 rows)https://stackoverflow.com/questions/27053499
复制相似问题