Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: postgresql-cfbot/postgresql
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: dfc1342
Choose a base ref
...
head repository: postgresql-cfbot/postgresql
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: c68100a
Choose a head ref
  • 1 commit
  • 2 files changed
  • 1 contributor

Commits on Mar 24, 2025

  1. Allow pg_recvlogical --drop-slot to work without --dbname.

    When pg_recvlogical was introduced in 9.4, the --dbname option was not
    required for --drop-slot. Without it, pg_recvlogical --drop-slot connected
    using a replication connection (not tied to a specific database) and
    was able to drop both physical and logical replication slots, similar to
    pg_receivewal --drop-slot.
    
    However, commit 0c013e0 unintentionally changed this behavior in 9.5,
    making pg_recvlogical always check whether it's connected to a specific
    database and fail if it's not. This change was expected for --create-slot
    and --start, which handle logical replication slots and require a database
    connection, but it was unnecessary for --drop-slot, which should work with
    any replication connection. As a result, --dbname became a required option
    for --drop-slot.
    
    This commit removes that restriction, restoring the original behavior and
    allowing pg_recvlogical --drop-slot to work without specifying --dbname.
    
    Although this issue originated from an unintended change, it has existed
    for a long time without complaints or bug reports, and the documentation
    never explicitly stated that --drop-slot should work without --dbname.
    Therefore, the change is not treated as a bug fix and is applied only to
    master.
    
    Author: Hayato Kuroda <kuroda.hayato@fujitsu.com>
    Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
    Discussion: https://postgr.es/m/b15ecf4f-e5af-4fbb-82c2-a425f453e0b2@oss.nttdata.com
    MasaoFujii committed Mar 24, 2025
    Copy the full SHA
    c68100a View commit details
Showing with 14 additions and 3 deletions.
  1. +6 −3 src/bin/pg_basebackup/pg_recvlogical.c
  2. +8 −0 src/bin/pg_basebackup/t/030_pg_recvlogical.pl
9 changes: 6 additions & 3 deletions src/bin/pg_basebackup/pg_recvlogical.c
Original file line number Diff line number Diff line change
@@ -944,13 +944,16 @@ main(int argc, char **argv)
#endif

/*
* Run IDENTIFY_SYSTEM to make sure we connected using a database specific
* replication connection.
* Run IDENTIFY_SYSTEM to check the connection type for each action.
* --create-slot and --start actions require a database-specific
* replication connection because they handle logical replication slots.
* --drop-slot can remove replication slots from any replication
* connection without this restriction.
*/
if (!RunIdentifySystem(conn, NULL, NULL, NULL, &db_name))
exit(1);

if (db_name == NULL)
if (!do_drop_slot && db_name == NULL)
pg_fatal("could not establish database-specific replication connection");

/*
8 changes: 8 additions & 0 deletions src/bin/pg_basebackup/t/030_pg_recvlogical.pl
Original file line number Diff line number Diff line change
@@ -127,4 +127,12 @@
],
'replayed a two-phase transaction');

$node->command_ok(
[
'pg_recvlogical',
'--slot' => 'test',
'--drop-slot'
],
'drop could work without dbname');

done_testing();