Fix uninitialized copy_data var (src/backend/commands/subscriptioncmds.c)

From: Ranier Vilela <ranier(dot)vf(at)gmail(dot)com>
To: Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Fix uninitialized copy_data var (src/backend/commands/subscriptioncmds.c)
Date: 2021-06-23 17:38:26
Message-ID: CAEudQAp5P8nr=ze2Gv=BMj=DJFZnrvendZCZcC-fos3QiDe2sg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

Not per Coverity!

About comments:
1. For drop, no "copy data"
2. Only refresh the added/*dropped* list of publications. (my emphasis)

The documentation says:
https://www.postgresql.org/docs/14/sql-altersubscription.html

"DROP PUBLICATION *publication_name*

Changes the list of subscribed publications. SET replaces the entire list
of publications with a new list, ADD adds additional publications, DROP
removes publications from the list of publications. See CREATE SUBSCRIPTION
<https://www.postgresql.org/docs/14/sql-createsubscription.html> for more
information. By default, this command will also act like REFRESH PUBLICATION,
except that in case of ADD or DROP, only the added or dropped publications
are refreshed.

*set_publication_option* specifies additional options for this operation.
The supported options are:
refresh (boolean)

When false, the command will not try to refresh table information. REFRESH
PUBLICATION should then be executed separately. The default is true.

Additionally, refresh options as described under REFRESH PUBLICATION may be
specified."
So, is allowed DROP PUBLICATION with (refresh = true)

I try some tests with subscription.sql:
CREATE SUBSCRIPTION regress_testsub3 CONNECTION
'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false,
streaming = true);
+CREATE SUBSCRIPTION regress_testsub3 CONNECTION
'dbname=regress_doesnotexist' PUBLICATION testpub WITH (connect = false,
streaming = true);
+WARNING: tables were not subscribed, you will have to run ALTER
SUBSCRIPTION ... REFRESH PUBLICATION to subscribe the tables

ALTER SUBSCRIPTION regress_testsub3 ENABLE;
ALTER SUBSCRIPTION regress_testsub3 REFRESH PUBLICATION;
+ALTER SUBSCRIPTION regress_testsub3 ENABLE;
+ALTER SUBSCRIPTION regress_testsub3 REFRESH PUBLICATION;
+ERROR: could not connect to the publisher: connection to server at
"localhost" (::1), port 58080 failed: FATAL: database
"regress_doesnotexist" does not exist

-- ok - delete active publication with refresh = true
ALTER SUBSCRIPTION regress_testsub3 DROP PUBLICATION testpub WITH (refresh
= true);
+-- ok - delete active publication with refresh = true
+ALTER SUBSCRIPTION regress_testsub3 DROP PUBLICATION testpub WITH (refresh
= true);
+ERROR: subscription must contain at least one publication

I think this bug is live, for lack of tests with DROP PUBLICATION WITH
(refresh = true).

regards,
Ranier Vilela

Attachment Content-Type Size
fix_use_unitialized_copy_data_subscriptioncmds.patch application/octet-stream 521 bytes

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Fabien COELHO 2021-06-23 20:01:28 Re: pgbench logging broken by time logic changes
Previous Message Alvaro Herrera 2021-06-23 16:55:40 Re: Pipeline mode and PQpipelineSync()