Hi Nathan, > This dates back to commit cc1965a, and I see some discussion about this > function in the corresponding thread [0]. One thing I don't like about > the patch is that we lose the comment about relying on the name to never be > double-quoted. IMHO that's worth retaining in some form.
Fair enough. Here is the corrected patch v2. -- Best regards, Aleksander Alekseev
From b7ac7079219451a37f02503d194a4caa48c68054 Mon Sep 17 00:00:00 2001 From: Aleksander Alekseev <[email protected]> Date: Wed, 15 Oct 2025 13:28:24 +0300 Subject: [PATCH v2] Remove make_temptable_name_n() The named function is used in matview.c only once and doesn't do much. Replace it with a simple psprintf() call. Author: Aleksander Alekseev <[email protected]> Reviewed-by: Nathan Bossart <[email protected]> Discussion: https://postgr.es/m/CAJ7c6TO3a5q2NKRsjdJ6sLf8isVe4aMaaX1-Hj2TdHdhFw8zRA%40mail.gmail.com --- src/backend/commands/matview.c | 35 +++++++++++----------------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index 441de55ac24..00fed53268b 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -61,7 +61,6 @@ static void transientrel_shutdown(DestReceiver *self); static void transientrel_destroy(DestReceiver *self); static uint64 refresh_matview_datafill(DestReceiver *dest, Query *query, const char *queryString, bool is_create); -static char *make_temptable_name_n(char *tempname, int n); static void refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, int save_sec_context); static void refresh_by_heap_swap(Oid matviewOid, Oid OIDNewHeap, char relpersistence); @@ -556,28 +555,6 @@ transientrel_destroy(DestReceiver *self) pfree(self); } - -/* - * Given a qualified temporary table name, append an underscore followed by - * the given integer, to make a new table name based on the old one. - * The result is a palloc'd string. - * - * As coded, this would fail to make a valid SQL name if the given name were, - * say, "FOO"."BAR". Currently, the table name portion of the input will - * never be double-quoted because it's of the form "pg_temp_NNN", cf - * make_new_heap(). But we might have to work harder someday. - */ -static char * -make_temptable_name_n(char *tempname, int n) -{ - StringInfoData namebuf; - - initStringInfo(&namebuf); - appendStringInfoString(&namebuf, tempname); - appendStringInfo(&namebuf, "_%d", n); - return namebuf.data; -} - /* * refresh_by_match_merge * @@ -634,7 +611,17 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, tempRel = table_open(tempOid, NoLock); tempname = quote_qualified_identifier(get_namespace_name(RelationGetNamespace(tempRel)), RelationGetRelationName(tempRel)); - diffname = make_temptable_name_n(tempname, 2); + /* + * Create a name for the temporary diff table by appending an underscore + * followed by the given integer to the qualified temporary table name. + * The result is a palloc'd string. + * + * As coded, this would fail to make a valid SQL name if the given name were, + * say, "FOO"."BAR". Currently, the table name portion of the input will + * never be double-quoted because it's of the form "pg_temp_NNN", cf + * make_new_heap(). But we might have to work harder someday. + */ + diffname = psprintf("%s_%d", tempname, 2); relnatts = RelationGetNumberOfAttributes(matviewRel); -- 2.43.0
