diff -U3 /tmp/cirrus-ci-build/src/pl/tcl/expected/pltcl_trigger.out /tmp/cirrus-ci-build/build-32/testrun/pltcl/regress/results/pltcl_trigger.out --- /tmp/cirrus-ci-build/src/pl/tcl/expected/pltcl_trigger.out 2024-03-21 16:29:10.471033863 +0000 +++ /tmp/cirrus-ci-build/build-32/testrun/pltcl/regress/results/pltcl_trigger.out 2024-03-21 16:35:49.162746194 +0000 @@ -508,381 +508,7 @@ delete from T_pkey1 where key1 = 1 and key2 = 'key1-2'; ERROR: key '1', 'key1-2 ' referenced by T_dta1 update T_pkey2 set key2 = 'KEY2-9' where key1 = 2 and key2 = 'KEY2-1'; -update T_pkey2 set key2 = 'KEY1-9' where key1 = 1 and key2 = 'KEY1-1'; -NOTICE: updated 1 entries in T_dta2 for new key in T_pkey2 -delete from T_pkey2 where key1 = 2 and key2 = 'KEY2-2'; -delete from T_pkey2 where key1 = 1 and key2 = 'KEY1-2'; -NOTICE: deleted 1 entries from T_dta2 -select * from T_pkey1; - key1 | key2 | txt -------+----------------------+------------------------------------------ - 1 | key1-1 | test key - 1 | key1-2 | test key - 1 | key1-3 | test key - 2 | key2-3 | test key - 1 | KEY1-3 | should work - 2 | key2-9 | test key -(6 rows) - -select * from T_pkey2; - key1 | key2 | txt -------+----------------------+------------------------------------------ - 1 | KEY1-3 | test key - 2 | KEY2-3 | test key - 2 | KEY2-9 | test key - 1 | KEY1-9 | test key -(4 rows) - -select * from T_dta1; - tkey | ref1 | ref2 -------------+------+---------------------- - trec 1 | 1 | key1-1 - trec 2 | 1 | key1-2 - trec 3 | 1 | key1-3 -(3 rows) - -select * from T_dta2; - tkey | ref1 | ref2 -------------+------+---------------------- - trec 3 | 1 | KEY1-3 - trec 1 | 1 | KEY1-9 -(2 rows) - -select tcl_avg(key1) from T_pkey1; - tcl_avg ---------- - 1 -(1 row) - -select tcl_sum(key1) from T_pkey1; - tcl_sum ---------- - 8 -(1 row) - -select tcl_avg(key1) from T_pkey2; - tcl_avg ---------- - 1 -(1 row) - -select tcl_sum(key1) from T_pkey2; - tcl_sum ---------- - 6 -(1 row) - --- The following should return NULL instead of 0 -select tcl_avg(key1) from T_pkey1 where key1 = 99; - tcl_avg ---------- - -(1 row) - -select tcl_sum(key1) from T_pkey1 where key1 = 99; - tcl_sum ---------- - 0 -(1 row) - -select 1 @< 2; - ?column? ----------- - t -(1 row) - -select 100 @< 4; - ?column? ----------- - f -(1 row) - -select * from T_pkey1 order by key1 using @<, key2 collate "C"; - key1 | key2 | txt -------+----------------------+------------------------------------------ - 1 | KEY1-3 | should work - 1 | key1-1 | test key - 1 | key1-2 | test key - 1 | key1-3 | test key - 2 | key2-3 | test key - 2 | key2-9 | test key -(6 rows) - -select * from T_pkey2 order by key1 using @<, key2 collate "C"; - key1 | key2 | txt -------+----------------------+------------------------------------------ - 1 | KEY1-3 | test key - 1 | KEY1-9 | test key - 2 | KEY2-3 | test key - 2 | KEY2-9 | test key -(4 rows) - --- show dump of trigger data -insert into trigger_test values(1,'insert'); -NOTICE: NEW: {} -NOTICE: OLD: {} -NOTICE: TG_level: STATEMENT -NOTICE: TG_name: statement_trigger -NOTICE: TG_op: INSERT -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {42 {statement trigger}} -NOTICE: NEW: {i: 1, test_argisnull: f, test_return_null: f, test_skip: f, v: insert} -NOTICE: OLD: {} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig -NOTICE: TG_op: INSERT -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {23 skidoo} -insert into trigger_test_generated (i) values (1); -NOTICE: NEW: {i: 1} -NOTICE: OLD: {} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig_before -NOTICE: TG_op: INSERT -NOTICE: TG_relatts: {{} i j} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_generated -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {} -NOTICE: NEW: {i: 1, j: 2} -NOTICE: OLD: {} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig_after -NOTICE: TG_op: INSERT -NOTICE: TG_relatts: {{} i j} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_generated -NOTICE: TG_table_schema: public -NOTICE: TG_when: AFTER -NOTICE: args: {} -update trigger_test_generated set i = 11 where i = 1; -NOTICE: NEW: {i: 11} -NOTICE: OLD: {i: 1, j: 2} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig_before -NOTICE: TG_op: UPDATE -NOTICE: TG_relatts: {{} i j} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_generated -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {} -NOTICE: NEW: {i: 11, j: 22} -NOTICE: OLD: {i: 1, j: 2} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig_after -NOTICE: TG_op: UPDATE -NOTICE: TG_relatts: {{} i j} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_generated -NOTICE: TG_table_schema: public -NOTICE: TG_when: AFTER -NOTICE: args: {} -delete from trigger_test_generated; -NOTICE: NEW: {} -NOTICE: OLD: {i: 11, j: 22} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig_before -NOTICE: TG_op: DELETE -NOTICE: TG_relatts: {{} i j} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_generated -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {} -NOTICE: NEW: {} -NOTICE: OLD: {i: 11, j: 22} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig_after -NOTICE: TG_op: DELETE -NOTICE: TG_relatts: {{} i j} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_generated -NOTICE: TG_table_schema: public -NOTICE: TG_when: AFTER -NOTICE: args: {} -insert into trigger_test_view values(2,'insert'); -NOTICE: NEW: {i: 2, v: insert} -NOTICE: OLD: {} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_view_trig -NOTICE: TG_op: INSERT -NOTICE: TG_relatts: {{} i v} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_view -NOTICE: TG_table_schema: public -NOTICE: TG_when: {INSTEAD OF} -NOTICE: args: {24 {skidoo view}} -update trigger_test_view set v = 'update' where i=1; -NOTICE: NEW: {i: 1, v: update} -NOTICE: OLD: {i: 1, v: insert} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_view_trig -NOTICE: TG_op: UPDATE -NOTICE: TG_relatts: {{} i v} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_view -NOTICE: TG_table_schema: public -NOTICE: TG_when: {INSTEAD OF} -NOTICE: args: {24 {skidoo view}} -delete from trigger_test_view; -NOTICE: NEW: {} -NOTICE: OLD: {i: 1, v: insert} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_view_trig -NOTICE: TG_op: DELETE -NOTICE: TG_relatts: {{} i v} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test_view -NOTICE: TG_table_schema: public -NOTICE: TG_when: {INSTEAD OF} -NOTICE: args: {24 {skidoo view}} -update trigger_test set v = 'update', test_skip=true where i = 1; -NOTICE: NEW: {} -NOTICE: OLD: {} -NOTICE: TG_level: STATEMENT -NOTICE: TG_name: statement_trigger -NOTICE: TG_op: UPDATE -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {42 {statement trigger}} -NOTICE: SKIPPING OPERATION UPDATE -update trigger_test set v = 'update' where i = 1; -NOTICE: NEW: {} -NOTICE: OLD: {} -NOTICE: TG_level: STATEMENT -NOTICE: TG_name: statement_trigger -NOTICE: TG_op: UPDATE -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {42 {statement trigger}} -NOTICE: NEW: {i: 1, test_argisnull: f, test_return_null: f, test_skip: f, v: update} -NOTICE: OLD: {i: 1, test_argisnull: f, test_return_null: f, test_skip: f, v: insert} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig -NOTICE: TG_op: UPDATE -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {23 skidoo} -delete from trigger_test; -NOTICE: NEW: {} -NOTICE: OLD: {} -NOTICE: TG_level: STATEMENT -NOTICE: TG_name: statement_trigger -NOTICE: TG_op: DELETE -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {42 {statement trigger}} -NOTICE: NEW: {} -NOTICE: OLD: {i: 1, test_argisnull: f, test_return_null: f, test_skip: f, v: update} -NOTICE: TG_level: ROW -NOTICE: TG_name: show_trigger_data_trig -NOTICE: TG_op: DELETE -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {23 skidoo} -truncate trigger_test; -NOTICE: NEW: {} -NOTICE: OLD: {} -NOTICE: TG_level: STATEMENT -NOTICE: TG_name: statement_trigger -NOTICE: TG_op: TRUNCATE -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {42 {statement trigger}} -DROP TRIGGER show_trigger_data_trig_before ON trigger_test_generated; -DROP TRIGGER show_trigger_data_trig_after ON trigger_test_generated; --- should error -insert into trigger_test(test_argisnull) values(true); -NOTICE: NEW: {} -NOTICE: OLD: {} -NOTICE: TG_level: STATEMENT -NOTICE: TG_name: statement_trigger -NOTICE: TG_op: INSERT -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {42 {statement trigger}} -ERROR: argisnull cannot be used in triggers --- should error -insert into trigger_test(test_return_null) values(true); -NOTICE: NEW: {} -NOTICE: OLD: {} -NOTICE: TG_level: STATEMENT -NOTICE: TG_name: statement_trigger -NOTICE: TG_op: INSERT -NOTICE: TG_relatts: {{} i v {} test_skip test_return_null test_argisnull} -NOTICE: TG_relid: bogus:12345 -NOTICE: TG_table_name: trigger_test -NOTICE: TG_table_schema: public -NOTICE: TG_when: BEFORE -NOTICE: args: {42 {statement trigger}} -ERROR: return_null cannot be used in triggers --- test transition table visibility -create table transition_table_test (id int, name text); -insert into transition_table_test values (1, 'a'); -create function transition_table_test_f() returns trigger language pltcl as -$$ - spi_exec -array C "SELECT id, name FROM old_table" { - elog INFO "old: $C(id) -> $C(name)" - } - spi_exec -array C "SELECT id, name FROM new_table" { - elog INFO "new: $C(id) -> $C(name)" - } - return OK -$$; -CREATE TRIGGER a_t AFTER UPDATE ON transition_table_test - REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table - FOR EACH STATEMENT EXECUTE PROCEDURE transition_table_test_f(); -update transition_table_test set name = 'b'; -INFO: old: 1 -> a -INFO: new: 1 -> b -drop table transition_table_test; -drop function transition_table_test_f(); --- dealing with generated columns -CREATE FUNCTION generated_test_func1() RETURNS trigger -LANGUAGE pltcl -AS $$ -# not allowed -set NEW(j) 5 -return [array get NEW] -$$; -CREATE TRIGGER generated_test_trigger1 BEFORE INSERT ON trigger_test_generated -FOR EACH ROW EXECUTE PROCEDURE generated_test_func1(); -TRUNCATE trigger_test_generated; -INSERT INTO trigger_test_generated (i) VALUES (1); -ERROR: cannot set generated column "j" -SELECT * FROM trigger_test_generated; - i | j ----+--- -(0 rows) - +server closed the connection unexpectedly + This probably means the server terminated abnormally + before or while processing the request. +connection to server was lost diff -U3 /tmp/cirrus-ci-build/src/pl/tcl/expected/pltcl_transaction.out /tmp/cirrus-ci-build/build-32/testrun/pltcl/regress/results/pltcl_transaction.out --- /tmp/cirrus-ci-build/src/pl/tcl/expected/pltcl_transaction.out 2024-03-21 16:29:10.471033863 +0000 +++ /tmp/cirrus-ci-build/build-32/testrun/pltcl/regress/results/pltcl_transaction.out 2024-03-21 16:35:49.458745893 +0000 @@ -108,42 +108,7 @@ elog WARNING "should not get here" $$; CALL transaction_testfk(); -ERROR: insert or update on table "testfk" violates foreign key constraint "testfk_f1_fkey" -SELECT * FROM testpk; - id ----- -(0 rows) - -SELECT * FROM testfk; - f1 ----- -(0 rows) - -CREATE OR REPLACE PROCEDURE transaction_testfk() -LANGUAGE pltcl -AS $$ -# this insert will fail during commit: -spi_exec "INSERT INTO testfk VALUES (0)" -if [catch {commit} msg] { - elog INFO $msg -} -# these inserts should work: -spi_exec "INSERT INTO testpk VALUES (1)" -spi_exec "INSERT INTO testfk VALUES (1)" -$$; -CALL transaction_testfk(); -INFO: insert or update on table "testfk" violates foreign key constraint "testfk_f1_fkey" -SELECT * FROM testpk; - id ----- - 1 -(1 row) - -SELECT * FROM testfk; - f1 ----- - 1 -(1 row) - -DROP TABLE test1; -DROP TABLE test2; +server closed the connection unexpectedly + This probably means the server terminated abnormally + before or while processing the request. +connection to server was lost