1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-24 10:47:04 +03:00

Add INSERT ON CONFLICT test on partitioned tables with transition table

This case was uncovered by existing tests, so breakage went undetected.
Make sure it remains stable.

Extracted from a larger patch by
Author: David Rowley
Reviewed-by: Amit Langote
Discussion: https://postgr.es/m/CAKJS1f-aGCJ5H7_hiSs5PhWs6Obmj+vGARjGymqH1=o5PcrNnQ@mail.gmail.com
This commit is contained in:
Alvaro Herrera 2018-11-13 18:12:39 -03:00
parent ecfd557956
commit 9079fe60b2
2 changed files with 48 additions and 0 deletions

View File

@ -904,4 +904,26 @@ select * from parted_conflict order by a;
50 | cincuenta | 2
(1 row)
-- test with statement level triggers
create or replace function parted_conflict_update_func() returns trigger as $$
declare
r record;
begin
for r in select * from inserted loop
raise notice 'a = %, b = %, c = %', r.a, r.b, r.c;
end loop;
return new;
end;
$$ language plpgsql;
create trigger parted_conflict_update
after update on parted_conflict
referencing new table as inserted
for each statement
execute procedure parted_conflict_update_func();
truncate parted_conflict;
insert into parted_conflict values (0, 'cero', 1);
insert into parted_conflict values(0, 'cero', 1)
on conflict (a,b) do update set c = parted_conflict.c + 1;
NOTICE: a = 0, b = cero, c = 2
drop table parted_conflict;
drop function parted_conflict_update_func();

View File

@ -576,4 +576,30 @@ insert into parted_conflict values (50, 'cincuenta', 2)
-- should see (50, 'cincuenta', 2)
select * from parted_conflict order by a;
-- test with statement level triggers
create or replace function parted_conflict_update_func() returns trigger as $$
declare
r record;
begin
for r in select * from inserted loop
raise notice 'a = %, b = %, c = %', r.a, r.b, r.c;
end loop;
return new;
end;
$$ language plpgsql;
create trigger parted_conflict_update
after update on parted_conflict
referencing new table as inserted
for each statement
execute procedure parted_conflict_update_func();
truncate parted_conflict;
insert into parted_conflict values (0, 'cero', 1);
insert into parted_conflict values(0, 'cero', 1)
on conflict (a,b) do update set c = parted_conflict.c + 1;
drop table parted_conflict;
drop function parted_conflict_update_func();