From: | Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | Venkata B Nagothi <nag1010(at)gmail(dot)com>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Range Partitioning behaviour - query |
Date: | 2017-02-23 04:14:38 |
Message-ID: | 5cdeb7e2-44ba-2b35-81b2-25d8dad82f92@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
On 2017/02/23 11:55, Venkata B Nagothi wrote:
> Hi Hackers,
>
> I have noticed the following behaviour in range partitioning which i felt
> is not quite correct (i missed reporting this) -
>
> I have tested by creating a date ranged partition.
>
> I created the following table.
>
> db03=# CREATE TABLE orders (
> o_orderkey INTEGER,
> o_custkey INTEGER,
> o_orderstatus CHAR(1),
> o_totalprice REAL,
> o_orderdate DATE,
> o_orderpriority CHAR(15),
> o_clerk CHAR(15),
> o_shippriority INTEGER,
> o_comment VARCHAR(79)) partition by range (o_orderdate);
> CREATE TABLE
>
> Created the following partitioned tables :
>
>
> db03=# CREATE TABLE orders_y1992
> PARTITION OF orders FOR VALUES FROM ('1992-01-01') TO ('1992-12-31');
> CREATE TABLE
>
> db03=# CREATE TABLE orders_y1993
> PARTITION OF orders FOR VALUES FROM ('1993-01-01') TO ('*1993-12-31'*);
> CREATE TABLE
>
> db03=# CREATE TABLE orders_y1994
> PARTITION OF orders FOR VALUES FROM ('1994-01-01') TO ('1994-12-31');
> CREATE TABLE
>
>
> The rows with the date "1993-12-31" gets rejected as shown below -
>
> db03=# copy orders from '/data/orders.csv' delimiter '|';
> ERROR: no partition of relation "orders" found for row
> DETAIL: Failing row contains (353, 8878, F, 273342, *1993-12-31*, 5-LOW
> , Clerk#000002241, 0, quiet ideas sleep. even instructions cajole
> slyly. silently spe).
> CONTEXT: COPY orders, line 89: "353|8878|F|273342|*1993-12-31*|5-LOW
> |Clerk#000002241|0| quiet ideas sleep. even instructions..."
>
> I would want the partition "orders_y1993" to accept all the rows with the
> date 1993-12-31.
[ ... ]
> Am i missing anything here ?
Upper bound of a range partition is an exclusive bound. A note was added
recently to the CREATE TABLE page to make this clear.
https://www.postgresql.org/docs/devel/static/sql-createtable.html
So do the following instead:
CREATE TABLE orders_y1993
PARTITION OF orders FOR VALUES FROM ('1993-01-01') TO ('1994-01-01');
Thanks,
Amit
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Langote | 2017-02-23 04:53:50 | Re: tablesample with partitioned tables |
Previous Message | Tom Lane | 2017-02-23 03:17:53 | Re: Make subquery alias optional in FROM clause |