On partitioning, PKs and FKs

Started by Wiwwo Staffalmost 5 years ago8 messagesgeneral
Jump to latest
#1Wiwwo Staff
wiwwo@wiwwo.com

Hi!
I have a big table bigTable which I partitioned by hash on field columnX,
by creating bigTable_0, bigTable_1 etc.
Since I need a PK on bigTable.id, and table is not partitioned by id, and
columnX is not unique, i added PK on bigTable_0.id, bigTable_1.id etc. So
far, so good.

Now I have anotherTable, which has column bigTable_id referencing
bigTable.id.
Creating FK anotherTable__bigTable_FK on anotherTable.bigTable_id -you
guess :D- fails with

[42830] ERROR: there is no unique constraint matching given keys for
referenced table "bigTable"

Also creating a FK pointing to one of the hash tables bigTable_0.id,
bigTable_1.id etc. also fails with

ERROR: 23503: insert or update on table "anotherTable" violates foreign
key constraint "anotherTable__bigTable_FK".

Do I have a way out? :)

#2Ron
ronljohnsonjr@gmail.com
In reply to: Wiwwo Staff (#1)
Re: On partitioning, PKs and FKs

On 7/8/21 3:42 AM, Wiwwo Staff wrote:

Hi!
I have a big table bigTable which I partitioned by hash on field columnX,
by creating bigTable_0, bigTable_1etc.
Since I need a PK on bigTable.id, and table is not partitioned by id, and
columnX is not unique, i added PK on bigTable_0.id, bigTable_1.id etc. So
far, so good.

Now I have anotherTable, which has column bigTable_id referencing bigTable.id.
Creating FK anotherTable__bigTable_FK on anotherTable.bigTable_id-you
guess :D- fails with

[42830] ERROR: there is no unique constraint matching given keys for
referenced table "bigTable"

Also creating a FK pointing to one of the hash tables bigTable_0.id,
bigTable_1.id etc. also fails with

ERROR:  23503: insert or update on table "anotherTable" violates
foreign key constraint "anotherTable__bigTable_FK".

Do I have a way out? :)

https://www.postgresql.org/docs/12/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE

Section "5.11.2.3. Limitations" says, "Unique constraints (and hence primary
keys) on partitioned tables must include all the partition key columns."

Thus, the bigTable PK must be on id, columnX, (No, I don't like it either.)

--
Angular momentum makes the world go 'round.

#3Michael Lewis
mlewis@entrata.com
In reply to: Wiwwo Staff (#1)
Re: On partitioning, PKs and FKs

Why are you using hash partitioning?

#4Wiwwo Staff
wiwwo@wiwwo.com
In reply to: Michael Lewis (#3)
Re: On partitioning, PKs and FKs

Big big variability on partitioned column, which is filtered (where
condition) in (almost) all queries.

On Thu, 8 Jul 2021 at 14:23, Michael Lewis <mlewis@entrata.com> wrote:

Show quoted text

Why are you using hash partitioning?

#5Alban Hertroys
alban.hertroys@apollotyres.com
In reply to: Ron (#2)
Re: On partitioning, PKs and FKs

<font size=2 face="sans-serif">On 2021-07-08 13:30, Ron wrote:<br>&gt; Thus, the bigTable PK must be on id, columnX, (No, I don't like it <br>&gt; either.)<br><br>That's not entirely true. You can keep the PK on id if you additionally <br>create a unique constraint on (id, columnX).<br><br>That way, you can at least be certain that the uniqueness of the PK <br>remains in-tact, even if that is a surrogate key that has nothing to do <br>with the uniqueness of the actual records.<br><br>Regards,<br><br>Alban Hertroys.<br><br><br></font><p><span style="font-size:11pt;"><span style="font-family:century gothic"><strong>Alban Hertroys</strong></span></span><span style="font-size:9pt;"><span style="font-family:centurygothic"><strong>&nbsp;&nbsp;&nbsp;&nbsp; </strong></span></span><br />
<span style="font-size:10pt;"><span style="font-family:century gothic"></span></span><br />
&nbsp;</p>
<table style="border-collapse:collapse;" width="100%">
<tbody>
<tr>
<td bgcolor="white" style="border-style:none none none none;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;" width="13%">
<p><img alt="" src="data:image/png;base64,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" /></p>
</td>
<td bgcolor="white" style="border-style:none none none none;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;" width="71%">&nbsp;</td>
<td bgcolor="white" style="border-style:none none none none;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;" width="14%">&nbsp;</td>
</tr>
</tbody>
</table>
<p><span style="font-size:9pt;"><span style="font-family:century gothic">Apollo Tyres (NL) B.V.</span></span><br />
<span style="font-size:9pt;"><span style="font-family:century gothic">Ir. E.L.C. Schiffstraat 370, 7547 RD Enschede, The Netherlands<br />
+31 (0)53 4888 776<br />
<br />
alban.hertroys@apollotyres.com<br />
Chamber of Commerce number: 34223268</span></span></p>
<p><img alt="" src="data:image/png;base64,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" /></p>

<table width=100%><tr><td bgcolor=#ffffff><font color=#000000><pre>CIN: L25111KL1972PLC002449

Registered Office: Apollo Tyres Ltd, 3rd Floor, Areekal Mansion, Panampilly Nagar, Kochi 682036, India

Disclaimer:

The information contained in this e-mail is intended solely for the use of the individual or entity to whom it is addressed. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution or action in relation to the contents of this information is strictly prohibited and may be unlawful and request you to delete this message and any attachments and advise the sender by return e-mail. The confidentiality of this message is not warranted. Apollo Tyres and its subsidiaries rule out any and every liability resulting from this or any other electronic transmiss</pre></font></td></tr></table>

#6Ron
ronljohnsonjr@gmail.com
In reply to: Alban Hertroys (#5)
Re: On partitioning, PKs and FKs

The docs are pretty clear that all constraints must have the partition key
as part of the key, and PK is most certainly a constraint.

I welcome a counter-example.

On 7/8/21 10:23 AM, Alban Hertroys wrote:

On 2021-07-08 13:30, Ron wrote:

Thus, the bigTable PK must be on id, columnX, (No, I don't like it
either.)

That's not entirely true. You can keep the PK on id if you additionally
create a unique constraint on (id, columnX).

That way, you can at least be certain that the uniqueness of the PK
remains in-tact, even if that is a surrogate key that has nothing to do
with the uniqueness of the actual records.

Regards,

Alban Hertroys.

*Alban Hertroys***

Apollo Tyres (NL) B.V.
Ir. E.L.C. Schiffstraat 370, 7547 RD Enschede, The Netherlands
+31 (0)53 4888 776

alban.hertroys@apollotyres.com
Chamber of Commerce number: 34223268

CIN: L25111KL1972PLC002449

Registered Office: Apollo Tyres Ltd, 3rd Floor, Areekal Mansion, Panampilly Nagar, Kochi 682036, India

Disclaimer:

The information contained in this e-mail is intended solely for the use of the individual or entity to whom it is addressed. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution or action in relation to the contents of this information is strictly prohibited and may be unlawful and request you to delete this message and any attachments and advise the sender by return e-mail. The confidentiality of this message is not warranted. Apollo Tyres and its subsidiaries rule out any and every liability resulting from this or any other electronic transmiss

--
Angular momentum makes the world go 'round.

#7Wiwwo Staff
wiwwo@wiwwo.com
In reply to: Alban Hertroys (#5)
Re: On partitioning, PKs and FKs

On Thu, 8 Jul 2021 at 21:42, Alban Hertroys <alban.hertroys@apollotyres.com>
wrote:

On 2021-07-08 13:30, Ron wrote:

Thus, the bigTable PK must be on id, columnX, (No, I don't like it
either.)

That's not entirely true. You can keep the PK on id if you additionally
create a unique constraint on (id, columnX).

Uhm, but that means that i have to partition by id *and* columnX, which is
not what I really want...
=> create table bigtable
(
id numeric primary key,
columnX varchar(5),
constraint test_unique unique (id, columnX)
) partition by hash (columnx);
ERROR: 0A000: unique constraint on partitioned table must include all
partitioning columns
DETAIL: PRIMARY KEY constraint on table "bigtable" lacks column "columnx"
which is part of the partition key.
LOCATION: DefineIndex, indexcmds.c:946
Time: 146.254 ms

Also
) partition by hash (id, columnx);
ERROR: 0A000: unique constraint on partitioned table must include all
partitioning columns
DETAIL: PRIMARY KEY constraint on table "bigtable" lacks column "columnx"
which is part of the partition key.
LOCATION: DefineIndex, indexcmds.c:946
Time: 150.646 ms

and
) partition by hash (id);
CREATE TABLE
Time: 152.780 ms
which is not what I want...

#8David G. Johnston
david.g.johnston@gmail.com
In reply to: Wiwwo Staff (#7)
Re: On partitioning, PKs and FKs

On Thursday, July 8, 2021, Wiwwo Staff <wiwwo@wiwwo.com> wrote:

On Thu, 8 Jul 2021 at 21:42, Alban Hertroys <alban.hertroys@apollotyres.
com> wrote:

On 2021-07-08 13:30, Ron wrote:

Thus, the bigTable PK must be on id, columnX, (No, I don't like it
either.)

That's not entirely true. You can keep the PK on id if you additionally
create a unique constraint on (id, columnX).

Uhm, but that means that i have to partition by id *and* columnX, which
is not what I really want...

Those examples show that Alban’s comment that you can keep the PK on id is
incorrect.

All you can do is ensure that a given non-partition value is unique on any
given partition. You cannot setup a constraint that definitionally
requires the entire partition tree to coordinate and ensure none of the
partitions have duplicates among them.

David J.