On Mon, 13 Apr 2026 at 06:45, jian he <[email protected]> wrote: > > Hi. > > https://git.postgresql.org/cgit/postgresql.git/commit/?id=8e72d914c52876525a90b28444453de8085c866f > DELETE/UPDATE FOR PORTION OF with rule system is not working, and > there are no RULE related regession tests.
Thanks! +cc Paul & Peter as authors of [0] > in gram.y, RuleStmt, RuleActionList, RuleActionStmt > RuleActionStmt: > SelectStmt > | InsertStmt > | UpdateStmt > | DeleteStmt > | NotifyStmt > ; > > So far, I found 2 errors, and one crash. > There might be more bugs, I didn't try all the cases. > > drop table if exists fpo_rule; > create table fpo_rule (f1 bigint, f2 int4range); > INSERT INTO fpo_rule values (1, '[1, 10]'); > CREATE RULE rule3 AS ON INSERT TO fpo_rule DO INSTEAD UPDATE fpo_rule > FOR PORTION OF f2 FROM 1 to 4 SET F1 = 2; > > INSERT INTO fpo_rule values (2, '[2, 12]'); > ERROR: range types do not match > \errverbose > ERROR: XX000: range types do not match > LOCATION: range_minus_multi, rangetypes.c:1260 > > CREATE RULE rule4 AS ON DELETE TO fpo_rule DO INSTEAD UPDATE fpo_rule > FOR PORTION OF f2 FROM 1 to 4 SET F1 = 2; > DELETE FROM fpo_rule; > ERROR: no relation entry for relid 3 > \errverbose > ERROR: XX000: no relation entry for relid 3 > LOCATION: find_base_rel, relnode.c:556 > > DROP RULE rule4 ON fpo_rule; > CREATE RULE rule5 AS ON UPDATE TO fpo_rule DO INSTEAD DELETE FROM > fpo_rule FOR PORTION OF f2 FROM 1 to 4; > UPDATE fpo_rule FOR PORTION OF f2 FROM 1 to 4 SET F1 = 2; -- server crash > > As of now, we should try to ban CREATE ROLE with UPDATE/DELETE FOR PORTION OF. +1 for banning [0] https://git.postgresql.org/cgit/postgresql.git/commit/?id=8e72d914c52876525a90b28444453de8085c866f -- Best regards, Kirill Reshke
