public inbox for [email protected]help / color / mirror / Atom feed
[PATCH 2/4] Allow composite types in bootstrap 3+ messages / 3 participants [nested] [flat]
* [PATCH 2/4] Allow composite types in bootstrap @ 2020-11-17 15:28 Justin Pryzby <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: Justin Pryzby @ 2020-11-17 15:28 UTC (permalink / raw) --- src/backend/bootstrap/bootstrap.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 1b940d9d27..a0fcbb3d83 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -916,6 +916,7 @@ gettype(char *type) { if (Typ != NIL) { + static bool did_reread PG_USED_FOR_ASSERTS_ONLY = false; /* Already reread pg_types? */ ListCell *lc; foreach (lc, Typ) @@ -927,6 +928,33 @@ gettype(char *type) return app->am_oid; } } + + /* + * The type wasn't known; check again to handle composite + * types, added since first populating Typ. + */ + + /* + * Once all the types are populated and we handled composite + * types, shouldn't need to do that again. + */ + Assert(!did_reread); + did_reread = true; + + list_free_deep(Typ); + Typ = NIL; + populate_typ(); + + /* Need to avoid infinite recursion... */ + foreach (lc, Typ) + { + struct typmap *app = lfirst(lc); + if (strncmp(NameStr(app->am_typ.typname), type, NAMEDATALEN) == 0) + { + Ap = app; + return app->am_oid; + } + } } else { -- 2.26.2 --------------BCA1373AE29B32B57608F4EE Content-Type: text/x-patch; charset=UTF-8; name="0003-Use-correct-statistics-kind-in-a-couple-pla-20210307.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0003-Use-correct-statistics-kind-in-a-couple-pla-20210307.pa"; filename*1="tch" ^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: Error position support for ComputeIndexAttrs @ 2026-01-04 04:19 jian he <[email protected]> 0 siblings, 1 reply; 3+ messages in thread From: jian he @ 2026-01-04 04:19 UTC (permalink / raw) To: Kirill Reshke <[email protected]>; +Cc: Amul Sul <[email protected]>; pgsql-hackers On Wed, Dec 31, 2025 at 10:37 PM Kirill Reshke <[email protected]> wrote: > > 4) DefineIndex inside ATAddIndex. It is triggered for patterns like > "alter table t add constraint c unique (ii);" - current patch set > missing support for them. I tried to pass pstate here, but no success, > because exprLocation returns -1 in ComputeIndexAttrs. Please see my > attempt attached. I guess this can be completed to get location > support, but I do not have any time today. hi. This will not work for ``ALTER TABLE t ADD CONSTRAINT c UNIQUE (ii);``. In this case, gram.y produces a single Constraint node, and Constraint node contain only one location field. However, a unique location is required for each IndexElem node. Simply assigning the same location value to all IndexElem nodes does not seem worth the effort required to add support for this. see transformIndexConstraint: `` foreach(lc, constraint->keys) { /* OK, add it to the index definition */ iparam = makeNode(IndexElem); ........ iparam->location = -1; index->indexParams = lappend(index->indexParams, iparam); } `` also ``ALTER TABLE t ADD CONSTRAINT c UNIQUE (ii);`` the Constraint.location is the location of the word "CONSTRAINT", which is far from the IndexElem location we want to report. -- jian https://www.enterprisedb.com ^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: Error position support for ComputeIndexAttrs @ 2026-01-04 17:28 Tom Lane <[email protected]> parent: jian he <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: Tom Lane @ 2026-01-04 17:28 UTC (permalink / raw) To: jian he <[email protected]>; +Cc: Kirill Reshke <[email protected]>; Amul Sul <[email protected]>; pgsql-hackers jian he <[email protected]> writes: > This will not work for ``ALTER TABLE t ADD CONSTRAINT c UNIQUE (ii);``. > In this case, gram.y produces a single Constraint node, and Constraint node > contain only one location field. However, a unique location is required for each > IndexElem node. Yeah, the actual problem is that the column name(s) in Constraint are just a list of String nodes without per-name locations. transformIndexConstraint throws some errors using constraint->location that really ought to point at an individual column name, so there's room for improvement there, as seen in this example from the regression tests: -- UNIQUE with a range column/PERIOD that isn't there: CREATE TABLE temporal_rng3 ( id INTEGER, CONSTRAINT temporal_rng3_uq UNIQUE (id, valid_at WITHOUT OVERLAPS) ); ERROR: column "valid_at" named in key does not exist LINE 3: CONSTRAINT temporal_rng3_uq UNIQUE (id, valid_at WITHOUT O... ^ But this seems like material for a separate patch. regards, tom lane ^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2026-01-04 17:28 UTC | newest] Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2020-11-17 15:28 [PATCH 2/4] Allow composite types in bootstrap Justin Pryzby <[email protected]> 2026-01-04 04:19 Re: Error position support for ComputeIndexAttrs jian he <[email protected]> 2026-01-04 17:28 ` Re: Error position support for ComputeIndexAttrs Tom Lane <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox