我想知道这是否可能(如果可能的话,如何去做)
根据日期字段为空或不为空对 postgres 9.1 中的表进行分区。
如此有效,我有一张桌子,它变得非常大,我在那里有一个“delete_on”日期,当项目被删除时,它们只会被标记为已删除。
这将是归档它们并保持活动表较小的理想选择。
我在想一个表分区,只是有类似的东西
活动(delete_on = NULL)
存档(deleted_on!= NULL)
然后,当我对记录进行更新并将其设置为删除时,它将被写入存档表。
我可以通过创建两个单独的表并编写代码来复制数据来手动完成,但如果我可以直接将它放在数据库中,我会喜欢它。
有任何想法吗?
编辑:
主表
CREATE TABLE my_table (
id int not null,
deleted date not null,
number1 int,
number2 int
);
分区
CREATE TABLE my_table_active (
CHECK (deleted IS NULL)
) INHERITS (my_table);
CREATE TABLE my_table_archive (
CHECK (deleted IS NOT NULL)
) INHERITS (my_table);
触发功能
CREATE OR REPLACE FUNCTION my_table_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF ( NEW.deleted IS NULL ) THEN
INSERT INTO my_table_active VALUES (NEW.*);
ELSE
INSERT INTO my_table_archive VALUES (NEW.*);
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
创建触发器
CREATE TRIGGER insert_my_table_trigger
BEFORE INSERT ON my_table
FOR EACH ROW EXECUTE PROCEDURE my_table_insert_trigger();
(我从 Postgres 文档中获取了上述内容)
如果您正在对活动表中已经存在的字段进行更新,这将如何工作?
所以我在活动表中有一条记录(即删除为空),然后我将该记录设置为删除(通过给它一个日期戳)。那时我希望它移动到存档表。