feat: allow restoring to different port/host/username

This commit is contained in:
Divyansh Singh 2023-06-12 21:54:39 +05:30
parent 1784ca5910
commit f558cb3156
2 changed files with 31 additions and 4 deletions

View file

@ -763,10 +763,21 @@ properties:
Database hostname to connect to. Defaults to Database hostname to connect to. Defaults to
connecting via local Unix socket. connecting via local Unix socket.
example: database.example.org example: database.example.org
restore_hostname:
type: string
description: |
Database hostname to restore to. Defaults to
the "hostname" option.
example: database.example.org
port: port:
type: integer type: integer
description: Port to connect to. Defaults to 5432. description: Port to connect to. Defaults to 5432.
example: 5433 example: 5433
restore_port:
type: integer
description: Port to restore to. Defaults to the
"port" option.
example: 5433
username: username:
type: string type: string
description: | description: |
@ -775,6 +786,12 @@ properties:
You probably want to specify the "postgres" You probably want to specify the "postgres"
superuser here when the database name is "all". superuser here when the database name is "all".
example: dbuser example: dbuser
restore_username:
type: string
description: |
Username with which to restore to the database.
Defaults to the "username" option.
example: dbuser
password: password:
type: string type: string
description: | description: |
@ -784,6 +801,13 @@ properties:
without a password or you create a ~/.pgpass without a password or you create a ~/.pgpass
file. file.
example: trustsome1 example: trustsome1
restore_password:
type: string
description: |
Password with which to connect to the database that
is being restored to. Defaults to the "password"
option.
example: trustsome1
format: format:
type: string type: string
enum: ['plain', 'custom', 'directory', 'tar'] enum: ['plain', 'custom', 'directory', 'tar']

View file

@ -217,10 +217,10 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
analyze_command = ( analyze_command = (
tuple(psql_command) tuple(psql_command)
+ ('--no-password', '--no-psqlrc', '--quiet') + ('--no-password', '--no-psqlrc', '--quiet')
+ (('--host', database['hostname']) if 'hostname' in database else ()) + (('--host', database.get('restore_hostname', database.get('hostname', ()))))
+ (('--port', str(database['port'])) if 'port' in database else ()) + (('--port', str(database.get('restore_port', database.get('port', ()))))
+ (('--username', database['username']) if 'username' in database else ()) + (('--username', database.get('restore_username', database.get('username', ()))))
+ (('--dbname', database['name']) if not all_databases else ()) + (('--dbname', database['name']) if not all_databases else ()))
+ (tuple(database['analyze_options'].split(' ')) if 'analyze_options' in database else ()) + (tuple(database['analyze_options'].split(' ')) if 'analyze_options' in database else ())
+ ('--command', 'ANALYZE') + ('--command', 'ANALYZE')
) )
@ -245,6 +245,9 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
extra_environment = make_extra_environment(database) extra_environment = make_extra_environment(database)
if 'restore_password' in database:
extra_environment['PGPASSWORD'] = database['restore_password']
logger.debug(f"{log_prefix}: Restoring PostgreSQL database {database['name']}{dry_run_label}") logger.debug(f"{log_prefix}: Restoring PostgreSQL database {database['name']}{dry_run_label}")
if dry_run: if dry_run:
return return