我计划使用citus来存储系统日志,最多不超过几天,这些日志应该是deleted.Citus柱状存储,在我阅读这之前,它们看起来就像一个完美的数据库,其中提到的任何删除都可以在列上执行。那么,我的问题是,在柱状商店中是否有实现删除的替代方法?
发布于 2022-10-21 14:12:45
可以将表访问方法临时切换到行模式以删除或更新表。然后,在操作之后,您可以切换回柱状访问方法。下面是一个示例用法:
-- create table and fill with generated data until 20 days before
CREATE TABLE logs (
id int not null,
log_date timestamp
);
-- set access method columnar
SELECT alter_table_set_access_method('logs', 'columnar');
-- fill the table with generated data which goes until 20 days before
INSERT INTO logs select i, now() - interval '1 hour' * i from generate_series(1,480) i;
-- now you want to drop last 10 days data, you can switch to row access method temporarily to execute delete or updates
SELECT alter_table_set_access_method('logs', 'heap');
DELETE FROM logs WHERE log_date < (now() - interval '10 days');
-- switch back to columnar access method
SELECT alter_table_set_access_method('logs', 'columnar');--日志归档的一个更好的替代方案:我们正在创建一个完整的源表副本,以便有一个具有新访问方法的表。桌子越大,消耗的资源就越多。更好的选择是,如果可以将日志表划分为几天或几个月的分区,则只需更改单个分区的访问方法。注意,您应该为每个分区分别设置access方法。列目前不支持直接设置分区表的访问方法。
了解更多:
https://stackoverflow.com/questions/74152659
复制相似问题