Thread: Confused by the behavior of pg_basebackup with replication slot

Confused by the behavior of pg_basebackup with replication slot

From
"Yi, Yi"
Date:
Hello,

I had an issue with the behavior of pg_basebackup command. I was convinced previously that pg_basebackup command always
madethe binary copy of the database cluster files of the postgres master. However, I recently noticed that
pg_basebackupdid not copy the the replication slot object of the master, in comparison with the fact that the
copy-command-based-backupdid copy the replication slot object. Is this difference designed on purpose ? 

Considering the difference mentioned above, I'm wandering that is there anything else that the pg_basebackup would NOT
copyfrom the master ? 
In other words, what is the no-copying rules of pg_basebackup ?

Any help will be greatly appreciated. Thanks.

Best Regards.


P.S.    The details of my test is shown as follows.


1.  Edit the postgresql.conf of the master to add replication slot

## ~(Skipping the edit operation of postgresql.conf)~
wing@master:~$ cat /mnt/data/pgdata/master/postgresql.conf | grep "max_replication"
max_replication_slots = 2 # max number of replication slots


2. Create one replication slot on master.

testdb=# select * from pg_create_physical_replication_slot('slot1');
 slotname | xlog_position
----------+---------------
 slot1    |
(1 row)

testdb=# SELECT * FROM pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | active | active_pid | xmin | catalog_xmin | restar
t_lsn
-----------+--------+-----------+--------+----------+--------+------------+------+--------------+-------
------
 slot1     |        | physical  |        |          | f      |            |      |              | 7/AD00
0220
(1 row)


3. Execute the pg_basebackup to make the base backup on the slave machine as slave1

## ~(Skipping the preparation operation of the pg_basebackup )~
wing@ubslave:~$ pg_basebackup -h {Master IP} -p 5432-U wing -F p -P -x -R -D /home/wing/pgdata/slave1  -l
baseup_slave1.log


4. Confirm the replication slot settings of slave1

## ~(Skipping the operation for starting the slave1 cluster )~
## The 'max_replication_slots' settings of postgresql.conf equals with the one on master.
wing@ubslave:~$ cat /home/wing/pgdata/slave1/postgresql.conf | grep "max_replication"
max_replication_slots = 2 # max number of replication slots

## However, there is NO RECORD in “pg_replication_slots” of slave1.
testdb=# SELECT * FROM pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | active | active_pid | xmin | catalog_xmin | restar
t_lsn
-----------+--------+-----------+--------+----------+--------+------------+------+--------------+-------
------
(0 rows)


5. Use the “pg_start_backup -> copy -> pg_stop_backup” method to make the base backup on the slave machine as slave2

## 5.1 execute pg_start_backup() on master
## 5.2 scp the data files from master to slave2.
## 5.3 execute pg_stop_backup() on master


6. Confirm the replication slot settings of slave2

## ~(Skipping the operation for starting the slave2 cluster )~
## The 'max_replication_slots' settings of postgresql.conf equals with the one on master.
wing@ubslave:~$ cat /home/wing/pgdata/slave2/postgresql.conf | grep "max_replication"
max_replication_slots = 2 # max number of replication slots

## Differing from slave1, slave2 had a record in “pg_replication_slots” which is similar to the one of master.
testdb=# SELECT * FROM pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | active | active_pid | xmin | catalog_xmin | restar
t_lsn
-----------+--------+-----------+--------+----------+--------+------------+------+--------------+-------
------
 slot1     |        | physical  |        |          | f      |            |      |              | 7/AB00
C540
(1 row)


Both master and slave are running PostgreSQL 9.5.0 on Ubuntu Server 14.04(64 bit)

--
Best Regards
---------------------------------------------------
FNST) Yi Yi
---------------------------------------------------






Re: Confused by the behavior of pg_basebackup with replication slot

From
Julien Rouhaud
Date:
Hello,

On 19/03/2016 15:41, Yi, Yi wrote:
> Hello,
>
> I had an issue with the behavior of pg_basebackup command. I was convinced previously that pg_basebackup command
alwaysmade the binary copy of the database cluster files of the postgres master. However, I recently noticed that
pg_basebackupdid not copy the the replication slot object of the master, in comparison with the fact that the
copy-command-based-backupdid copy the replication slot object. Is this difference designed on purpose ? 
>

Yes.

> Considering the difference mentioned above, I'm wandering that is there anything else that the pg_basebackup would
NOTcopy from the master ? 
> In other words, what is the no-copying rules of pg_basebackup ?
>

The full list is documented here:
http://www.postgresql.org/docs/current/static/protocol-replication.html

Regards.

> Any help will be greatly appreciated. Thanks.
>
> Best Regards.
>


--
Julien Rouhaud
http://dalibo.com - http://dalibo.org


Re: Confused by the behavior of pg_basebackup with replication slot

From
Julien Rouhaud
Date:
On 19/03/2016 15:58, Julien Rouhaud wrote:
> Hello,
>
> On 19/03/2016 15:41, Yi, Yi wrote:
>> Hello,
>>
>> I had an issue with the behavior of pg_basebackup command. I was convinced previously that pg_basebackup command
alwaysmade the binary copy of the database cluster files of the postgres master. However, I recently noticed that
pg_basebackupdid not copy the the replication slot object of the master, in comparison with the fact that the
copy-command-based-backupdid copy the replication slot object. Is this difference designed on purpose ? 
>>
>
> Yes.
>
>> Considering the difference mentioned above, I'm wandering that is there anything else that the pg_basebackup would
NOTcopy from the master ? 
>> In other words, what is the no-copying rules of pg_basebackup ?
>>
>
> The full list is documented here:
> http://www.postgresql.org/docs/current/static/protocol-replication.html
>

Sorry I sent the mail a little too fast. The list is at the end of the page.

> Regards.
>
>> Any help will be greatly appreciated. Thanks.
>>
>> Best Regards.
>>
>
>


--
Julien Rouhaud
http://dalibo.com - http://dalibo.org


Re: Confused by the behavior of pg_basebackup with replication slot

From
"Yi, Yi"
Date:
> Sorry I sent the mail a little too fast. The list is at the end of the
> page.

Thank you for your reply. I saw the list and it helped me a lot :)

> On 19/03/2016 15:58, Julien Rouhaud wrote:
> > Hello,
> >
> > On 19/03/2016 15:41, Yi, Yi wrote:
> >> Hello,
> >>
> >> I had an issue with the behavior of pg_basebackup command. I was
> convinced previously that pg_basebackup command always made the binary
> copy of the database cluster files of the postgres master. However, I
> recently noticed that pg_basebackup did not copy the the replication slot
> object of the master, in comparison with the fact that the
> copy-command-based-backup did copy the replication slot object. Is this
> difference designed on purpose ?
> >>
> >
> > Yes.
> >
> >> Considering the difference mentioned above, I'm wandering that is
> there anything else that the pg_basebackup would NOT copy from the
> master ?
> >> In other words, what is the no-copying rules of pg_basebackup ?
> >>
> >
> > The full list is documented here:
> >
> http://www.postgresql.org/docs/current/static/protocol-replication.h
> tml
> >
>
> Sorry I sent the mail a little too fast. The list is at the end of the
> page.
>
> > Regards.
> >
> >> Any help will be greatly appreciated. Thanks.
> >>
> >> Best Regards.
> >>
> >
> >
>
>
> --
> Julien Rouhaud
> http://dalibo.com - http://dalibo.org
>