Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tGqOh-001DSt-56 for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Nov 2024 02:06:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tGqOe-00364F-KY for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Nov 2024 02:06:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tGqOc-003646-Jf for pgsql-hackers@lists.postgresql.org; Fri, 29 Nov 2024 02:06:17 +0000 Received: from fout-b2-smtp.messagingengine.com ([202.12.124.145]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tGqOa-0005eG-2f for pgsql-hackers@lists.postgresql.org; Fri, 29 Nov 2024 02:06:14 +0000 Received: from phl-compute-05.internal (phl-compute-05.phl.internal [10.202.2.45]) by mailfout.stl.internal (Postfix) with ESMTP id 7D1EF1140191 for ; Thu, 28 Nov 2024 21:06:10 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-05.internal (MEProxy); Thu, 28 Nov 2024 21:06:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paquier.xyz; h= cc:content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm1; t=1732845970; x=1732932370; bh=qmLBx2Xg5Q2csHE28aC2rkF6oN+zKBai scxm8Q2rwwI=; b=Z+VZDeWpcLJXsljYkihlbPG5BZ77TR0a2ZB+4g6urJAIS0hW v+H9/ca/SpekRPirjCgKil9dXoni+SlitUJt+Q92nAIxtuFMBm22BsjZ7a/Bqn4L ULlwriCWn8EPiuMGKQhf0qko5dSmf7Zt5aKict82LbSZ/R9nIFszpsq2eEDTK3QN PkN+TvtTL3Jf2LgLaerSULIQVfSAEcThKA9Rx5QhNVvRxbNj4pKd3tovgtUO8tM7 TBPFm1EEmoADAPI4hhES6R5O7JAeeblXKo7khYam/mfKgScNqgfvjY0DkX5eIZpJ GlyP7mBy0cY+Jf3D9oor7cAKXAHgiGsi1g7gGA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1732845970; x= 1732932370; bh=qmLBx2Xg5Q2csHE28aC2rkF6oN+zKBaiscxm8Q2rwwI=; b=c GNHyg/Oe3VhQWFqxdhhuSBpjSAbsE87lzEUKai6aPy4I7Z1pk6ux5nr2CqfGHBUa nNFyuHE608ki0IKttSdV5p13eUhQWVDzcwrOyYsI6/koqUJKgD1VgGSIpqEHbjwr GdgKRJawtTRenT3ELnwz6m3LDWWGQDftF2sA6dqpgMLpR4tNmMFuZF0O067CaqfF BiP1nKo/AC28gV2iMzEJHUTozV5Np6Kkcg+HrLUb5A4c6adlr+0uA8n8Ei5aOCUY 5TxhB3XdlkYzOMxgeYWZNabcYrjqTTKJDVjEavrGsCh72jCJIJoSRrrjq580PQog kzZHGr9LwXQrbYAotufpA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrhedvgdegtdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdpuffr tefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnth hsucdlqddutddtmdenfghrlhcuvffnffculdefhedmnecujfgurhepfffhvffukfggtggu sehgtderredttddvnecuhfhrohhmpefoihgthhgrvghlucfrrghquhhivghruceomhhitg hhrggvlhesphgrqhhuihgvrhdrgiihiieqnecuggftrfgrthhtvghrnhepieehvdevkeej jeduudehgeejiedvhffhfeegfedtjeeileegtdegfffhtedvvedtnecuffhomhgrihhnpe hpohhsthhgrhgvshhqlhdrohhrghenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgr mhepmhgrihhlfhhrohhmpehmihgthhgrvghlsehprghquhhivghrrdighiiipdhnsggprh gtphhtthhopedupdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehpghhsqhhlqdhh rggtkhgvrhhssehlihhsthhsrdhpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i0fe9450f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Thu, 28 Nov 2024 21:06:08 -0500 (EST) Date: Fri, 29 Nov 2024 11:05:51 +0900 From: Michael Paquier To: Postgres hackers Subject: Memory leak in WAL sender with pgoutput (v10~) Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="hp62BnVWWmgyVD3V" Content-Disposition: inline List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --hp62BnVWWmgyVD3V Content-Type: multipart/mixed; boundary="yko/I6y+ZW9GOJn1" Content-Disposition: inline --yko/I6y+ZW9GOJn1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi all, This is a follow-up of ea792bfd93ab and this thread where I've noticed that some memory was still leaking when running sysbench with a logical replication setup: https://www.postgresql.org/message-id/Zz7SRcBXxhOYngOr@paquier.xyz Reproducing the problem is quite simple, and can be done with the following steps (please adapt, like previous thread): 1) Initialize a primary and set up some empty tables: NUM_TABLES=3D500 PRIMARY_PORT=3D5432 STANDBY_PORT=3D5433 sysbench oltp_read_only --db-driver=3Dpgsql \ --pgsql-port=3D$PRIMARY_PORT \ --pgsql-db=3Dpostgres \ --pgsql-user=3Dpostgres \ --pgsql-host=3D/tmp \ --tables=3D$NUM_TABLES --table_size=3D0 \ --report-interval=3D1 \ --threads=3D1 prepare 2) Create a standby, promote it: STANDBY_DATA=3D/define/your/standby/path/ pg_basebackup --checkpoint=3Dfast -D $STANDBY_DATA -p $PRIMARY_PORT -h /tmp= / -R echo "port =3D $STANDBY_PORT" >> $STANDBY_DATA/postgresql.conf pg_ctl -D $STANDBY_DATA start pg_ctl -D $STANDBY_DATA promote 3) Publication and subscription psql -p $PRIMARY_PORT -c "CREATE PUBLICATION pub1 FOR ALL TABLES;" psql -p $STANDBY_PORT -c "CREATE SUBSCRIPTION sub1 CONNECTION 'port=3D$PRIMARY_PORT user=3Dpostgres dbname=3Dpostgres PUBLICATION pub1 WI= TH (enabled, create_slot, slot_name=3D'pub1_to_sub1', copy_data=3Dfalse);" 4) Run sysbench: sysbench oltp_write_only --db-driver=3Dpgsql \ --pgsql-port=3D$PRIMARY_PORT \ --pgsql-db=3Dpostgres \ --pgsql-user=3Dpostgres \ --pgsql-host=3D/tmp \ --tables=3D$NUM_TABLES --table_size=3D100 \ --report-interval=3D1 \ --threads=3D$NUM_THREADS run \ --time=3D5000 With that, I've mentioned internally that there was an extra leak and left the problem lying aside for a few days before being able to come back to it. In-between, Jeff Davis has done a review of the code to note that we leak memory in the CacheMemoryContext, due to the list_free_deep() done in get_rel_sync_entry() that misses the fact that the publication name is pstrdup()'d in GetPublication(), but list_free_deep() does not know that so the memory of the strdupped publication names stays around. That's wrong. Back to today, I've done more benchmarking using the above steps and logged periodic memory samples of the WAL sender with pg_log_backend_memory_contexts() (100s, 50 points), and analyzed the=20 evolution of the whole thing. "Grand Total" used memory keeps increasing due to one memory context: CacheMemoryContext. So yes, Jeff has spotted what looks like the only leak we have.=20 Attached is a graph that shows the evolution of memory between HEAD and a patched version for the used memory of CacheMemoryContext (ylabel is in bytes, could not get that right as my gnuplot skills are bad). One thing to note in this case is that I've made the leak more noticeable with this tweak to force the publication to be reset each time with go through get_rel_sync_entry(), or memory takes much longer to pile up. That does not change the problem, speeds up the detection by a large factor: --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -2061,12 +2061,13 @@ get_rel_sync_entry(PGOutputData *data, Relation rel= ation) List *rel_publications =3D NIL; =20 /* Reload publications if needed before use. */ - if (!publications_valid) + elog(WARNING, "forcing reload publications"); { oldctx =3D MemoryContextSwitchTo(CacheMemoryContext); if (data->publications) { list_free_deep(data->publications); This problem exists since the introduction of logical replication, down to v10. It would be sad to have an extra loop on publications to free explicitely the publication names, and the issue would still be hidden to the existing callers of GetPublication(), so I'd suggest to change the Publication structure to use a NAMEDATALEN string to force the free to happen, as in the attached. That means an ABI break. I've looked around and did not notice any out-of-core code relying on sizeof(Publication). That does not mean that nothing would break, of course, but the odds should be pretty good as this is a rather internal structure. One way would be to just fix that on HEAD and call it a day, but I'm aware of heavy logirep users whose workloads would be able to see memory bloating because they maintain WAL senders around. Thoughts or comments? -- Michael --yko/I6y+ZW9GOJn1 Content-Type: text/csv; charset=us-ascii Content-Disposition: attachment; filename="all_used_total.csv" 0,3968872,4014248 100,4011832,4014248 200,3997928,4001048 300,4022224,4001048 400,4040608,3984520 500,4042552,3999448 600,4053576,3999448 700,4067464,3938632 800,4068992,3998120 900,4080632,3998120 1000,4090056,3890312 1100,4083968,3998120 1200,4106728,3998120 1300,4119200,3949688 1400,4104680,3998120 1500,4134536,3998120 1600,4144408,3905128 1700,4137608,3998120 1800,4159744,3998120 1900,4171488,3952232 2000,4170472,3998120 2100,4186584,3998120 2200,4196520,3946040 2300,4192296,3998120 2400,4211712,3998120 2500,4221792,3916296 2600,4214752,3998120 2700,4237344,3998120 2800,4245656,3916184 2900,4244736,3998120 3000,4260920,3998120 3100,4268488,3937304 3200,4281000,3998120 3300,4285752,3998120 3400,4296144,3903688 3500,4294672,3998120 3600,4310760,3996904 3700,4320624,3945928 3800,4313824,3996904 3900,4335768,3998120 4000,4345776,3940952 4100,4355952,3998120 4200,4360992,3998120 4300,4370616,3898712 4400,4360504,3998120 4500,4385616,3998120 4600,4394168,3952120 4700,4394104,3998120 4800,4408280,3998120 4900,4418976,3931000 --yko/I6y+ZW9GOJn1 Content-Type: image/png Content-Disposition: attachment; filename="memused_vs_time.png" Content-Transfer-Encoding: base64 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 uu3bt1dWVvr5+eXn5z/44IMWj0ZHR8vl8nPnzi1evJjZcv78eUJIV1eXv79/aWnpzJkzDxw4 0NfX19zcXF5ezv1cnZ2dhBA/Pz92C/M1s72srCwjIyMoKEipVObk5CxdulS4Vwlktn/Ipz82 EkLqO9v+z9S5UscZmfmB4f3GQfSAYTji/UP7jYOYAVuY5R/yRVsTFkEaPmfMgD/55JOenp4j R45oNJqsrCyLR318fDZt2lRUVPS3v/3t+vXrr7zySkVFBSGEuboqNDR0165darVao9Hs3bs3 OHjEq+uYz7ADAwNPnjzZ0dHx7bff/v73v3fsZUmJzk4JMwN20R4wkfQjMXS+oQxks+m+/1uo HTfxgs1Whly92+bITSipHTSROOlzwF5eXsuXL8/JySktLe3o6LB4tLCwcNWqVZs3b164cGFz c3NOTo6bm1tQ0L9viL9mzRq9Xk8ISUtLu+8TBQQEEEK6urrYLczXzHYQFXMhdD8x9hsHQ7zG Sx0HAJxqlv+klv4ufAh4+MQtwBa1lmnHtrW1Wezm5eX15ptvdnR0dHR0HDhwoKWlJTY21tPz 3zdS0Wg0YWFhSqXS5keYLMTGxpKfOsGMhoYGmUwWHR3NI/84M+yfZocOHZL8a2L2pyINeZiv Pd1lKh/lZdIbNOBGQx6Lr9evXy95BmRDNsm/ZvqsYhxfe/ITvdHA9IBpy8bva/MSQMRgEk1V VRUhpLKykt2Sk5Mjk8n0er3FnocPHz5//jzztcFgiIqKUqvVzLdarVYmk509e7a8vFwmk2m1 Wot/q1AoSkpKzLdER0dnZ2ez365YsWLJkiU88os6OKNVWuWBLec/XF91VOogAABCEqMiiFhj DAZDYmJiZGTke++9V1NTs2fPHm9v7y1btjCPqtVqmUzGfL1y5crJkyeXl5dfvHhx1apVISEh bW1tJpNpYGAgISHhN7/5DbtbQkLCwMCAyWSqr6/XarVarVYul2/dupX5mnno8OHDcrl87969 tbW1eXl5TP3mkZ/mAnzw4EGpI9iWc+Gf09/WFNT9X6mD2EDtoJmQjS9k44HaYCa6s4lREUS8 Ctrd3f3jjz/WaDTbt29va2ubPHmyWq3evn279Z5vvfXWli1b1q5d29fXl5SUdObMGeZiq8LC Qp1Ox94uo6SkZMaMGfn5+a+88srTTz/NXCxNCCkuLi4uLiaE3Lx5c8qUKevWrevr6ysqKtq6 dWtsbOyxY8fY66tBbLP9Q/aRAdqWYQAAoNA4prCDtXHjMDgj9r+dLQtOldT+91YKr4IGAOBN jIowhlZDAieYpQy5ZzSg+gIA3BcKsEtiL9WjkKir1zmC5kFDNn6QjQdqgxG6s4kBBRgAAEAC aHPahR4wAAAw0AMGAAAYJVCAXRLNnRJqs1EbjCAbX8jGA7XBCN3ZxIACDAAAIAG0Oe1CDxgA ABjoAQMAAIwSKMAuieZOCbXZqA1GkI0vZOOB2mCE7mxiQAEGAACQANqcdqEHDAAADPSAAQAA RgkUYJdEc6eE2mzUBiPIxhey8UBtMEJ3NjGgAAMAAEgAbU670AMGAAAGesAAAACjBAqwS6K5 U0JtNmqDEWTjC9l4oDYYoTubGFCAAQAAJIA2p13oAQMAAAM9YAAAgFECBdgl0dwpoTYbtcEI svGFbDxQG4zQnU0MKMAAAAASQJvTLvSAAQCAgR4wAADAKIEC7JJo7pRQm43aYATZ+EI2HqgN RujOJgYUYAAAAAmgzWkXesAAAMBADxgAAGCUQAF2STR3SqjNRm0wgmx8IRsP1AYjdGcTAwow AACABNDmtAs9YAAAYKAHDAAAMEqgALskmjsl1GajNhhBNr6QjQdqgxG6s4kBBRgAAEACaHPa hR4wAAAw0AMGAAAYJVCAXRLNnRJqs1EbjCAbX8jGA7XBCN3ZxIACDAAAIAG0Oe1CDxgAABjo AQMAAIwSKMAuieZOCbXZqA1GkI0vZOOB2mCE7mxiGFsFuL+//5lnngkODg4PDy8oKJA6DgAA jF1jq835/PPP37x589ixY+3t7cnJycePH583b569ndEDBgAAhhgVYQzVmHv37gUEBJw/fz4+ Pn44+6MAAwAAAxdhOaS2tlahUAyz+lKO5k4JtdmoDUaQjS9k44HaYITubGIQtwD39vbu2LFj 6tSpXl5eMTExO3fuNBqN1rv19/e//PLL06ZN8/HxmT59+uuvv25zNwvd3d1ZWVnu7u67d++2 eGj37t0xMTFeXl5xcXHvvPMOs7GlpSUoKOill16aNm2aSqXauXOn4y8QAACAJ5OY0tPTQ0JC 3n333YsXL+7fv18ul+fk5FjvlpGRMXny5Kqqqra2ttOnT/v6+mo0Gu4j19TURERErFixQi6X l5SUmD+0f/9+hUJRWlp6+fLl4uJimUx2+vRpk8l0/PhxNze3I0eOmEym5ubmsLCw48ePczyF 2IMDAACuQoyKIGKNuXPnzsSJE9999112y9q1axMSEqz39PX1LSwsZL/duHFjbGws98Hffvvt w4cPm0wmhUJhUYAjIiK2b99u/qSLFi0ymUyVlZV+fn7s9uzs7E2bNnE8BQowAAAwxKgIIp6C 9vf3b21tXb16Nbulp6dHqVTa3HloaMj8Wzc3N0LI0aNHPTw86urqmI1ffPGFu7v7+++/TwjZ sGHDunXrrI9z7do1nU6XkpLCblm2bFlNTU13d3dCQkJfX19vby+z3WAwyOVyh16hdGjulFCb jdpgBNn4QjYeqA1G6M4mCsFLurXa2tpTp05lZmYGBARUV1db76BWqydPnlxTU6PX66uqqpRK 5d69e5mHVqxY8dBDD5lMJoPBMH/+/JUrV1r8W4sZ8OnTpwkhzc3N7Jbq6mpCyMWLF00mU1pa 2ubNmw0GQ0NDw8SJEysqKjhiO2dw+EE2HqgNZkI2vpCNB2qDmcZeNpkTavz27duZ07/5+fkP Pvig9Q4FBQXNzc0LFy5kvs3Ozs7KymK+Li0tnTlz5oEDB/r6+pqbm8vLy7mfq7OzkxDi5+fH bmG+ZraXlZVlZGQEBQUplcqcnJylS5cK8foAAABGzBkF+JNPPunv7z9z5szTTz99+fLlffv2 WeyQlZVVXV1dUVExe/bsixcvbty40dfXl7lKOTQ0dNeuXWq12mAw7N+/Pzg4eKTPbn5yOzAw 8OTJkw6+HAAAAMc56XPAXl5ey5cvz8nJKS0t7ejoMH+oqamptLS0qKho6dKloaGhy5cv12g0 RUVF3d3dzA5r1qzR6/WEkLS0tPs+UUBAACGkq6uL3cJ8zWwHAACghLgz4I6ODn9/f/bbqKio oaGhtrY2843ffPPN0NBQbGwsuyUyMnJgYECn08XFxRFCNBpNWFjYwMBAbm7ufW/gzBynsbFR pVIxWxoaGmQyWXR0NI/848aN4/GvnAPZeKA2GEE2vpCNB2qDEbqzCU7EAvz5558nJydXVlY+ +uijzJaamhqZTBYZGWm+G/NtfX39nDlzmC0NDQ1ubm7M9gsXLpSUlFRWVur1+tTU1PT09AUL FnA86bRp06Kjo0+dOvXII48wW06cOJGcnOzj4zPS/CbchxIAAEQjYgF+6KGHEhMTN27cWFhY GBUVdf78+eLi4szMTE9PT0LIjh07du3aNTg4OHXq1JSUFLVaHRQUNHPmzEuXLhUVFWVkZHh5 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 lNm+ePHixMTEwsJCMV83gOtBAQYYVSoqKhYuXLh27Vq9Xj9nzhzzh+Ry+f79+yMiIrRa7caN GzUazcqVK1NSUmpra5csWZKZmdnR0UEIyc3NLS4uLioqunnzZm5urlqtfuONN6yf6PTp0wkJ CSqVivm2t7c3NTV17ty5ly5dunLlSnJyckpKyu3bt5lHU1NTy8vLRX7pAC4GBRhgVPHw8HBz c5PJZJ6entaPhoSEvPDCC9OmTWNmrmFhYevWrZs2bdrWrVv1en1DQ0Nvb29JScm2bduefPLJ 0NDQp556KiMjo7i42PpQ1dXVSUlJ7LfffPNNV1dXenq6SqVSqVQFBQVardbPz495NCkpqb29 /erVq+K8aACXhAIMMIbMnTuX+SIwMND824CAAEJIZ2dnQ0NDT0/Pww8/zP6TpKSkxsbGW7du WRyqpaUlLCyM/TY2NjY2NnbNmjUFBQVfffUVIWTWrFkeHh7MoyEhIcw/EedlAbgkFGCAMcTb 29vmt25u//5VwNTIhx9+eNxP1qxZQwhpb2+3OFRnZyc7wSWEeHp6njt3btWqVW+99db8+fOn TJly9OhR9lGlUsn8E+FfEoDLQgEGgP9gampFRUX7z8XGxlrsqVQqu7q6zLcEBwe//vrr3377 bX19/WOPPbZ27VpmKkx+Kr1MGQYABgowAPxHQkKCQqFoaGgI/Dl3d3eLPUNCQsxPKf/444/s Zc/Tp0//61//KpPJLl26xGxh9mRORAMAAwUYYLRRKpW1tbVXr15lrmoekfHjx2/atCkvL+/k yZOtra11dXXLly/fsGGD9Z5JSUnnzp1jv71y5cpjjz22b9++pqampqamgoICQsiiRYuYR8+d OxcUFCTS/UAAXBQKMMBos2XLFp1Ol5ycrNVqefzzXbt2ZWZmZmdnR0RELFu2LCAgID8/33q3 1NTUS5cuff/998y3jz76aFlZWVlZ2ezZsxMSEk6fPn3ixInp06czj54+fTolJYX3KwIYlXAn LADgac6cOUuWLPnzn//MvRvuhAVgEwowAPDE3Av64sWL7EzXGu4FDWAPTkEDAE9Lly7dtm3b ypUrOVZDysnJGRgY2LNnjzODAbgEzIABAAAkgBkwAACABFCAAQAAJIACDAAAIAEUYAAAAAn8 f5YNx8JyY2EhAAAAAElFTkSuQmCC --yko/I6y+ZW9GOJn1 Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="logirep_cache_leak.patch" Content-Transfer-Encoding: quoted-printable diff --git a/src/include/catalog/pg_publication.h b/src/include/catalog/pg_= publication.h index 9a83a72d6b..809bd1f0a6 100644 --- a/src/include/catalog/pg_publication.h +++ b/src/include/catalog/pg_publication.h @@ -103,7 +103,7 @@ typedef struct PublicationDesc typedef struct Publication { Oid oid; - char *name; + char name[NAMEDATALEN]; bool alltables; bool pubviaroot; bool pubgencols; diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_= publication.c index 9bbb60463f..8f4e3b83f1 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -1061,7 +1061,7 @@ GetPublication(Oid pubid) =20 pub =3D (Publication *) palloc(sizeof(Publication)); pub->oid =3D pubid; - pub->name =3D pstrdup(NameStr(pubform->pubname)); + strlcpy(pub->name, NameStr(pubform->pubname), NAMEDATALEN); pub->alltables =3D pubform->puballtables; pub->pubactions.pubinsert =3D pubform->pubinsert; pub->pubactions.pubupdate =3D pubform->pubupdate; --yko/I6y+ZW9GOJn1-- --hp62BnVWWmgyVD3V Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEG72nH6vTowiyblFKnvQgOdbyQH0FAmdJIX8ACgkQnvQgOdby QH0/Kw//VOjT/8ctOMwLD5tQDn71fS5QEuzf0+pR4T2egqlCZwBnrlZn7bWO4bW5 MqdGQIsvojCyKNptMV3rEPahxIjqALYo4wGxtsbZ3mtV4icy88mdjsR+sS2g4UwH OqOiWoGODv8Z2z9RoXNKT3jUCH8WKCnK0TlOrl4M0wY1QRy01E+hF4owsVghtDIE cIS7hhQKHtPI6fii7q7mkOMEf9dgfxBOB0SZXxSEQdiwy+m4cxEtmQpdNrOzuGUi UMyzQdPReOJkf2C2XCqF9ww92m+1D8ufs7I9EiVlcUj7DxLSpN5N08daEiW2XG6n YbZC4yI4iPzvRJsOmVfak0E9bBIp3o9ag+NofD2WhxtSdUIqPgx1W5q+t68aVULO qtnwXZgqYjXTBRCu79rdBjt+Ut3gtmI75gQ0xpPXiHJa0xZ0MbnpDbfz/vF4ea9M I1YvFme/q3gJ4s0FmIzkF01NZYsB5SKTH3SeOR6YEm30xlpVD9nPBHMIIESLreY4 i3/Nm92nSO6Xh0RKQapoHPqroExqSNCdfJwMCeYX3Q9aQJBnmNGCT+f02gt0uRu8 JyQ/zWWI+VQDbQLhtD3bMosltUN5tW90Ml7Rq0CdqxaEXHv9/e9p3zoF2mESYPKg uOazNbP0lvZ4KjUaabpwAmqQC944WlREwg3CzP3B+8JB3vpL3mk= =yXfp -----END PGP SIGNATURE----- --hp62BnVWWmgyVD3V--