Weird behavior with update cascade on partitioned tables when moving data between partitions - Mailing list pgsql-general

From Márcio Antônio Sepp
Subject Weird behavior with update cascade on partitioned tables when moving data between partitions
Date
Msg-id 00d801d5dc49$e7225d50$b56717f0$@com.br
Whole thread Raw
List pgsql-general
Hi all,


Update cascade apparently doesn't work as well on partiotioned tables (when
moving data between different partitions).
Please, look at example below:


-- Create master partitioned table;
CREATE TABLE users (
    id             serial NOT NULL,
    username       text NOT NULL,
    password       text,
    primary key (id)
)
PARTITION BY RANGE ( id );

CREATE TABLE users_p0
    partition OF users
    FOR VALUES FROM (MINVALUE) TO (10);
CREATE TABLE users_p1
    partition OF users
    FOR VALUES FROM (10) TO (20);


-- Create detail table;
create table logs ( id serial not null,
    user_id integer not null,
    primary key (id),
    foreign key (user_id) references users (id) on update cascade
);


test=# insert into users (id, username, password) values (1, 'user',
'pass');
INSERT 0 1

test=# insert into logs (id, user_id) values (1, 1);
INSERT 0 1

-- update without changing partition
test=# update users set id = 8 where id = 1;
UPDATE 1

-- Lets see the log table
test=# select * from logs;
 id | user_id
----+---------
  1 |       8
(1 row)

-- update changing partition;
test=# update users set id = 12 where id = 8;
ERROR:  update or delete on table "users_p0" violates foreign key constraint
"logs_user_id_fkey1" on table "logs"
DETAIL:  Key (id)=(8) is still referenced from table "logs".


IF create the foreign key with option "on update cascade on delete cascade"
after running this command: update users set id = 12 where id = 8; the
Record on logs table Will be deleted.

Is this the expectec behavior?


--
Att
Márcio A. Sepp




pgsql-general by date:

Previous
From: Chris Charley
Date:
Subject: Re: Should I reinstall over current installation?
Next
From: Stephen Frost
Date:
Subject: Re: calculating the MD5 hash of role passwords in C