Re:Re: Add support for specifying tables in pg_createsubscriber.

tianbing <tian_bing_0531@163.com>

From: tianbing <tian_bing_0531@163.com>
To: "Peter Smith" <smithpb2250@gmail.com>
Cc: "Shubham Khanna" <khannashubham1197@gmail.com>, "vignesh C" <vignesh21@gmail.com>, "Chao Li" <li.evan.chao@gmail.com>, "Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>, "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>, "PostgreSQL Hackers" <pgsql-hackers@lists.postgresql.org>
Date: 2025-12-03T05:46:37Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Support existing publications in pg_createsubscriber.

Hi, Peter, 
I have reviewed the v21 patch and noticed that there seems to be a memory leak.


+static bool
+check_publication_exists(PGconn *conn, const char *pubname, const char *dbname)
+{
+ PGresult *res;
+ bool exists;
+ char *query;
+
+ query = psprintf("SELECT 1 FROM pg_publication WHERE pubname = %s",
+ PQescapeLiteral(conn, pubname, strlen(pubname)));
+ res = PQexec(conn, query);
+
+ if (PQresultStatus(res) != PGRES_TUPLES_OK)
+ pg_fatal("could not check for publication \"%s\" in database \"%s\": %s",
+ pubname, dbname, PQerrorMessage(conn));
+
+ exists = (PQntuples(res) == 1);
+
+ PQclear(res);
+ pg_free(query);
+ return exists;
+}


The PQescapeLiteral() function through malloc to allocate memmory,and should be free by PQfreemem。


I suggest making the following modifications:


+ char *pub = PQescapeLiteral(conn, pubname, strlen(pubname);
+ query = psprintf("SELECT 1 FROM pg_publication WHERE pubname = %s", pub);
......
+ PQfreemem(pub);




Best Regards.