The comparisons for partitions are lower <= value < upper, so this works fine:
> xof=# create table t (pk bigint not null, ts timestamp not null) partition by > range (ts); > CREATE TABLE > xof=# create table t1 partition of t for values from > ('2024-01-01'::timestamp) to ('2024-02-01'::timestamp); > CREATE TABLE > xof=# create table t2 partition of t for values from > ('2024-02-01'::timestamp) to ('2024-03-01'::timestamp); > CREATE TABLE In both cases, it's unambiguous that a record with ('2024-02-01'::timestamp) would go into t2. > On Sep 10, 2024, at 15:23, Brent Wood <brent.w...@niwa.co.nz> wrote: > > I'm not sure of the less than vs less than or equals in this one, so it may > be my ignorance... but which partition gets records with a date of > '24-02-01", it seems that without a more explicit definition there is > ambiguity on dates at the partition limits when those dates are common to > multiple partitions? > > To avoid this shouldn't the definition be: > >> xof=# create table t (pk bigint not null, ts timestamp not null) partition >> by range (ts, pk); >> CREATE TABLE >> xof=# create table t1 partition of t for values from >> ('2024-01-01'::timestamp, minvalue) to ('2024-01-31'::timestamp, maxvalue); >> CREATE TABLE >> xof=# create table t2 partition of t for values from >> ('2024-02-01'::timestamp, minvalue) to ('2024-02-29'::timestamp, maxvalue); > > > Brent Wood > > Principal Technician, Fisheries > NIWA > DDI: +64 (4) 3860529 > From: Christophe Pettus <x...@thebuild.com> > Sent: Wednesday, September 11, 2024 10:13 > To: pgsql-general <pgsql-gene...@postgresql.org> > Subject: Overlapping values (?) in multi-column partitioned tables > Hi, > > I am clearly not understanding something. Consider: > >> xof=# create table t (pk bigint not null, ts timestamp not null) partition >> by range (ts, pk); >> CREATE TABLE >> xof=# create table t1 partition of t for values from >> ('2024-01-01'::timestamp, minvalue) to ('2024-02-01'::timestamp, maxvalue); >> CREATE TABLE >> xof=# create table t2 partition of t for values from >> ('2024-02-01'::timestamp, minvalue) to ('2024-03-01'::timestamp, maxvalue); >> ERROR: partition "t2" would overlap partition "t1" >> LINE 1: ...on of t for values from ('2024-02-01'::timestamp, minvalue) ... >> ^ >> xof=# > > In what way do those partitions overlap? In other words, there does not > appear to be a value of (ts, pk) having '2024-01-01'::timestamp <= ts < > '2024-03-01'::timestamp for any pk where it would be ambiguous which > partition that row would go into. (I'm imagining it on a cartesian plane, > and there isn't any overlap between the rectangles those partition boundaries > define.) > > I'm obviously missing something, but... what? Thank you! > > Brent Wood > Principal Technician - GIS and Spatial Data Management > Programme Leader - Environmental Information Delivery > +64-4-386-0529 > > National Institute of Water & Atmospheric Research Ltd (NIWA) > 301 Evans Bay Parade Hataitai Wellington New Zealand > Connect with NIWA: niwa.co.nz Facebook LinkedIn Twitter Instagram YouTubeTo > ensure compliance with legal requirements and to maintain cyber security > standards, NIWA's IT systems are subject to ongoing monitoring, activity > logging and auditing. This monitoring and auditing service may be provided by > third parties. Such third parties can access information transmitted to, > processed by and stored on NIWA's IT systems. > Note: This email is intended solely for the use of the addressee and may > contain information that is confidential or subject to legal professional > privilege. If you receive this email in error please immediately notify the > sender and delete the email.