On Tue, 19 Jan 2021 at 10:45, Amit Langote <amitlangot...@gmail.com> wrote: > On Tue, Jan 19, 2021 at 2:47 AM Zhihong Yu <z...@yugabyte.com> wrote: >> >> Hi, >> I was looking at this statement: >> >> insert into f select generate_series(1, 2000000, 2); >> >> Since certain generated values (the second half) are not in table p, >> wouldn't insertion for those values fail ? >> I tried a scaled down version (1000th) of your example: >> >> yugabyte=# insert into f select generate_series(1, 2000, 2); >> ERROR: insert or update on table "f" violates foreign key constraint >> "f_a_fkey" >> DETAIL: Key (a)=(1001) is not present in table "p". > > Sorry, a wrong copy-paste by me. Try this: > > create table p (a numeric primary key); > insert into p select generate_series(1, 2000000); > create table f (a bigint references p); > > -- Unpatched > insert into f select generate_series(1, 2000000, 2); > INSERT 0 1000000 > Time: 6527.652 ms (00:06.528) > > update f set a = a + 1; > UPDATE 1000000 > Time: 8108.310 ms (00:08.108) > > -- Patched: > insert into f select generate_series(1, 2000000, 2); > INSERT 0 1000000 > Time: 3312.193 ms (00:03.312) > > update f set a = a + 1; > UPDATE 1000000 > Time: 4292.807 ms (00:04.293) > >> For v1-0002-Avoid-using-SPI-for-some-RI-checks.patch : >> >> + * Collect partition key values from the unique key. >> >> At the end of the nested loop, should there be an assertion that >> partkey->partnatts partition key values have been found ? >> This can be done by using a counter (initialized to 0) which is incremented >> when a match is found by the inner loop. > > I've updated the patch to add the Assert. Thanks for taking a look.
After apply the v2 patches, here are some warnings: In file included from /home/japin/Codes/postgresql/Debug/../src/include/postgres.h:47:0, from /home/japin/Codes/postgresql/Debug/../src/backend/utils/adt/ri_triggers.c:24: /home/japin/Codes/postgresql/Debug/../src/backend/utils/adt/ri_triggers.c: In function ‘ri_PrimaryKeyExists’: /home/japin/Codes/postgresql/Debug/../src/include/utils/elog.h:134:5: warning: this statement may fall through [-Wimplicit-fallthrough=] do { \ ^ /home/japin/Codes/postgresql/Debug/../src/include/utils/elog.h:156:2: note: in expansion of macro ‘ereport_domain’ ereport_domain(elevel, TEXTDOMAIN, __VA_ARGS__) ^~~~~~~~~~~~~~ /home/japin/Codes/postgresql/Debug/../src/include/utils/elog.h:229:2: note: in expansion of macro ‘ereport’ ereport(elevel, errmsg_internal(__VA_ARGS__)) ^~~~~~~ /home/japin/Codes/postgresql/Debug/../src/backend/utils/adt/ri_triggers.c:417:5: note: in expansion of macro ‘elog’ elog(ERROR, "unexpected table_tuple_lock status: %u", res); ^~~~ /home/japin/Codes/postgresql/Debug/../src/backend/utils/adt/ri_triggers.c:419:4: note: here default: ^~~~~~~ -- Regrads, Japin Li. ChengDu WenWu Information Technology Co.,Ltd.