After an error - pg_replication_slot is dropped

Started by tusharalmost 8 years ago4 messages
#1tushar
tushar.ahuja@enterprisedb.com

Hi,

Please refer this straight forward scenario  against latest sources of v11.

[centos@centos-cpula bin]$ ./psql  postgres
psql (11devel)
Type "help" for help.

postgres=#  SELECT * FROM
pg_create_logical_replication_slot('regression_slot1', 'test_decoding',
true);
    slot_name     |    lsn
------------------+-----------
 regression_slot1 | 0/40001E8
(1 row)

postgres=#
postgres=# select * from pg_replication_slots;
    slot_name     |    plugin     | slot_type | datoid | database |
temporary | active | active_pid | xmin | catalog_xmin | restart_lsn |
confirmed_flush_lsn
------------------+---------------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
 regression_slot1 | test_decoding | logical   |  13220 | postgres |
t         | t      |      28015 |      |          557 | 0/40001B0 |
0/40001E8
(1 row)

--Try to again create  the same slot , getting an error - which is expected
postgres=#
postgres=#  SELECT * FROM
pg_create_logical_replication_slot('regression_slot1', 'test_decoding',
true);
ERROR:  replication slot "regression_slot1" already exists
postgres=#

--No slot found
postgres=# select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary |
active | active_pid | xmin | catalog_xmin | restart_lsn |
confirmed_flush_lsn
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)

--
regards,tushar
EnterpriseDB https://www.enterprisedb.com/
The Enterprise PostgreSQL Company

#2Petr Jelinek
petr.jelinek@2ndquadrant.com
In reply to: tushar (#1)
Re: After an error - pg_replication_slot is dropped

Hi,

On 16/02/18 10:51, tushar wrote:

Hi,

Please refer this straight forward scenario  against latest sources of v11.

[centos@centos-cpula bin]$ ./psql  postgres
psql (11devel)
Type "help" for help.

postgres=#  SELECT * FROM
pg_create_logical_replication_slot('regression_slot1', 'test_decoding',
true);
    slot_name     |    lsn
------------------+-----------
 regression_slot1 | 0/40001E8
(1 row)

postgres=#
postgres=# select * from pg_replication_slots;
    slot_name     |    plugin     | slot_type | datoid | database |
temporary | active | active_pid | xmin | catalog_xmin | restart_lsn |
confirmed_flush_lsn
------------------+---------------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------

 regression_slot1 | test_decoding | logical   |  13220 | postgres |
t         | t      |      28015 |      |          557 | 0/40001B0 |
0/40001E8
(1 row)

--Try to again create  the same slot , getting an error - which is expected
postgres=#
postgres=#  SELECT * FROM
pg_create_logical_replication_slot('regression_slot1', 'test_decoding',
true);
ERROR:  replication slot "regression_slot1" already exists
postgres=#

--No slot found
postgres=# select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active
| active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------

(0 rows)

It's because you are creating temporary slot. Temporary slots are
removed on error, that's a documented behavior.

--
Petr Jelinek http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

#3tushar
tushar.ahuja@enterprisedb.com
In reply to: Petr Jelinek (#2)
Re: After an error - pg_replication_slot is dropped

On 02/16/2018 04:02 PM, Petr Jelinek wrote:

It's because you are creating temporary slot. Temporary slots are
removed on error, that's a documented behavior.

Thanks for pointing out but It looks weird behavior - even a small mea
culpa can remove the slot. Temporary table - doesn't go automatically
after an error ?

--
regards,tushar
EnterpriseDB https://www.enterprisedb.com/
The Enterprise PostgreSQL Company

#4Petr Jelinek
petr.jelinek@2ndquadrant.com
In reply to: tushar (#3)
Re: After an error - pg_replication_slot is dropped

On 16/02/18 12:38, tushar wrote:

On 02/16/2018 04:02 PM, Petr Jelinek wrote:

It's because you are creating temporary slot. Temporary slots are
removed on error, that's a documented behavior.

Thanks for pointing out but It looks weird behavior - even a small mea
culpa can remove the slot. Temporary table - doesn't go automatically
after an error ?

Temporary tables have transactional properties, slots don't (even the
non-temporary). For example if you create replication slot in
transaction and then abort it, the slot will survive. That's the price
we pay for ability to create slots on standby.

--
Petr Jelinek http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services