The*_*Fox 2 postgresql postgresql-9.1
我想知道它是否可能(以及如果它可以如何去做)
基于日期字段为空或非空来对postgres 9.1中的表进行分区.
所以有效地,我有一个表,它变得非常大,我有一个"delete_on"日期,当项目被删除时,他们只是被标记为已删除.
这对于将它们存档并使活动表保持较小是理想的.
我在考虑一个表分区,只是有类似的东西
active(delete_on = NULL)
archive(deleted_on!= NULL)
然后当我对记录进行更新并将其设置为已删除时,它将被写入存档表.
我可以通过创建两个单独的表并编写代码来复制数据来手动完成,但是如果我可以直接将它放在数据库上,我会喜欢它.
有任何想法吗?
编辑:
主表
CREATE TABLE my_table (
id int not null,
deleted date not null,
number1 int,
number2 int
);
Run Code Online (Sandbox Code Playgroud)
分区
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);
Run Code Online (Sandbox Code Playgroud)
触发功能
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;
Run Code Online (Sandbox Code Playgroud)
创建触发器
CREATE TRIGGER insert_my_table_trigger
BEFORE INSERT ON my_table
FOR EACH ROW EXECUTE PROCEDURE my_table_insert_trigger();
Run Code Online (Sandbox Code Playgroud)
(我从Postgres文档中采取了上述内容)
如果您对已存在于活动表中的字段进行更新,这将如何工作?
所以我在活动表中有一条记录(即删除为空)然后我将该记录设置为删除(通过给它一个日期戳).那时我希望它移动到归档表.
| 归档时间: |
|
| 查看次数: |
1605 次 |
| 最近记录: |