Re: Virtual generated columns
Richard Guo <guofenglinux@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Expand virtual generated columns for ALTER COLUMN TYPE
- 5069fef1cfae 18.0 landed
-
Eliminate code duplication in replace_rte_variables callbacks
- 363a6e8c6fcf 18.0 landed
-
Expand virtual generated columns in the planner
- 1e4351af329f 18.0 landed
-
Virtual generated columns
- 83ea6c54025b 18.0 landed
-
Additional tests for stored generated columns
- 41084409f635 18.0 landed
-
Improve generated_stored test
- 44b61efb7928 18.0 landed
- 86749ea3b766 18.0 landed
-
Fix handling of CREATE DOMAIN with GENERATED constraint syntax
- 84a67725cd11 18.0 landed
-
Add pg_constraint rows for not-null constraints
- 14e87ffa5c54 18.0 cited
-
Put generated_stored test objects in a schema
- 894be11adfa6 18.0 landed
-
Rename regress test generated to generated_stored
- b9ed4969250d 18.0 landed
-
Small code simplification
- 7ff9afbbd1df 18.0 landed
-
Remove useless code
- e26d313bad92 18.0 landed
-
Remove useless initializations
- da2aeba8f533 18.0 landed
-
doc: Clarify that pg_attrdef also stores generation expressions
- da486d360103 18.0 landed
-
Clean out column-level pg_init_privs entries when dropping tables.
- 76618097a6c0 17.0 cited
-
Re-implement the ereport() macro using __VA_ARGS__.
- e3a87b4991cc 13.0 cited
Attachments
- v5-0001-Expand-virtual-generated-columns-in-the-planner.patch (application/octet-stream) patch v5-0001
- v5-0002-Eliminate-code-duplication-in-replace_rte_variables-callbacks.patch (application/octet-stream) patch v5-0002
On Thu, Feb 20, 2025 at 12:25 AM Dean Rasheed <dean.a.rasheed@gmail.com> wrote: > On Wed, 19 Feb 2025 at 01:42, Dean Rasheed <dean.a.rasheed@gmail.com> wrote: > > One thing I don't like about this is that it's introducing more code > > duplication between pullup_replace_vars() and > > ReplaceVarsFromTargetList(). Those already had a lot of code in common > > before RETURNING OLD/NEW was added, and this is duplicating even more > > code. I think it'd be better to refactor so that they share common > > code, since it has become quite complex, and it would be better to > > have just one place to maintain. Yeah, it's annoying that the two replace_rte_variables callbacks have so much code duplication. I think it's a win to make them share common code. What do you think about making this refactor a separate patch, as it doesn't seem directly related to the bug fix here? > I've been doing some more testing of this, and attached is another > update, improving a few comments and adding regression tests based on > the cases discussed so far here. Hmm, there are some issues with v4 as far as I can see. * In pullup_replace_vars_callback, the varlevelsup of the newnode is adjusted before its nullingrels is updated. This can cause problems. If the newnode is not a Var/PHV, we adjust its nullingrels with add_nulling_relids, and this function only works for level-zero vars. As a result, we may fail to put the varnullingrels into the expression. I think we should insist that ReplaceVarFromTargetList generates the replacement expression with varlevelsup = 0, and that the caller is responsible for adjusting the varlevelsup if needed. This may need some changes to ReplaceVarsFromTargetList_callback too. * When expanding whole-tuple references, it is possible that some fields are expanded as Consts rather than Vars, considering dropped columns. I think we need to check for this when generating the fields for a RowExpr. * The expansion of virtual generated columns occurs after subquery pullup, which can lead to issues. This was an oversight on my part. Initially, I believed it wasn't possible for an RTE_RELATION RTE to have 'lateral' set to true, so I assumed it would be safe to expand virtual generated columns after subquery pullup. However, upon closer look, this doesn't seem to be the case: if a subquery had a LATERAL marker, that would be propagated to any of its child RTEs, even for RTE_RELATION child RTE if this child rel has sampling info (see pull_up_simple_subquery). * Not an issue but I think that maybe we can share some common code between expand_virtual_generated_columns and expand_generated_columns_internal on how we build the generation expressions for a virtual generated column. I've worked on these issues and attached are the updated patches. 0001 expands virtual generated columns in the planner. 0002 refactors the code to eliminate code duplication in the replace_rte_variables callback functions. > One of the new regression tests fails, which actually appears to be a > pre-existing grouping sets bug, due to the fact that only non-Vars are > wrapped in PHVs. This bug can be triggered without virtual generated > columns: Interesting. I'll take a look at this issue. Thanks Richard