【问题标题】:Can’t delete master table data postgresql无法删除主表数据postgresql
【发布时间】:2020-10-13 13:40:36
【问题描述】:

我有一个现有的数据表。

create table work_data(
   id  integer not null,
   work_time timestamp(3) without time zone not null,
   message character varying(64),
   primary key (id)
);

我对表进行了分区。

create table w_work01(
   constraint pk_01 primary key (id),
   constraint ck_01
      check (work_time >= '2019/07/01'::date and work_time < '2019/07/02'::date)
) inherits (work_data);

create index idx_01 on w_work01 (work_time);

并将work_data中的数据插入w_work01。

insert into w_work01
select * from work_data
where work_time >= '2019/07/01'::date and work_time < '2019/07/02'::date)

然后删除分区表。

DROP TABLE w_work01;

已删除分区表。 但是主表中的数据保持不变。 于是我搜了一下,找到了下面的查询。

ALTER TABLE master_table DROP PARTITION partitioned_table;

但是当我使用这个时,出现了错误。

partitioned_table 处或附近的语法错误

我该如何解决?

【问题讨论】:

  • 使用 partition_name 代替 partitioned_table,您可以通过以下命令找到它:SELECT partition_name, server_name, high_value FROM ALL_TAB_PARTITIONS;
  • @ROHITKHURANA 这不是关于甲骨文的。水晶,请显示您执行的所有语句:您如何创建表,如何删除分区以及如何发现数据仍然存在。
  • @Laurenz Albe 我编辑了我的问题。
  • @ROHIT KHURANA 感谢您的帮助。我发现并使用了它。但是出现了语法错误之类的错误!

标签: postgresql


【解决方案1】:

您从未删除过work_data 中的数据,因此它仍然存在也就不足为奇了。您创建了一个表,填充它并删除它,这没有任何净效果。

此外,您使用了表继承,而不是分区。

要对现有表进行分区,可能的方法是:

  • 创建一个类似work_data 的表,但使用

    PARTITION BY RANGE (work_time)
    
  • 为所需范围创建分区

  • 将数据复制到分区表中,就像您在问题中所做的那样

  • 删除原始表格

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多