Bug in pg_upgrade standby rsync doc

Started by Don Seilerover 8 years ago3 messagesdocs
Jump to latest
#1Don Seiler
don@seiler.us

In step 10 of the pg_upgrade doc at
https://www.postgresql.org/docs/9.6/static/pgupgrade.html, it uses this
example for rsyncing the main $PGDATA dir to the standby:

rsync --archive --delete --hard-links --size-only --no-inc-recursive
/opt/PostgreSQL/9.5/data \
/opt/PostgreSQL/9.6/data standby.example.com:/opt/PostgreSQL

However when I ran this (substituting /var/lib/pgsql for /opt/PostgreSQL),
I found that it put a directory under /var/lib/pgsql/data, and my 9.6/data
dir was still empty. Furthermore, what was in /var/lib/pgsql/data appeared
to be the old 9.2 contents.

I suspect this is because the "data" directories are two levels below the
parent directory specified at the end of the command. When I used the
similar command for separate tablespaces, it worked as expected.

When I run the command with the "data" dir, so that I'm just specifying 9.2
and 9.6, it works as desired. eg:

rsync --archive --delete --hard-links --size-only --no-inc-recursive
/opt/PostgreSQL/9.5 \
/opt/PostgreSQL/9.6 standby.example.com:/opt/PostgreSQL

FWIW I was upgrading from 9.2.22 to 9.6.6 on CentOS 6.

--
Don Seiler
www.seiler.us

#2Bruce Momjian
bruce@momjian.us
In reply to: Don Seiler (#1)
Re: Bug in pg_upgrade standby rsync doc

On Thu, Dec 7, 2017 at 11:28:12AM -0600, Don Seiler wrote:

In step 10 of the pg_upgrade doc at�https://www.postgresql.org/docs/9.6/static/
pgupgrade.html, it uses this example for rsyncing the main $PGDATA dir to the
standby:

rsync --archive --delete --hard-links --size-only --no-inc-recursive /opt/PostgreSQL/9.5/data \
/opt/PostgreSQL/9.6/data standby.example.com:/opt/PostgreSQL

However when I ran this (substituting /var/lib/pgsql for /opt/PostgreSQL), I
found that it put a directory under /var/lib/pgsql/data, and my 9.6/data dir
was still empty. Furthermore, what was in /var/lib/pgsql/data appeared to be
the old 9.2 contents.

I suspect this is because the "data" directories are two levels below the
parent directory specified at the end of the command. When I used the similar
command for separate tablespaces, it worked as expected.

When I run the command with the "data" dir, so that I'm just specifying 9.2 and
9.6, it works as desired. eg:

rsync --archive --delete --hard-links --size-only --no-inc-recursive /opt/PostgreSQL/9.5 \
/opt/PostgreSQL/9.6 standby.example.com:/opt/PostgreSQL

FWIW I was upgrading from 9.2.22 to 9.6.6 on CentOS 6.

Sorry I am just getting to this. I was able to reproduce your results
with rsync version 3.1.1. With /opt/PostgreSQL containing:

/opt/PostgreSQL
/opt/PostgreSQL/9.5
/opt/PostgreSQL/9.5/data
/opt/PostgreSQL/9.5/data/x
/opt/PostgreSQL/9.6
/opt/PostgreSQL/9.6/data
/opt/PostgreSQL/9.6/data/y

This script:

TMP="/tmp"

rm -rf $TMP/PostgreSQL
mkdir -p $TMP/PostgreSQL/9.5/data
mkdir -p $TMP/PostgreSQL/9.6/data

rsync --archive --delete --hard-links --size-only \
--no-inc-recursive /opt/PostgreSQL/9.5 \
/opt/PostgreSQL/9.6 $TMP/PostgreSQL

find $TMP/PostgreSQL -print

Yields:

/tmp/PostgreSQL
/tmp/PostgreSQL/9.5
/tmp/PostgreSQL/9.5/data
--> /tmp/PostgreSQL/9.5/data/x
/tmp/PostgreSQL/9.6
/tmp/PostgreSQL/9.6/data
--> /tmp/PostgreSQL/9.6/data/y

which is correct, but if I change rsync to match our docs:

rsync --archive --delete --hard-links --size-only \
--no-inc-recursive /opt/PostgreSQL/9.5/data \
/opt/PostgreSQL/9.6/data $TMP/PostgreSQL

I get:

/rtmp/PostgreSQL
/rtmp/PostgreSQL/9.5
/rtmp/PostgreSQL/9.5/data
/rtmp/PostgreSQL/9.6
/rtmp/PostgreSQL/9.6/data
--> /rtmp/PostgreSQL/data
--> /rtmp/PostgreSQL/data/x
--> /rtmp/PostgreSQL/data/y

which is incorrect and the behavior you reported.

The incorrect example was added a few months ago:

commit 9521ce4a7a1125385fb4de9689f345db594c516a
Author: Bruce Momjian <bruce@momjian.us>
Date: Wed Sep 13 09:11:28 2017 -0400

docs: improve pg_upgrade standby instructions

This makes it clear that pg_upgrade standby upgrade instructions should
only be used in link mode, adds examples, and explains how rsync works
with links.

Reported-by: Andreas Joseph Krogh

Discussion: /messages/by-id/VisenaEmail.6c.c0e592c5af4ef0a2.15e785dcb61@tc7-visena

Backpatch-through: 9.5

but the generic syntax mentioning the data directory has been there for
a while. I am wondering if people had to test this to get it working
and didn't report that saying datadir was inaccurate.

I propse the attached patch to fix the generic syntax and the example.
I will backpatch it through 9.5. As you stated, the tablespace example
is fine.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +

Attachments:

rsync.difftext/x-diff; charset=us-asciiDownload+8-8
#3Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#2)
Re: Bug in pg_upgrade standby rsync doc

On Thu, Jan 25, 2018 at 12:46:52PM -0500, Bruce Momjian wrote:

I propse the attached patch to fix the generic syntax and the example.
I will backpatch it through 9.5. As you stated, the tablespace example
is fine.

Done. Thanks for the report.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +