@ -962,6 +962,12 @@ opt_path_map(ConfigOption *opt, const char *arg, TablespaceList *list,
|
|||||||
else
|
else
|
||||||
list->head = cell;
|
list->head = cell;
|
||||||
list->tail = cell;
|
list->tail = cell;
|
||||||
|
|
||||||
|
if (strncmp(type, "tablespace", strlen(type)) == 0) {
|
||||||
|
specify_tbsdir = true;
|
||||||
|
} else if (strncmp(type, "external directory", strlen(type)) == 0) {
|
||||||
|
specify_extdir = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse tablespace mapping */
|
/* Parse tablespace mapping */
|
||||||
|
@ -137,7 +137,7 @@ void help_pg_probackup(void)
|
|||||||
printf(_(" [--compress-algorithm=compress-algorithm]\n"));
|
printf(_(" [--compress-algorithm=compress-algorithm]\n"));
|
||||||
printf(_(" [--compress-level=compress-level]\n"));
|
printf(_(" [--compress-level=compress-level]\n"));
|
||||||
printf(_(" [--compress]\n"));
|
printf(_(" [--compress]\n"));
|
||||||
printf(_(" [-d dbname] [-h host] [-p port] [-U username] [-w] [-W]\n"));
|
printf(_(" [-d dbname] [-h host] [-p port] [-U username] [-w] [-W password]\n"));
|
||||||
printf(_(" [--remote-proto=protocol] [--remote-host=destination]\n"));
|
printf(_(" [--remote-proto=protocol] [--remote-host=destination]\n"));
|
||||||
printf(_(" [--remote-path=path] [--remote-user=username]\n"));
|
printf(_(" [--remote-path=path] [--remote-user=username]\n"));
|
||||||
printf(_(" [--remote-port=port] [--ssh-options=ssh_options]\n"));
|
printf(_(" [--remote-port=port] [--ssh-options=ssh_options]\n"));
|
||||||
@ -410,7 +410,7 @@ static void help_backup(void)
|
|||||||
printf(_(" [--compress-algorithm=compress-algorithm]\n"));
|
printf(_(" [--compress-algorithm=compress-algorithm]\n"));
|
||||||
printf(_(" [--compress-level=compress-level]\n"));
|
printf(_(" [--compress-level=compress-level]\n"));
|
||||||
printf(_(" [--compress]\n"));
|
printf(_(" [--compress]\n"));
|
||||||
printf(_(" [-d dbname] [-h host] [-p port] [-U username] [-w] [-W]\n"));
|
printf(_(" [-d dbname] [-h host] [-p port] [-U username] [-w] [-W password]\n"));
|
||||||
printf(_(" [--remote-proto=protocol] [--remote-host=destination]\n"));
|
printf(_(" [--remote-proto=protocol] [--remote-host=destination]\n"));
|
||||||
printf(_(" [--remote-path=path] [--remote-user=username]\n"));
|
printf(_(" [--remote-path=path] [--remote-user=username]\n"));
|
||||||
printf(_(" [--remote-port=port] [--ssh-options=ssh_options]\n"));
|
printf(_(" [--remote-port=port] [--ssh-options=ssh_options]\n"));
|
||||||
@ -484,7 +484,7 @@ static void help_backup(void)
|
|||||||
printf(_(" -h, --pghost=hostname database server host or socket directory(default: 'local socket')\n"));
|
printf(_(" -h, --pghost=hostname database server host or socket directory(default: 'local socket')\n"));
|
||||||
printf(_(" -p, --pgport=port database server port (default: 5432)\n"));
|
printf(_(" -p, --pgport=port database server port (default: 5432)\n"));
|
||||||
printf(_(" -w, --no-password never prompt for password\n"));
|
printf(_(" -w, --no-password never prompt for password\n"));
|
||||||
printf(_(" -W, --password force password prompt\n"));
|
printf(_(" -W, --password=password the password of specified database user\n"));
|
||||||
|
|
||||||
printf(_("\n Remote options:\n"));
|
printf(_("\n Remote options:\n"));
|
||||||
printf(_(" --remote-proto=protocol remote protocol to use\n"));
|
printf(_(" --remote-proto=protocol remote protocol to use\n"));
|
||||||
|
@ -102,6 +102,9 @@ IncrRestoreMode incremental_mode = INCR_NONE;
|
|||||||
bool skip_block_validation = false;
|
bool skip_block_validation = false;
|
||||||
bool skip_external_dirs = false;
|
bool skip_external_dirs = false;
|
||||||
|
|
||||||
|
bool specify_extdir = false;
|
||||||
|
bool specify_tbsdir = false;
|
||||||
|
|
||||||
/* delete options */
|
/* delete options */
|
||||||
bool delete_wal = false;
|
bool delete_wal = false;
|
||||||
bool delete_expired = false;
|
bool delete_expired = false;
|
||||||
@ -235,8 +238,7 @@ setMyLocation(void)
|
|||||||
/*
|
/*
|
||||||
* Entry point of pg_probackup command.
|
* Entry point of pg_probackup command.
|
||||||
*/
|
*/
|
||||||
int
|
int main(int argc, char *argv[])
|
||||||
main(int argc, char *argv[])
|
|
||||||
{
|
{
|
||||||
char *command = NULL,
|
char *command = NULL,
|
||||||
*command_name;
|
*command_name;
|
||||||
@ -382,11 +384,19 @@ main(int argc, char *argv[])
|
|||||||
optind += 1;
|
optind += 1;
|
||||||
/* Parse command line only arguments */
|
/* Parse command line only arguments */
|
||||||
config_get_opt(argc, argv, cmd_options, instance_options);
|
config_get_opt(argc, argv, cmd_options, instance_options);
|
||||||
|
|
||||||
if (password) {
|
if (password) {
|
||||||
|
if (!prompt_password) {
|
||||||
|
elog(ERROR, "You cannot specify --password and --no-password options together");
|
||||||
|
}
|
||||||
replace_password(argc, argv, "-W");
|
replace_password(argc, argv, "-W");
|
||||||
replace_password(argc, argv, "--password");
|
replace_password(argc, argv, "--password");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (specify_tbsdir && !specify_extdir) {
|
||||||
|
elog(ERROR, "If specify --tablespace-mapping option, you must specify --external-mapping option together");
|
||||||
|
}
|
||||||
|
|
||||||
pgut_init();
|
pgut_init();
|
||||||
|
|
||||||
if (help_opt)
|
if (help_opt)
|
||||||
|
@ -719,6 +719,8 @@ extern bool compress_shortcut;
|
|||||||
|
|
||||||
/* other options */
|
/* other options */
|
||||||
extern char *instance_name;
|
extern char *instance_name;
|
||||||
|
extern bool specify_extdir;
|
||||||
|
extern bool specify_tbsdir;
|
||||||
|
|
||||||
/* show options */
|
/* show options */
|
||||||
extern ShowFormat show_format;
|
extern ShowFormat show_format;
|
||||||
|
@ -24,8 +24,7 @@
|
|||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
|
|
||||||
bool prompt_password = true;
|
bool prompt_password = true;
|
||||||
bool force_password = false;
|
|
||||||
|
|
||||||
/* Database connections */
|
/* Database connections */
|
||||||
static PGcancel *volatile cancel_conn = NULL;
|
static PGcancel *volatile cancel_conn = NULL;
|
||||||
@ -554,21 +553,14 @@ escapeConnectionParameter(const char *src)
|
|||||||
/* TODO: it is better to use PQconnectdbParams like in psql
|
/* TODO: it is better to use PQconnectdbParams like in psql
|
||||||
* It will allow to set application_name for pg_probackup
|
* It will allow to set application_name for pg_probackup
|
||||||
*/
|
*/
|
||||||
PGconn *
|
PGconn* pgut_connect(const char *host, const char *port,
|
||||||
pgut_connect(const char *host, const char *port,
|
const char *dbname, const char *username)
|
||||||
const char *dbname, const char *username)
|
|
||||||
{
|
{
|
||||||
PGconn *conn;
|
PGconn *conn;
|
||||||
|
|
||||||
if (interrupted && !in_cleanup)
|
if (interrupted && !in_cleanup)
|
||||||
elog(ERROR, "interrupted");
|
elog(ERROR, "interrupted");
|
||||||
|
|
||||||
if (force_password && !prompt_password)
|
|
||||||
elog(ERROR, "You cannot specify --password and --no-password options together");
|
|
||||||
|
|
||||||
if (!password && force_password)
|
|
||||||
prompt_for_password(username);
|
|
||||||
|
|
||||||
/* Start the connection. Loop until we have a password if requested by backend. */
|
/* Start the connection. Loop until we have a password if requested by backend. */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -602,9 +594,8 @@ pgut_connect(const char *host, const char *port,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PGconn *
|
PGconn* pgut_connect_replication(const char *host, const char *port,
|
||||||
pgut_connect_replication(const char *host, const char *port,
|
const char *dbname, const char *username)
|
||||||
const char *dbname, const char *username)
|
|
||||||
{
|
{
|
||||||
PGconn *tmpconn;
|
PGconn *tmpconn;
|
||||||
int argcount = 7; /* dbname, replication, fallback_app_name,
|
int argcount = 7; /* dbname, replication, fallback_app_name,
|
||||||
@ -616,12 +607,6 @@ pgut_connect_replication(const char *host, const char *port,
|
|||||||
if (interrupted && !in_cleanup)
|
if (interrupted && !in_cleanup)
|
||||||
elog(ERROR, "interrupted");
|
elog(ERROR, "interrupted");
|
||||||
|
|
||||||
if (force_password && !prompt_password)
|
|
||||||
elog(ERROR, "You cannot specify --password and --no-password options together");
|
|
||||||
|
|
||||||
if (!password && force_password)
|
|
||||||
prompt_for_password(username);
|
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
keywords = (const char**)pg_malloc0((argcount + 1) * sizeof(*keywords));
|
keywords = (const char**)pg_malloc0((argcount + 1) * sizeof(*keywords));
|
||||||
|
@ -23,7 +23,6 @@ extern void pgut_help(bool details);
|
|||||||
* pgut framework variables and functions
|
* pgut framework variables and functions
|
||||||
*/
|
*/
|
||||||
extern bool prompt_password;
|
extern bool prompt_password;
|
||||||
extern bool force_password;
|
|
||||||
|
|
||||||
extern bool interrupted;
|
extern bool interrupted;
|
||||||
extern bool in_cleanup;
|
extern bool in_cleanup;
|
||||||
|
Reference in New Issue
Block a user