1
0
mirror of https://github.com/postgrespro/pg_probackup.git synced 2026-06-21 01:34:15 +02:00

[PGPRO-6938] macro conditions fixed

tags: pg_probackup
This commit is contained in:
Daniel Shelepanov
2022-08-23 20:40:42 +03:00
parent 53abc0b6e7
commit 0a1a075b12
6 changed files with 139 additions and 53 deletions
+1
View File
@@ -27,6 +27,7 @@ notifications:
# Default MODE is basic, i.e. all tests with PG_PROBACKUP_TEST_BASIC=ON
env:
- PG_VERSION=15 PG_BRANCH=master PTRACK_PATCH_PG_BRANCH=master
- PG_VERSION=15 PG_BRANCH=REL_15_STABLE PTRACK_PATCH_PG_BRANCH=REL_15_STABLE
- PG_VERSION=14 PG_BRANCH=REL_14_STABLE PTRACK_PATCH_PG_BRANCH=REL_14_STABLE
- PG_VERSION=13 PG_BRANCH=REL_13_STABLE PTRACK_PATCH_PG_BRANCH=REL_13_STABLE
- PG_VERSION=12 PG_BRANCH=REL_12_STABLE PTRACK_PATCH_PG_BRANCH=REL_12_STABLE
+38 -38
View File
@@ -6,7 +6,7 @@
`pg_probackup` is a utility to manage backup and recovery of PostgreSQL database clusters. It is designed to perform periodic backups of the PostgreSQL instance that enable you to restore the server in case of a failure.
The utility is compatible with:
* PostgreSQL 9.6, 10, 11, 12, 13, 14;
* PostgreSQL 9.6, 10, 11, 12, 13, 14, 15;
As compared to other backup solutions, `pg_probackup` offers the following benefits that can help you implement different backup strategies and deal with large amounts of data:
* Incremental backup: page-level incremental backup allows you to save disk space, speed up backup and restore. With three different incremental modes, you can plan the backup strategy in accordance with your data flow.
@@ -41,9 +41,9 @@ Regardless of the chosen backup type, all backups taken with `pg_probackup` supp
## ptrack support
`PTRACK` backup support provided via following options:
* vanilla PostgreSQL 11, 12, 13, 14 with [ptrack extension](https://github.com/postgrespro/ptrack)
* Postgres Pro Standard 11, 12, 13
* Postgres Pro Enterprise 11, 12, 13
* vanilla PostgreSQL 11, 12, 13, 14, 15 with [ptrack extension](https://github.com/postgrespro/ptrack)
* Postgres Pro Standard 11, 12, 13, 14
* Postgres Pro Enterprise 11, 12, 13, 14
## Limitations
@@ -74,62 +74,62 @@ Installers are available in release **assets**. [Latests](https://github.com/pos
#DEB Ubuntu|Debian Packages
sudo sh -c 'echo "deb [arch=amd64] https://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup.list'
sudo wget -O - https://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | sudo apt-key add - && sudo apt-get update
sudo apt-get install pg-probackup-{14,13,12,11,10,9.6}
sudo apt-get install pg-probackup-{14,13,12,11,10,9.6}-dbg
sudo apt-get install pg-probackup-{15,14,13,12,11,10,9.6}
sudo apt-get install pg-probackup-{15,14,13,12,11,10,9.6}-dbg
#DEB-SRC Packages
sudo sh -c 'echo "deb-src [arch=amd64] https://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" >>\
/etc/apt/sources.list.d/pg_probackup.list' && sudo apt-get update
sudo apt-get source pg-probackup-{14,13,12,11,10,9.6}
sudo apt-get source pg-probackup-{15,14,13,12,11,10,9.6}
#DEB Astra Linix Orel
sudo sh -c 'echo "deb [arch=amd64] https://repo.postgrespro.ru/pg_probackup/deb/ stretch main-stretch" > /etc/apt/sources.list.d/pg_probackup.list'
sudo wget -O - https://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | sudo apt-key add - && sudo apt-get update
sudo apt-get install pg-probackup-{14,13,12,11,10,9.6}{-dbg,}
sudo apt-get install pg-probackup-{15,14,13,12,11,10,9.6}{-dbg,}
#RPM Centos Packages
rpm -ivh https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-centos.noarch.rpm
yum install pg_probackup-{14,13,12,11,10,9.6}
yum install pg_probackup-{14,13,12,11,10,9.6}-debuginfo
yum install pg_probackup-{15,14,13,12,11,10,9.6}
yum install pg_probackup-{15,14,13,12,11,10,9.6}-debuginfo
#RPM RHEL Packages
rpm -ivh https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-rhel.noarch.rpm
yum install pg_probackup-{14,13,12,11,10,9.6}
yum install pg_probackup-{14,13,12,11,10,9.6}-debuginfo
yum install pg_probackup-{15,14,13,12,11,10,9.6}
yum install pg_probackup-{15,14,13,12,11,10,9.6}-debuginfo
#RPM Oracle Linux Packages
rpm -ivh https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-oraclelinux.noarch.rpm
yum install pg_probackup-{14,13,12,11,10,9.6}
yum install pg_probackup-{14,13,12,11,10,9.6}-debuginfo
yum install pg_probackup-{15,14,13,12,11,10,9.6}
yum install pg_probackup-{15,14,13,12,11,10,9.6}-debuginfo
#SRPM Centos|RHEL|OracleLinux Packages
yumdownloader --source pg_probackup-{14,13,12,11,10,9.6}
yumdownloader --source pg_probackup-{15,14,13,12,11,10,9.6}
#RPM SUSE|SLES Packages
zypper install --allow-unsigned-rpm -y https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-suse.noarch.rpm
zypper --gpg-auto-import-keys install -y pg_probackup-{14,13,12,11,10,9.6}
zypper install pg_probackup-{14,13,12,11,10,9.6}-debuginfo
zypper --gpg-auto-import-keys install -y pg_probackup-{15,14,13,12,11,10,9.6}
zypper install pg_probackup-{15,14,13,12,11,10,9.6}-debuginfo
#SRPM SUSE|SLES Packages
zypper si pg_probackup-{14,13,12,11,10,9.6}
zypper si pg_probackup-{15,14,13,12,11,10,9.6}
#RPM ALT Linux 7
sudo sh -c 'echo "rpm https://repo.postgrespro.ru/pg_probackup/rpm/latest/altlinux-p7 x86_64 vanilla" > /etc/apt/sources.list.d/pg_probackup.list'
sudo apt-get update
sudo apt-get install pg_probackup-{14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{14,13,12,11,10,9.6}-debuginfo
sudo apt-get install pg_probackup-{15,14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{15,14,13,12,11,10,9.6}-debuginfo
#RPM ALT Linux 8
sudo sh -c 'echo "rpm https://repo.postgrespro.ru/pg_probackup/rpm/latest/altlinux-p8 x86_64 vanilla" > /etc/apt/sources.list.d/pg_probackup.list'
sudo apt-get update
sudo apt-get install pg_probackup-{14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{14,13,12,11,10,9.6}-debuginfo
sudo apt-get install pg_probackup-{15,14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{15,14,13,12,11,10,9.6}-debuginfo
#RPM ALT Linux 9
sudo sh -c 'echo "rpm https://repo.postgrespro.ru/pg_probackup/rpm/latest/altlinux-p9 x86_64 vanilla" > /etc/apt/sources.list.d/pg_probackup.list'
sudo apt-get update
sudo apt-get install pg_probackup-{14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{14,13,12,11,10,9.6}-debuginfo
sudo apt-get install pg_probackup-{15,14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{15,14,13,12,11,10,9.6}-debuginfo
```
#### pg_probackup for PostgresPro Standard and Enterprise
@@ -137,8 +137,8 @@ sudo apt-get install pg_probackup-{14,13,12,11,10,9.6}-debuginfo
#DEB Ubuntu|Debian Packages
sudo sh -c 'echo "deb [arch=amd64] https://repo.postgrespro.ru/pg_probackup-forks/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup-forks.list'
sudo wget -O - https://repo.postgrespro.ru/pg_probackup-forks/keys/GPG-KEY-PG_PROBACKUP | sudo apt-key add - && sudo apt-get update
sudo apt-get install pg-probackup-{std,ent}-{13,12,11,10,9.6}
sudo apt-get install pg-probackup-{std,ent}-{13,12,11,10,9.6}-dbg
sudo apt-get install pg-probackup-{std,ent}-{14,13,12,11,10,9.6}
sudo apt-get install pg-probackup-{std,ent}-{14,13,12,11,10,9.6}-dbg
#DEB Astra Linix Orel
sudo sh -c 'echo "deb [arch=amd64] https://repo.postgrespro.ru/pg_probackup-forks/deb/ stretch main-stretch" > /etc/apt/sources.list.d/pg_probackup.list'
@@ -148,35 +148,35 @@ sudo apt-get install pg-probackup-{std,ent}-{12,11,10,9.6}{-dbg,}
#RPM Centos Packages
rpm -ivh https://repo.postgrespro.ru/pg_probackup-forks/keys/pg_probackup-repo-forks-centos.noarch.rpm
yum install pg_probackup-{std,ent}-{13,12,11,10,9.6}
yum install pg_probackup-{std,ent}-{13,12,11,10,9.6}-debuginfo
yum install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}
yum install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}-debuginfo
#RPM RHEL Packages
rpm -ivh https://repo.postgrespro.ru/pg_probackup-forks/keys/pg_probackup-repo-forks-rhel.noarch.rpm
yum install pg_probackup-{std,ent}-{13,12,11,10,9.6}
yum install pg_probackup-{std,ent}-{13,12,11,10,9.6}-debuginfo
yum install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}
yum install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}-debuginfo
#RPM Oracle Linux Packages
rpm -ivh https://repo.postgrespro.ru/pg_probackup-forks/keys/pg_probackup-repo-forks-oraclelinux.noarch.rpm
yum install pg_probackup-{std,ent}-{13,12,11,10,9.6}
yum install pg_probackup-{std,ent}-{13,12,11,10,9.6}-debuginfo
yum install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}
yum install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}-debuginfo
#RPM ALT Linux 7
sudo sh -c 'echo "rpm https://repo.postgrespro.ru/pg_probackup-forks/rpm/latest/altlinux-p7 x86_64 forks" > /etc/apt/sources.list.d/pg_probackup_forks.list'
sudo apt-get update
sudo apt-get install pg_probackup-{std,ent}-{13,12,11,10,9.6}
sudo apt-get install pg_probackup-{std,ent}-{13,12,11,10,9.6}-debuginfo
sudo apt-get install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}-debuginfo
#RPM ALT Linux 8
sudo sh -c 'echo "rpm https://repo.postgrespro.ru/pg_probackup-forks/rpm/latest/altlinux-p8 x86_64 forks" > /etc/apt/sources.list.d/pg_probackup_forks.list'
sudo apt-get update
sudo apt-get install pg_probackup-{std,ent}-{13,12,11,10,9.6}
sudo apt-get install pg_probackup-{std,ent}-{13,12,11,10,9.6}-debuginfo
sudo apt-get install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}-debuginfo
#RPM ALT Linux 9
sudo sh -c 'echo "rpm https://repo.postgrespro.ru/pg_probackup-forks/rpm/latest/altlinux-p9 x86_64 forks" > /etc/apt/sources.list.d/pg_probackup_forks.list' && sudo apt-get update
sudo apt-get install pg_probackup-{std,ent}-{13,12,11,10,9.6}
sudo apt-get install pg_probackup-{std,ent}-{13,12,11,10,9.6}-debuginfo
sudo apt-get install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}
sudo apt-get install pg_probackup-{std,ent}-{14,13,12,11,10,9.6}-debuginfo
```
Once you have `pg_probackup` installed, complete [the setup](https://postgrespro.github.io/pg_probackup/#pbk-install-and-setup).
+22 -1
View File
@@ -653,7 +653,7 @@ GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup;
COMMIT;
</programlisting>
<para>
For <productname>PostgreSQL</productname> 10 or higher:
For <productname>PostgreSQL</productname> 10:
</para>
<programlisting>
BEGIN;
@@ -672,6 +672,27 @@ GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup;
COMMIT;
</programlisting>
<para>
For <productname>PostgreSQL</productname> 15 or higher:
</para>
<programlisting>
BEGIN;
CREATE ROLE backup WITH LOGIN;
GRANT USAGE ON SCHEMA pg_catalog TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start(text, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop(boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup;
COMMIT;
</programlisting>
<para>
In the
+60 -14
View File
@@ -1056,14 +1056,22 @@ pg_start_backup(const char *label, bool smooth, pgBackup *backup,
uint32 lsn_lo;
params[0] = label;
#if PG_VERSION_NUM >= 150000
elog(INFO, "wait for pg_backup_start()");
#else
elog(INFO, "wait for pg_start_backup()");
#endif
/* 2nd argument is 'fast'*/
params[1] = smooth ? "false" : "true";
res = pgut_execute(conn,
"SELECT pg_catalog.pg_backup_start($1, $2)",
2,
params);
#if PG_VERSION_NUM >= 150000
"SELECT pg_catalog.pg_backup_start($1, $2)",
#else
"SELECT pg_catalog.pg_start_backup($1, $2, false)",
#endif
2,
params);
/*
* Set flag that pg_start_backup() was called. If an error will happen it
@@ -1612,7 +1620,7 @@ pg_stop_backup_send(PGconn *conn, int server_version, bool is_started_on_replica
"SELECT"
" pg_catalog.txid_snapshot_xmax(pg_catalog.txid_current_snapshot()),"
" current_timestamp(0)::timestamptz,"
" pg_catalog.pg_backup_stop() as lsn",
" pg_catalog.pg_stop_backup() as lsn",
stop_backup_on_master_query[] =
"SELECT"
" pg_catalog.txid_snapshot_xmax(pg_catalog.txid_current_snapshot()),"
@@ -1620,7 +1628,7 @@ pg_stop_backup_send(PGconn *conn, int server_version, bool is_started_on_replica
" lsn,"
" labelfile,"
" spcmapfile"
" FROM pg_catalog.pg_backup_stop(false)",
" FROM pg_catalog.pg_stop_backup(false, false)",
stop_backup_on_master_before10_query[] =
"SELECT"
" pg_catalog.txid_snapshot_xmax(pg_catalog.txid_current_snapshot()),"
@@ -1628,7 +1636,15 @@ pg_stop_backup_send(PGconn *conn, int server_version, bool is_started_on_replica
" lsn,"
" labelfile,"
" spcmapfile"
" FROM pg_catalog.pg_backup_stop()",
" FROM pg_catalog.pg_stop_backup(false)",
stop_backup_on_master_after15_query[] =
"SELECT"
" pg_catalog.txid_snapshot_xmax(pg_catalog.txid_current_snapshot()),"
" current_timestamp(0)::timestamptz,"
" lsn,"
" labelfile,"
" spcmapfile"
" FROM pg_catalog.pg_backup_stop(false)",
/*
* In case of backup from replica >= 9.6 we do not trust minRecPoint
* and stop_backup LSN, so we use latest replayed LSN as STOP LSN.
@@ -1640,7 +1656,7 @@ pg_stop_backup_send(PGconn *conn, int server_version, bool is_started_on_replica
" pg_catalog.pg_last_wal_replay_lsn(),"
" labelfile,"
" spcmapfile"
" FROM pg_catalog.pg_backup_stop(false)",
" FROM pg_catalog.pg_stop_backup(false, false)",
stop_backup_on_replica_before10_query[] =
"SELECT"
" pg_catalog.txid_snapshot_xmax(pg_catalog.txid_current_snapshot()),"
@@ -1648,19 +1664,33 @@ pg_stop_backup_send(PGconn *conn, int server_version, bool is_started_on_replica
" pg_catalog.pg_last_xlog_replay_location(),"
" labelfile,"
" spcmapfile"
" FROM pg_catalog.pg_backup_stop()";
" FROM pg_catalog.pg_stop_backup(false)",
stop_backup_on_replica_after15_query[] =
"SELECT"
" pg_catalog.txid_snapshot_xmax(pg_catalog.txid_current_snapshot()),"
" current_timestamp(0)::timestamptz,"
" pg_catalog.pg_last_wal_replay_lsn(),"
" labelfile,"
" spcmapfile"
" FROM pg_catalog.pg_backup_stop(false)";
const char * const stop_backup_query =
is_exclusive ?
stop_exlusive_backup_query :
server_version >= 100000 ?
server_version >= 150000 ?
(is_started_on_replica ?
stop_backup_on_replica_query :
stop_backup_on_master_query
stop_backup_on_replica_after15_query :
stop_backup_on_master_after15_query
) :
(is_started_on_replica ?
stop_backup_on_replica_before10_query :
stop_backup_on_master_before10_query
(server_version >= 100000 ?
(is_started_on_replica ?
stop_backup_on_replica_query :
stop_backup_on_master_query
) :
(is_started_on_replica ?
stop_backup_on_replica_before10_query :
stop_backup_on_master_before10_query
)
);
bool sent = false;
@@ -1676,7 +1706,11 @@ pg_stop_backup_send(PGconn *conn, int server_version, bool is_started_on_replica
*/
sent = pgut_send(conn, stop_backup_query, 0, NULL, WARNING);
if (!sent)
#if PG_VERSION_NUM >= 150000
elog(ERROR, "Failed to send pg_backup_stop query");
#else
elog(ERROR, "Failed to send pg_stop_backup query");
#endif
/* After we have sent pg_stop_backup, we don't need this callback anymore */
pgut_atexit_pop(backup_stopbackup_callback, &stop_callback_params);
@@ -1722,7 +1756,11 @@ pg_stop_backup_consume(PGconn *conn, int server_version,
if (interrupted)
{
pgut_cancel(conn);
#if PG_VERSION_NUM >= 150000
elog(ERROR, "interrupted during waiting for pg_backup_stop");
#else
elog(ERROR, "interrupted during waiting for pg_stop_backup");
#endif
}
if (pg_stop_backup_timeout == 1)
@@ -1735,7 +1773,11 @@ pg_stop_backup_consume(PGconn *conn, int server_version,
if (pg_stop_backup_timeout > timeout)
{
pgut_cancel(conn);
#if PG_VERSION_NUM >= 150000
elog(ERROR, "pg_backup_stop doesn't answer in %d seconds, cancel it", timeout);
#else
elog(ERROR, "pg_stop_backup doesn't answer in %d seconds, cancel it", timeout);
#endif
}
}
else
@@ -1747,7 +1789,11 @@ pg_stop_backup_consume(PGconn *conn, int server_version,
/* Check successfull execution of pg_stop_backup() */
if (!query_result)
#if PG_VERSION_NUM >= 150000
elog(ERROR, "pg_backup_stop() failed");
#else
elog(ERROR, "pg_stop_backup() failed");
#endif
else
{
switch (PQresultStatus(query_result))
+12
View File
@@ -1773,7 +1773,11 @@ extractPageInfo(XLogReaderState *record, XLogReaderData *reader_data,
/* Is this a special record type that I recognize? */
if (rmid == RM_DBASE_ID
#if PG_VERSION_NUM >= 150000
&& (rminfo == XLOG_DBASE_CREATE_WAL_LOG || rminfo == XLOG_DBASE_CREATE_FILE_COPY))
#else
&& rminfo == XLOG_DBASE_CREATE)
#endif
{
/*
* New databases can be safely ignored. They would be completely
@@ -1827,13 +1831,21 @@ extractPageInfo(XLogReaderState *record, XLogReaderData *reader_data,
RmgrNames[rmid], info);
}
#if PG_VERSION_NUM >= 150000
for (block_id = 0; block_id <= record->record->max_block_id; block_id++)
#else
for (block_id = 0; block_id <= record->max_block_id; block_id++)
#endif
{
RelFileNode rnode;
ForkNumber forknum;
BlockNumber blkno;
#if PG_VERSION_NUM >= 150000
if (!XLogRecGetBlockTagExtended(record, block_id, &rnode, &forknum, &blkno, NULL))
#else
if (!XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blkno))
#endif
continue;
/* We only care about the main fork; others are copied as is */
+6
View File
@@ -50,6 +50,12 @@
#include <pthread.h>
#endif
#if PG_VERSION_NUM >= 150000
// _() is explicitly undefined in libpq-int.h
// https://github.com/postgres/postgres/commit/28ec316787674dd74d00b296724a009b6edc2fb0
#define _(s) gettext(s)
#endif
/* Wrap the code that we're going to delete after refactoring in this define*/
#define REFACTORE_ME