postgresql 删除Postgres citus中的列式存储替代方案

vq8itlhq  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(223)

我计划使用citus来存储系统日志,最多保存n天,然后将其删除。Citus列存储看起来是最适合此用途的数据库,直到我读到this,其中提到列上不能执行任何删除。所以我的问题是,是否有其他方法可以在列存储中实现删除?

rwqw0loc

rwqw0loc1#

您可以暂时将表访问方法切换为行模式以删除或更新表。然后在操作之后,您可以切换回列访问方法。示例用法如下:

-- 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');

更好的日志归档替代方案:我们正在创建源表的完整副本,以便拥有一个具有新访问方法的表。表越大,消耗的资源就越多。更好的选择是,如果可以将日志表划分为天或月的分区,您只需要更改单个分区的访问方法。请注意,您应该分别为每个分区设置访问方法。列式当前不支持直接设置分区表的访问方法。

了解更多信息:

相关问题