소스 검색

witten review

Divyansh Singh 2 년 전
부모
커밋
67f4d43aec
3개의 변경된 파일18개의 추가작업 그리고 23개의 파일을 삭제
  1. 0 4
      borgmatic/actions/restore.py
  2. 1 5
      borgmatic/config/schema.yaml
  3. 17 14
      borgmatic/hooks/postgresql.py

+ 0 - 4
borgmatic/actions/restore.py

@@ -79,10 +79,6 @@ def restore_single_database(
         f'{repository.get("label", repository["path"])}: Restoring database {database["name"]}'
     )
 
-    logger.info(
-        f'hostname port username password for database {database["name"]}'
-    )
-
     dump_pattern = borgmatic.hooks.dispatch.call_hooks(
         'make_database_dump_pattern',
         hooks,

+ 1 - 5
borgmatic/config/schema.yaml

@@ -816,11 +816,7 @@ properties:
                                 OWNER or SET SESSION AUTHORIZATION statements 
                                 to set ownership of created schema elements. 
                                 These statements will fail unless the initial
-                                connection to the database is made by a superuser
-                                (in which case they will execute as though wrapped
-                                in SECURITY DEFINER functions). When --no-owner
-                                is used, neither the ALTER OWNER nor SET SESSION
-                                AUTHORIZATION statements will be emitted.
+                                connection to the database is made by a superuser.
                         format:
                             type: string
                             enum: ['plain', 'custom', 'directory', 'tar']

+ 17 - 14
borgmatic/hooks/postgresql.py

@@ -22,17 +22,20 @@ def make_dump_path(location_config):  # pragma: no cover
         location_config.get('borgmatic_source_directory'), 'postgresql_databases'
     )
 
-def make_extra_environment(database, restore=False, connection_params=None):
+def make_extra_environment(database, restore_connection_params=None):
     '''
     Make the extra_environment dict from the given database configuration.
+    If restore connection params are given, this is for a restore operation.
     '''
     extra = dict()
     if 'password' in database:
         extra['PGPASSWORD'] = database['password']
-    if restore and 'restore_password' in database:
-        extra['PGPASSWORD'] = database['restore_password']
-    if connection_params is not None and connection_params.get('password'):
-        extra['PGPASSWORD'] = connection_params['password']
+
+    try:
+        extra['PGPASSWORD'] = restore_connection_params.get('password') or database['restore_password']
+    except (AttributeError, KeyError):
+        pass
+    
     extra['PGSSLMODE'] = database.get('ssl_mode', 'disable')
     if 'ssl_cert' in database:
         extra['PGSSLCERT'] = database['ssl_cert']
@@ -138,7 +141,7 @@ def dump_databases(databases, 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 ())
-                + (('--no-owner',) if database['no_owner'] else ())
+                + (('--no-owner',) if database.get('no_owner', False) else ())
                 + (('--format', dump_format) if dump_format else ())
                 + (('--file', dump_filename) if dump_format == 'directory' else ())
                 + (tuple(database['options'].split(' ')) if 'options' in database else ())
@@ -230,9 +233,9 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
     analyze_command = (
         tuple(psql_command)
         + ('--no-password', '--no-psqlrc', '--quiet')
-        + (('--host', hostname) if 'hostname' in database or 'restore_hostname' in database or 'hostname' in connection_params else ())
-        + (('--port', port) if 'port' in database or 'restore_port' in database or 'port' in connection_params else ())
-        + (('--username', username) if 'username' in database or 'restore_username' in database or 'username' in connection_params else ())
+        + (('--host', hostname) if hostname else ())
+        + (('--port', port) if port else ())
+        + (('--username', username) if username else ())
         + (('--dbname', database['name']) if not all_databases else ())
         + (tuple(database['analyze_options'].split(' ')) if 'analyze_options' in database else ())
         + ('--command', 'ANALYZE')
@@ -244,10 +247,10 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
         + ('--no-password',)
         + (('--no-psqlrc',) if use_psql_command else ('--if-exists', '--exit-on-error', '--clean'))
         + (('--dbname', database['name']) if not all_databases else ())
-        + (('--host', hostname) if 'hostname' in database or 'restore_hostname' in database or 'hostname' in connection_params else ())
-        + (('--port', port) if 'port' in database or 'restore_port' in database or 'port' in connection_params else ())
-        + (('--username', username) if 'username' in database or 'restore_username' in database or 'username' in connection_params else ())
-        + (('--no-owner',) if database['no_owner'] else ())
+        + (('--host', hostname) if hostname else ())
+        + (('--port', port) if port else ())
+        + (('--username', username) if username else ())
+        + (('--no-owner',) if database.get('no_owner', False) else ())
         + (tuple(database['restore_options'].split(' ')) if 'restore_options' in database else ())
         + (() if extract_process else (dump_filename,))
         + tuple(
@@ -257,7 +260,7 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
         )
     )
 
-    extra_environment = make_extra_environment(database, restore=True, connection_params=connection_params)
+    extra_environment = make_extra_environment(database, restore_connection_params=connection_params)
 
     logger.debug(f"{log_prefix}: Restoring PostgreSQL database {database['name']}{dry_run_label}")
     if dry_run: