Re: Incorrect number of rows inserted into partitioned table

From: Роман Осипов <osipovromanvladimirovich(at)gmail(dot)com>
To: Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com>
Cc: pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: Incorrect number of rows inserted into partitioned table
Date: 2023-04-10 21:58:15
Message-ID: CAAqk124SXFPhY-6En1YYq1EB3=QYk8bUBj6XT4HBDjis8fBSVg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Good afternoon David.

Thanks for the quick response.
I know about declarative partitioning and just use it. But unfortunately
that doesn't fix the problem.

In this case, the problem is not how many returns *insert *with *limit*.
And the fact that the tables always have a different number of rows. For
example:

1) truncate table book_inherit_test;

2) insert into book_inherit_test select * from book_test limit 1000000;

3) select count(*) from book_inherit_test;

4) select count(*) from only book_inherit_test;

5) select count(*) from only book_inherit_test_before_1950;
Attempt 1

1) Updated Rows 0

2) Updated Rows 612528

3) count(*) 1001227

4) count(*) 612528

5) count(*) 388699

(4)+(5)=(3)

612528 + 388699 = 1001227 That's right, but expected 1000000

Attempt 2

1) Updated Rows 0

2) Updated Rows 612602

3) count(*) 1001320

4) count(*) 612602

5) count(*) 388718

(4)+(5)=(3)

612602 + 388718 = 1001320 That's right, but expected 1000000

вт, 11 апр. 2023 г. в 00:39, Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com>:

> On 4/10/23 20:42, Роман Осипов wrote:
> > Good afternoon
> >
> > When reloading data from a simple table into a partitioned (through
> > inheritance) using a query like:*insert into [new_partition_table]
> > select * from [old_table] limit xxxxxxx*;
> >
> > There is an insertion not of the amount specified in *limit*,, but a
> > little more or less than it.
> >
>
> Which version? I did try this on master, and I can't reproduce it - the
> count at the end returns the correct value (1M).
>
> The rule affects the insert status, which looks e.g. like this:
>
> INSERT 0 611532
>
> instead of 1M, but that's expected because of the rule, I think.
>
> FWIW I wonder why you use rules, it's rather tricky to get that right,
> which is why the usual recommendation is not to use this if there's an
> alternative way to do stuff (which for partitioning there is).
>
>
> regards
>
> --
> Tomas Vondra
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2023-04-10 22:04:39 Re: Incorrect number of rows inserted into partitioned table
Previous Message Tomas Vondra 2023-04-10 21:39:07 Re: Incorrect number of rows inserted into partitioned table