Automating Partitions in PostgreSQL - Query on syntax - Mailing list pgsql-hackers

From Kedar Potdar
Subject Automating Partitions in PostgreSQL - Query on syntax
Date
Msg-id bd8134a40904210450r18b97d9eudc6a2d57e655dfda@mail.gmail.com
Whole thread Raw
Responses Re: Automating Partitions in PostgreSQL - Query on syntax  (Greg Stark <stark@enterprisedb.com>)
Re: Automating Partitions in PostgreSQL - Query on syntax  ("Dickson S. Guedes" <listas@guedesoft.net>)
Re: Automating Partitions in PostgreSQL - Query on syntax  (Grzegorz Jaskiewicz <gj@pointblue.com.pl>)
List pgsql-hackers
<p class="MsoNormal">Hi ,<p class="MsoNormal"> <p class="MsoNormal">We are working on a <a
href="http://archives.postgresql.org/pgsql-hackers/2009-03/msg00897.php">patch</a>to automate partitioning<span
style="color:navy;"> </span>in PostgreSQL.<span style="font-size: 10pt; font-family: "Arial","sans-serif"; color:
navy;"><br/></span><p class="MsoNormal"> <p class="MsoNormal">For Range partitions, we have proposed the syntax which
isas follows –<p class="MsoNormal"> <p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family:
"CourierNew";">CREATE TABLE emp (</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family:
"CourierNew";">    emp_id          int not null primary key,</span></b><p class="MsoNormal" style=""><b><span
style="font-size:10pt; font-family: "Courier New";">    designation     text not null,</span></b><p class="MsoNormal"
style=""><b><spanstyle="font-size: 10pt; font-family: "Courier New";">    location        varchar(50) not
null,</span></b><pclass="MsoNormal" style=""><b><span style="font-size: 10pt; font-family: "Courier New";">   
jdate          date not null,</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family:
"CourierNew";">    ctc             float not null</span></b><p class="MsoNormal" style=""><b><span style="font-size:
10pt;font-family: "Courier New";"> </span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt;
font-family:"Courier New";">)</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family:
"CourierNew";">PARTITION BY RANGE (emp_id)</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt;
font-family:"Courier New";">(</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family:
"CourierNew";">emp_500 (START 1 END 500),</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt;
font-family:"Courier New";">emp_1500 (START 500 END 1500),</span></b><p class="MsoNormal" style=""><b><span
style="font-size:10pt; font-family: "Courier New";">emp_4000 (START 1520 END 4000)</span></b><p
class="MsoNormal"><b><spanstyle="font-size: 10pt; font-family: "Courier New";">);</span></b><p class="MsoNormal"> <p
class="MsoNormal">Asobserved in this syntax, user needs to specify explicitly, the min and max values of a range for a
givenpartition. <p class="MsoNormal">With this design, partition ranges are inherently allowed to be fragmented and
non-contiguous.As ‘gaps’ are allowed <p class="MsoNormal">in the ranges, we’re also supporting an ‘overflow’ partition,
sothat any row, which does not satisfy constraints of any <p class="MsoNormal">existing partitions, does not stall a
bigUPDATE operation and such rows are preserved.(in overflow table)<p class="MsoNormal"> <p class="MsoNormal">However,
Oracleuses user-friendly syntax but make<span style="color: navy;">s</span> it compulsion that partition ranges *have*
tobe contiguous. <p class="MsoNormal"> <p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family:
"CourierNew";">PARTITION BY RANGE (emp_id)</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt;
font-family:"Courier New";">(</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family:
"CourierNew";">Partition emp_500  values less than (500),</span></b><p class="MsoNormal" style=""><b><span
style="font-size:10pt; font-family: "Courier New";">Partition emp_1500 values less than (1500),</span></b><p
class="MsoNormal"style=""><b><span style="font-size: 10pt; font-family: "Courier New";">Partition emp_4000 values less
than(4000),</span></b><p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family: "Courier
New";">Partitionemp_max  values less than (maxvalue)</span></b><p class="MsoNormal"><b><span style="font-size: 10pt;
font-family:"Courier New";">);</span></b><p class="MsoNormal"> <p class="MsoNormal">As it does not allow fragmented
ranges,it automatically removes the need for an ‘overflow’ partition. <span style="color: navy;"> </span><p
class="MsoNormal"> <pclass="MsoNormal">The syntax proposed by us is more flexible and would handle both the cases of
rangeswith gaps or ranges without gaps. <p class="MsoNormal"> <p class="MsoNormal">I want to seek general opinion from
thecommunity on preferences between user-friendly ‘Oracle’ syntax, and a more generic syntax that allows ‘gaps’ in
partitionranges?<span style="font-size: 10pt; font-family: "Arial","sans-serif"; color: navy;"><br /></span><p
class="MsoNormal"> <pclass="MsoNormal">Regards,<p class="MsoNormal">--<p class="MsoNormal">Kedar<br /> 

pgsql-hackers by date:

Previous
From: Fujii Masao
Date:
Subject: Re: New trigger option of pg_standby
Next
From: Guillaume Smet
Date:
Subject: Re: 8.4 semi-join slows down query performance (EXISTS)