0

我正在使用具有 Oracle 兼容性的 Enterprise Postgres。这是我在数据库中创建的表。

CREATE TABLE ALL_COUNTRIES 
(
  COUNTRY_ID                numeric(20,0),
  CHARACTERISTIC_NAME       character varying(255)
) 
PARTITION BY LIST (COUNTRY_ID) 
(
  PARTITION COUNTRY VALUES (484, 170, 76, 360, 710) TABLESPACE my_tbs
);

创建了两个表。一个是主表,另一个是分区表。

主表:

CREATE TABLE cdar_panel.all_countries
(
    country_id numeric(20,0),
    characteristic_name character varying(255) 
)

分区表:

CREATE TABLE cdar_panel.all_countries_country
(
    country_id ,
    characteristic_name ,
    CONSTRAINT all_countries_country_partition CHECK ((country_id = ANY (ARRAY['484'::numeric(20,0), '170'::numeric(20,0), '76'::numeric(20,0), '360'::numeric(20,0), '710'::numeric(20,0)])) AND country_id IS NOT NULL)
)
    INHERITS (cdar_panel.all_countries)

我要做的就是在该 CHECK 约束中再添加两个字段。我可以知道该怎么做吗?

它不允许我 1. 改变约束。2.不能删除“唯一分区”。3. 不能再增加一个约束,删除原来的。

请帮忙。

4

1 回答 1

4

下面的示例删除了 sales 表的一个分区。使用以下命令创建销售表:

CREATE TABLE sales
(
  dept_no     number,   
  part_no     varchar2,
  country     varchar2(20),
  date    date,
  amount  number
)
PARTITION BY LIST(country)
(
  PARTITION europe VALUES('FRANCE', 'ITALY'),
  PARTITION asia VALUES('INDIA', 'PAKISTAN'),
  PARTITION americas VALUES('US', 'CANADA')
);

查询 ALL_TAB_PARTITIONS 视图会显示分区名称:

acctg=# SELECT partition_name, server_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name | server_name |     high_value      
----------------+-------------+---------------------
 europe         | seattle     | 'FRANCE', 'ITALY'
 asia           | chicago     | 'INDIA', 'PAKISTAN'
 americas       | boston      | 'US', 'CANADA'
(3 rows)

要从 sales 表中删除 americas 分区,请调用以下命令:

ALTER TABLE sales DROP PARTITION americas;

查询 ALL_TAB_PARTITIONS 视图表明分区已成功删除:

acctg=# SELECT partition_name, server_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |     high_value      
----------------+---------------------
 asia           | 'INDIA', 'PAKISTAN'
 europe         | 'FRANCE', 'ITALY'
(2 rows)

我希望这将有助于删除分区:)

于 2019-04-07T14:51:36.200 回答