feat: restore specific schemas
This commit is contained in:
parent
a9a65ebe54
commit
9bc2322f9a
3 changed files with 14 additions and 0 deletions
|
@ -68,12 +68,15 @@ def restore_single_database(
|
|||
archive_name,
|
||||
hook_name,
|
||||
database,
|
||||
schemas
|
||||
): # pragma: no cover
|
||||
'''
|
||||
Given (among other things) an archive name, a database hook name, and a configured database
|
||||
configuration dict, restore that database from the archive.
|
||||
'''
|
||||
logger.info(f'{repository}: Restoring database {database["name"]}')
|
||||
if schemas:
|
||||
database['schemas'] = schemas
|
||||
|
||||
dump_pattern = borgmatic.hooks.dispatch.call_hooks(
|
||||
'make_database_dump_pattern',
|
||||
|
@ -314,6 +317,7 @@ def run_restore(
|
|||
archive_name,
|
||||
found_hook_name or hook_name,
|
||||
found_database,
|
||||
schemas = restore_arguments.schemas,
|
||||
)
|
||||
|
||||
# For any database that weren't found via exact matches in the hooks configuration, try to
|
||||
|
@ -343,6 +347,7 @@ def run_restore(
|
|||
archive_name,
|
||||
found_hook_name or hook_name,
|
||||
database,
|
||||
schemas = restore_arguments.schemas,
|
||||
)
|
||||
|
||||
borgmatic.hooks.dispatch.call_hooks_even_if_unconfigured(
|
||||
|
|
|
@ -629,6 +629,13 @@ def make_parsers():
|
|||
dest='databases',
|
||||
help="Names of databases to restore from archive, defaults to all databases. Note that any databases to restore must be defined in borgmatic's configuration",
|
||||
)
|
||||
restore_group.add_argument(
|
||||
'--schema',
|
||||
metavar='NAME',
|
||||
nargs='+',
|
||||
dest='schemas',
|
||||
help="Names of schemas to restore from the database, defaults to all schemas."
|
||||
)
|
||||
restore_group.add_argument(
|
||||
'-h', '--help', action='help', help='Show this help message and exit'
|
||||
)
|
||||
|
|
|
@ -213,6 +213,7 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
|
|||
+ ('--command', 'ANALYZE')
|
||||
)
|
||||
pg_restore_command = database.get('pg_restore_command') or 'pg_restore'
|
||||
backup_schemas = ', '.join(database['schemas']) if 'schemas' in database else None
|
||||
restore_command = (
|
||||
(psql_command if all_databases else pg_restore_command, '--no-password')
|
||||
+ (
|
||||
|
@ -223,6 +224,7 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
|
|||
+ (('--host', database['hostname']) if 'hostname' in database else ())
|
||||
+ (('--port', str(database['port'])) if 'port' in database else ())
|
||||
+ (('--username', database['username']) if 'username' in database else ())
|
||||
+ (('--schema', backup_schemas) if backup_schemas else ())
|
||||
+ (tuple(database['restore_options'].split(' ')) if 'restore_options' in database else ())
|
||||
+ (() if extract_process else (dump_filename,))
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue