1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-04-13 11:30:40 +02:00

Add pg-database option.

In some rare cases there is no postgres database so this option may be used to specify an alternate database.
This commit is contained in:
David Steele 2020-12-02 22:42:50 -05:00
parent 1913ecee63
commit b0ea337965
12 changed files with 167 additions and 22 deletions

View File

@ -298,6 +298,7 @@ use constant CFGOPT_PG_HOST_CONFIG_PATH => CFGOPT_PG
use constant CFGOPT_PG_HOST_PORT => CFGOPT_PG_HOST . '-port';
use constant CFGOPT_PG_HOST_USER => CFGOPT_PG_HOST . '-user';
use constant CFGOPT_PG_DATABASE => CFGDEF_PREFIX_PG . '-database';
use constant CFGOPT_PG_PATH => CFGDEF_PREFIX_PG . '-path';
use constant CFGOPT_PG_PORT => CFGDEF_PREFIX_PG . '-port';
use constant CFGOPT_PG_SOCKET_PATH => CFGDEF_PREFIX_PG . '-socket-path';
@ -2736,6 +2737,16 @@ my %hConfigDefine =
&CFGDEF_REQUIRED => false,
},
&CFGOPT_PG_DATABASE =>
{
&CFGDEF_GROUP => CFGOPTGRP_PG,
&CFGDEF_SECTION => CFGDEF_SECTION_STANZA,
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
&CFGDEF_DEFAULT => 'postgres',
&CFGDEF_COMMAND => CFGOPT_PG_PORT,
&CFGDEF_DEPEND => CFGOPT_PG_PORT,
},
&CFGOPT_PG_PATH =>
{
&CFGDEF_GROUP => CFGOPTGRP_PG,

View File

@ -1062,6 +1062,17 @@
<example>1</example>
</config-key>
<!-- ======================================================================================================= -->
<config-key id="pg-database" name="PostgreSQL Database">
<summary><postgres/> database.</summary>
<text>The database name used when connecting to <postgres/>. The default is usually best but some installations may not contain this database.
Note that for legacy reasons the setting of the <id>PGDATABASE</id> environment variable will be ignored.</text>
<example>backupdb</example>
</config-key>
<!-- CONFIG - STANZA SECTION - PG-PATH KEY -->
<config-key id="pg-path" name="PostgreSQL Path">
<summary><postgres/> data directory.</summary>

View File

@ -66,6 +66,14 @@
<p>Add <br-option>repo-azure-endpoint</br-option> option.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-reviewer id="cynthia.shang"/>
</release-item-contributor-list>
<p>Add <br-option>pg-database</br-option> option.</p>
</release-item>
</release-feature-list>
<release-improvement-list>

View File

@ -656,6 +656,14 @@ static ConfigOptionData configOptionData[CFG_OPTION_TOTAL] = CONFIG_OPTION_LIST
CONFIG_OPTION_NAME("pg")
)
//------------------------------------------------------------------------------------------------------------------------------
CONFIG_OPTION
(
CONFIG_OPTION_NAME("pg-database")
CONFIG_OPTION_GROUP(true)
CONFIG_OPTION_GROUP_ID(cfgOptGrpPg)
)
//------------------------------------------------------------------------------------------------------------------------------
CONFIG_OPTION
(

View File

@ -203,7 +203,7 @@ Option constants
#define CFGOPT_TYPE "type"
STRING_DECLARE(CFGOPT_TYPE_STR);
#define CFG_OPTION_TOTAL 125
#define CFG_OPTION_TOTAL 126
/***********************************************************************************************************************************
Command enum
@ -291,6 +291,7 @@ typedef enum
cfgOptOnline,
cfgOptOutput,
cfgOptPg,
cfgOptPgDatabase,
cfgOptPgHost,
cfgOptPgHostCmd,
cfgOptPgHostConfig,

View File

@ -2276,6 +2276,44 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST
)
)
// -----------------------------------------------------------------------------------------------------------------------------
CFGDEFDATA_OPTION
(
CFGDEFDATA_OPTION_NAME("pg-database")
CFGDEFDATA_OPTION_REQUIRED(true)
CFGDEFDATA_OPTION_SECTION(cfgDefSectionStanza)
CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString)
CFGDEFDATA_OPTION_INTERNAL(false)
CFGDEFDATA_OPTION_INDEX_TOTAL(8)
CFGDEFDATA_OPTION_SECURE(false)
CFGDEFDATA_OPTION_HELP_SECTION("stanza")
CFGDEFDATA_OPTION_HELP_SUMMARY("PostgreSQL database.")
CFGDEFDATA_OPTION_HELP_DESCRIPTION
(
"The database name used when connecting to PostgreSQL. The default is usually best but some installations may not "
"contain this database.\n"
"\n"
"Note that for legacy reasons the setting of the PGDATABASE environment variable will be ignored."
)
CFGDEFDATA_OPTION_COMMAND_LIST
(
CFGDEFDATA_OPTION_COMMAND(cfgCmdBackup)
CFGDEFDATA_OPTION_COMMAND(cfgCmdCheck)
CFGDEFDATA_OPTION_COMMAND(cfgCmdStanzaCreate)
CFGDEFDATA_OPTION_COMMAND(cfgCmdStanzaDelete)
CFGDEFDATA_OPTION_COMMAND(cfgCmdStanzaUpgrade)
)
CFGDEFDATA_OPTION_OPTIONAL_LIST
(
CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgOptPgPath)
CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("postgres")
)
)
// -----------------------------------------------------------------------------------------------------------------------------
CFGDEFDATA_OPTION
(

View File

@ -542,6 +542,81 @@ static const struct option optionList[] =
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | cfgOptPg,
},
// pg-database option
// -----------------------------------------------------------------------------------------------------------------------------
{
.name = "pg1-database",
.has_arg = required_argument,
.val = PARSE_OPTION_FLAG | (0 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "reset-pg1-database",
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | (0 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "pg2-database",
.has_arg = required_argument,
.val = PARSE_OPTION_FLAG | (1 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "reset-pg2-database",
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | (1 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "pg3-database",
.has_arg = required_argument,
.val = PARSE_OPTION_FLAG | (2 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "reset-pg3-database",
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | (2 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "pg4-database",
.has_arg = required_argument,
.val = PARSE_OPTION_FLAG | (3 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "reset-pg4-database",
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | (3 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "pg5-database",
.has_arg = required_argument,
.val = PARSE_OPTION_FLAG | (4 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "reset-pg5-database",
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | (4 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "pg6-database",
.has_arg = required_argument,
.val = PARSE_OPTION_FLAG | (5 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "reset-pg6-database",
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | (5 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "pg7-database",
.has_arg = required_argument,
.val = PARSE_OPTION_FLAG | (6 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "reset-pg7-database",
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | (6 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "pg8-database",
.has_arg = required_argument,
.val = PARSE_OPTION_FLAG | (7 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
{
.name = "reset-pg8-database",
.val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | (7 << PARSE_KEY_IDX_SHIFT) | cfgOptPgDatabase,
},
// pg-host option and deprecations
// -----------------------------------------------------------------------------------------------------------------------------
{
@ -2850,6 +2925,7 @@ static const ConfigOption optionResolveOrder[] =
cfgOptArchiveCheck,
cfgOptArchiveCopy,
cfgOptForce,
cfgOptPgDatabase,
cfgOptPgHost,
cfgOptPgHostCmd,
cfgOptPgHostConfig,

View File

@ -30,8 +30,9 @@ dbGetIdx(unsigned int pgIdx)
{
result = dbNew(
pgClientNew(
cfgOptionIdxStrNull(cfgOptPgSocketPath, pgIdx), cfgOptionIdxUInt(cfgOptPgPort, pgIdx), PG_DB_POSTGRES_STR,
cfgOptionIdxStrNull(cfgOptPgUser, pgIdx), (TimeMSec)(cfgOptionDbl(cfgOptDbTimeout) * MSEC_PER_SEC)),
cfgOptionIdxStrNull(cfgOptPgSocketPath, pgIdx), cfgOptionIdxUInt(cfgOptPgPort, pgIdx),
cfgOptionIdxStr(cfgOptPgDatabase, pgIdx), cfgOptionIdxStrNull(cfgOptPgUser, pgIdx),
(TimeMSec)(cfgOptionDbl(cfgOptDbTimeout) * MSEC_PER_SEC)),
NULL, applicationName);
}
else

View File

@ -64,7 +64,7 @@ dbProtocol(const String *command, const VariantList *paramList, ProtocolServer *
{
// Only a single db is passed to the remote
PgClient *pgClient = pgClientNew(
cfgOptionStrNull(cfgOptPgSocketPath), cfgOptionUInt(cfgOptPgPort), PG_DB_POSTGRES_STR,
cfgOptionStrNull(cfgOptPgSocketPath), cfgOptionUInt(cfgOptPgPort), cfgOptionStr(cfgOptPgDatabase),
cfgOptionStrNull(cfgOptPgUser), (TimeMSec)(cfgOptionDbl(cfgOptDbTimeout) * MSEC_PER_SEC));
pgClientOpen(pgClient);

View File

@ -49,11 +49,6 @@ really old storage with 512-byte sectors. This is true across all versions of P
#define PG_CONTROL_SIZE ((unsigned int)(8 * 1024))
#define PG_CONTROL_DATA_SIZE ((unsigned int)(512))
/***********************************************************************************************************************************
Name of default PostgreSQL database used for running all queries and commands
***********************************************************************************************************************************/
STRING_EXTERN(PG_DB_POSTGRES_STR, PG_DB_POSTGRES);
/***********************************************************************************************************************************
PostgreSQL interface definitions

View File

@ -60,12 +60,6 @@ Defines for various Postgres paths and files
#define PG_NAME_XLOG "xlog"
STRING_DECLARE(PG_NAME_XLOG_STR);
/***********************************************************************************************************************************
Name of default PostgreSQL database used for running all queries and commands
***********************************************************************************************************************************/
#define PG_DB_POSTGRES "postgres"
STRING_DECLARE(PG_DB_POSTGRES_STR);
/***********************************************************************************************************************************
Define default page size

View File

@ -72,6 +72,7 @@ testRun(void)
StringList *argList = strLstNew();
strLstAddZ(argList, "--stanza=test1");
strLstAddZ(argList, "--pg1-path=/path/to/pg");
strLstAddZ(argList, "--pg1-database=testdb");
strLstAddZ(argList, "--" CFGOPT_REMOTE_TYPE "=" PROTOCOL_REMOTE_TYPE_PG);
strLstAddZ(argList, "--process=0");
harnessCfgLoadRole(cfgCmdBackup, cfgCmdRoleRemote, argList);
@ -79,13 +80,13 @@ testRun(void)
// Set script
harnessPqScriptSet((HarnessPq [])
{
HRNPQ_MACRO_OPEN(1, "dbname='postgres' port=5432"),
HRNPQ_MACRO_OPEN(1, "dbname='testdb' port=5432"),
HRNPQ_MACRO_SET_SEARCH_PATH(1),
HRNPQ_MACRO_SET_CLIENT_ENCODING(1),
HRNPQ_MACRO_VALIDATE_QUERY(1, PG_VERSION_84, "/pgdata", NULL, NULL),
HRNPQ_MACRO_CLOSE(1),
HRNPQ_MACRO_OPEN(1, "dbname='postgres' port=5432"),
HRNPQ_MACRO_OPEN(1, "dbname='testdb' port=5432"),
HRNPQ_MACRO_SET_SEARCH_PATH(1),
HRNPQ_MACRO_SET_CLIENT_ENCODING(1),
HRNPQ_MACRO_VALIDATE_QUERY(1, PG_VERSION_84, "/pgdata", NULL, NULL),
@ -143,6 +144,7 @@ testRun(void)
strLstAddZ(argList, "--stanza=test1");
strLstAddZ(argList, "--repo1-retention-full=1");
strLstAddZ(argList, "--pg1-path=/pg1");
strLstAddZ(argList, "--pg1-database=backupdb");
harnessCfgLoad(cfgCmdBackup, argList);
// -------------------------------------------------------------------------------------------------------------------------
@ -151,7 +153,7 @@ testRun(void)
harnessPqScriptSet((HarnessPq [])
{
// Connect to primary
HRNPQ_MACRO_OPEN(1, "dbname='postgres' port=5432"),
HRNPQ_MACRO_OPEN(1, "dbname='backupdb' port=5432"),
HRNPQ_MACRO_SET_SEARCH_PATH(1),
HRNPQ_MACRO_SET_CLIENT_ENCODING(1),
@ -199,7 +201,7 @@ testRun(void)
harnessPqScriptSet((HarnessPq [])
{
// Connect to primary
HRNPQ_MACRO_OPEN_LE_91(1, "dbname='postgres' port=5432", PG_VERSION_83, "/pg1", NULL, NULL),
HRNPQ_MACRO_OPEN_LE_91(1, "dbname='backupdb' port=5432", PG_VERSION_83, "/pg1", NULL, NULL),
// Get advisory lock
HRNPQ_MACRO_ADVISORY_LOCK(1, true),
@ -226,7 +228,7 @@ testRun(void)
harnessPqScriptSet((HarnessPq [])
{
// Connect to primary
HRNPQ_MACRO_OPEN_GE_92(1, "dbname='postgres' port=5432", PG_VERSION_95, "/pg1", false, NULL, NULL),
HRNPQ_MACRO_OPEN_GE_92(1, "dbname='backupdb' port=5432", PG_VERSION_95, "/pg1", false, NULL, NULL),
// Get start time
HRNPQ_MACRO_TIME_QUERY(1, 1000),
@ -282,7 +284,7 @@ testRun(void)
harnessPqScriptSet((HarnessPq [])
{
// Connect to primary
HRNPQ_MACRO_OPEN_GE_92(1, "dbname='postgres' port=5432", PG_VERSION_95, "/pg1", false, NULL, NULL),
HRNPQ_MACRO_OPEN_GE_92(1, "dbname='backupdb' port=5432", PG_VERSION_95, "/pg1", false, NULL, NULL),
// Start backup when backup is in progress
HRNPQ_MACRO_ADVISORY_LOCK(1, true),
@ -321,7 +323,7 @@ testRun(void)
harnessPqScriptSet((HarnessPq [])
{
// Connect to primary
HRNPQ_MACRO_OPEN_GE_96(1, "dbname='postgres' port=5432", PG_VERSION_96, "/pg1", false, NULL, NULL),
HRNPQ_MACRO_OPEN_GE_96(1, "dbname='backupdb' port=5432", PG_VERSION_96, "/pg1", false, NULL, NULL),
// Start backup
HRNPQ_MACRO_ADVISORY_LOCK(1, true),