postgresql10新增加分区表PARTITION BY

postgresql10以前版本的分区表是通过继承追加制约实现的,postgresql10新追加PARTITION BY可以直接定义list和range分区,检证如下:

postgres=# CREATE TABLE test(id integer,name text) PARTITION BY LIST (id);

postgres=# CREATE TABLE test_p1 PARTITION OF test FOR VALUES IN (10);

postgres=# CREATE TABLE test_p20 PARTITION OF test FOR VALUES IN (20);

postgres=# \d+ test;
                                    Table "public.test"
 Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description
--------+---------+-----------+----------+---------+----------+--------------+-------------
 id     | integer |           |          |         | plain    |              |
 name   | text    |           |          |         | extended |              |
Partition key: LIST (id)
Partitions: test_p1 FOR VALUES IN (10),
            test_p20 FOR VALUES IN (20)
 

postgres=# \d+ test_p1;
                                  Table "public.test_p1"
 Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description
--------+---------+-----------+----------+---------+----------+--------------+-------------
 id     | integer |           |          |         | plain    |              |
 name   | text    |           |          |         | extended |              |
Partition of: test FOR VALUES IN (10)
Partition constraint: ((id IS NOT NULL) AND (id = ANY (ARRAY[10])))

postgres=#

 

postgres=# insert into test values (10,'aaaa');
INSERT 0 1
postgres=# insert into test values (20,'bbbb');
INSERT 0 1
postgres=# insert into test values (30,'cccc');
ERROR:  no partition of relation "test" found for row
DETAIL:  Partition key of the failing row contains (id) = (30).
postgres=#

postgres=# select * from test;
 id | name
----+------
 10 | aaaa
 20 | bbbb
(2 rows)

postgres=# select * from test_p1;
 id | name
----+------
 10 | aaaa
(1 row)

postgres=# select * from test_p20;
 id | name
----+------
 20 | bbbb
(1 row)

postgres=#

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值