Re: bug in stored generated column over domain with constraints.
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: jian he <jian.universality@gmail.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2025-04-14T20:10:54Z
Lists: pgsql-hackers
Attachments
- v4-0001-fix-INSERT-generated-column-over-domain-with-cons.patch (text/x-diff) patch v4-0001
jian he <jian.universality@gmail.com> writes: > new patch attached. I looked this over. It's kind of astonishing that nobody has reported this before, because AFAICT it's been broken since we invented generated columns. > rewriteTargetListIU, expand_insert_targetlist these two places can > make a null Const TargetEntry for the generated column in an INSERT > operation. rewriteTargetListIU will *not* do that: it explicitly does nothing for an attgenerated column, except apply a bunch of error checks. See about line 988 in HEAD. So it seems sufficient to fix expand_insert_targetlist as you've done here. And then we have to make ExecCheckPlanOutput cope, too. I think that this patch is technically correct, but I don't like it much because it pays little attention to keeping expand_insert_targetlist and ExecCheckPlanOutput readable, and no attention at all to keeping their logic parallel. I think we can make the code cleaner by moving the default case to the end, as in the attached. The test cases seemed a bit overdone, especially in comparison to the adjacent existing tests. Fine for development maybe, but I don't see the value in carrying them forever. On the other hand, there's a comment at the top of the test script: -- keep these tests aligned with generated_virtual.sql The VIRTUAL case is currently rejecting domains altogether. But perhaps that won't be true forever, so I think we ought to follow that advice. So I end with the attached v4. regards, tom lane
Commits
-
Fix failure for generated column with a not-null domain constraint.
- f04e0faa3702 16.9 landed
- 97d671672393 15.13 landed
- 7c8728494077 18.0 landed
- 4604928edd72 14.18 landed
- 3c39c000c859 17.5 landed
-
Handle default NULL insertion a little better.
- 0da39aa7667b 18.0 cited