Syntax for partitioning

Поиск
Список
Период
Сортировка
От Itagaki Takahiro
Тема Syntax for partitioning
Дата
Msg-id 20091029111531.96CD.52131E4D@oss.ntt.co.jp
обсуждение исходный текст
Ответы Re: Syntax for partitioning  (Pavel Stehule <pavel.stehule@gmail.com>)
Re: Syntax for partitioning  (Nikhil Sontakke <nikhil.sontakke@enterprisedb.com>)
Re: Syntax for partitioning  (Grzegorz Jaskiewicz <gj@pointblue.com.pl>)
Re: Syntax for partitioning  (Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>)
Re: Syntax for partitioning  (Peter Eisentraut <peter_e@gmx.net>)
Re: Syntax for partitioning  (Devrim GÜNDÜZ <devrim@gunduz.org>)
Re: Syntax for partitioning  (Simon Riggs <simon@2ndQuadrant.com>)
Список pgsql-hackers
I'd like to improve partitioning feature in 8.5.
Kedar-san's previous work is wonderful, but I cannot see any updated patch.
http://archives.postgresql.org/message-id/bd8134a40906080702s96c90a9q3bbb581b9bd0d5d7@mail.gmail.com

So, I'll take over the work if there are no ones to do it.
I'm thinking to add syntax support first. Table partitioning was
proposed many times, but it is still not applied into core.
The reason is it is too difficult to make perfect partitioning
feature at once. I think syntax support is a good start.

First, I will add syntax for CREATE TABLE, ALTER TABLE ADD/DROP PARTITION.
The syntax is borrowed from from Oracle and MySQL. Their characteristics
are using "LESS THAN" in range partitioning. The keyword "PARTITION" is
added to the full-reserved keyword list to support ADD/DROP PARTITION.

Those syntax is merely a syntax sugar for INHERITS with CHECK. Declarations
are translated into CHECK constraints. I have a plan to adjust pg_dump to
dump definitions of partitioning in the correct format, but the actual
implementation will be still based on constraint exclusion. In addition,
hash partitioning is not implemented; syntax is parsed but "not implemented"
error are raised for now.

Here is syntax I propose:
----
ALTER TABLE table_name ADD PARTITION name ...;
ALTER TABLE table_name DROP PARTITION [IF EXISTS] name [CASCADE | RESTRICT];

Range partitioning: CREATE TABLE table_name ( columns )   PARTITION BY RANGE ( a_expr )   (     PARTITION name VALUES
LESSTHAN [(] const [)],     PARTITION name VALUES LESS THAN [(] MAXVALUE [)] -- overflow partition   );
 

List partitioning: CREATE TABLE table_name ( columns )   PARTITION BY LIST ( a_expr )   (     PARTITION name VALUES
[IN]( const [, ...] ),     PARTITION name VALUES [IN] [(] DEFAULT [)]       -- overflow partition   );
 

Hash partitioning: CREATE TABLE table_name ( columns )   PARTITION BY HASH ( a_expr )   PARTITIONS num_partitions;
 CREATE TABLE table_name ( columns )   PARTITION BY HASH ( a_expr )   (     PARTITION name,     ...   );

Note: * Each partition can have optional WITH (...) and TABLESPACE clauses. * '(' and ')' are optional to support both
Oracleand MySQL syntax.
 
----

Comments welcome.

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: WIP: push AFTER-trigger execution into ModifyTable node
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: Syntax for partitioning