Rows removed on child table when updating parent partitioned table.

Поиск
Список
Период
Сортировка
От Eduard Català
Тема Rows removed on child table when updating parent partitioned table.
Дата
Msg-id CAL54xNZsLwEM1XCk5yW9EqaRzsZYHuWsHQkA2L5MOSKXAwviCQ@mail.gmail.com
обсуждение исходный текст
Ответы Re: Rows removed on child table when updating parent partitioned table.  (Jonathan Strong <jonathanrstrong@gmail.com>)
Список pgsql-general
Hi developers,
We have a strange case where some rows are removed. I think it is a bug, but before notifying it I prefer to ask here where I am wrong.

Postgres 12
Given the following structure:

create table parent ( id serial, constraint parent_pkey primary key (id)) partition by range (id);
create table parent_10 partition of parent for values from (0) to (10);
create table parent_20 partition of parent for values from (11) to (20);


create table child (
 id serial,
 parent_id int constraint parent_id_fk references parent(id) on update cascade on delete cascade);

-- Notice the on update cascade on delete cascade.

insert into parent values(0);
insert into child values(1,0);

-- Here are the rows

postgres=# table parent;
 id
----
  0
(1 row)

postgres=# table child;
 id | parent_id
----+-----------
  1 |         0
(1 row)


-- Update the parent table id, with a value contained in the same partition
update parent set id = 5;

postgres=# table parent;
 id
----
  5
(1 row)

postgres=# table child;
 id | parent_id
----+-----------
  1 |         5
(1 row)


-- Update the parent table, with a value contained into other partition
update parent set id = 15;

postgres=# update parent set id = 15;
UPDATE 1
postgres=# table parent;
 id
----
 15
(1 row)

postgres=# table child;
 id | parent_id
----+-----------
(0 rows)

No error or warning was thrown. The rows in the child table were removed.
I think what has happened is: The update caused a DELETE in the table parent_10 (removing the rows from child table) and then the INSERT into parent_20. 

We've checked the documentation but didn't find something about this unexpected behaviour.

Trying without "on delete cascade" clause throws a "parent key not found error".

Thank you!




В списке pgsql-general по дате отправления:

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: pg_upgrade issue upgrading 10 -> 13
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: pg_upgrade issue upgrading 10 -> 13