Re: Virtual generated columns
Dean Rasheed <dean.a.rasheed@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
- v3-expand-virt-gen-cols-in-planner.patch (text/x-patch) patch v3
On Tue, 18 Feb 2025 at 13:12, Richard Guo <guofenglinux@gmail.com> wrote: > > > It seems to me that, for a relation in the rangetable that has virtual > > generated columns, we can consider it a subquery to some extent. For > > instance, suppose we have a query: > > > > select ... from ... join t on ...; > > > > and suppose t.b is a virtual generated column. We can consider this > > query as: > > > > select ... from ... join (select a, expr() as b from t) as t on ...; > > > > In this sense, I'm wondering if we can leverage the > > pullup_replace_vars architecture to expand the virtual generated > > columns. I believe this would help avoid a lot of duplicate code with > > pullup_replace_vars_callback. Yes, I think this is much better. Having just one place that does that complex logic is a definite win. At one point I had the idea of making the rewriter turn RTEs with virtual generated columns into subquery RTEs, so then the planner would treat them just like views, but that would have been less efficient. Also, I think there would have been a problem with RLS quals, which would have been added to the subquery RTEs. Perhaps that could have been fixed up during subquery pullup, but it felt ugly and I didn't actually try it. > I had a try with this idea, and attached is what I came up with. It > fixes all the mentioned issues but still requires significant > refinement, particularly due to the lack of comments. By leveraging > the pullup_replace_vars architecture to expand the virtual generated > columns, it saves a lot of duplicate code. 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. Attached is an updated patch doing that. Regards, Dean