def pg_backup(database_name, suffix=None): """ Backup a postgresql database """ from django.conf import settings from django_productline.context import PRODUCT_CONTEXT db_host = settings.DATABASES['default']['HOST'] import datetime suffix = suffix or datetime.datetime.now().isoformat().replace( ':', '-').replace('.', '-') backup_name = database_name + '_' + suffix backup_dir = '{ape_root_dir}/_backup/{backup_name}'.format( ape_root_dir=PRODUCT_CONTEXT.APE_ROOT_DIR, backup_name=backup_name) subprocess.check_call(['mkdir', '-p', backup_dir]) target_sql = backup_dir + '/dump.sql' subprocess.check_call([ 'pg_dump', '--no-owner', '--host', db_host, '--username', 'postgres', '-f', target_sql, database_name ]) print('*** database dumped to: ' + backup_dir) subprocess.check_call([ 'tar', '-cvf', '{backup_dir}/media.tar.gz'.format(backup_dir=backup_dir), '-C', PRODUCT_CONTEXT.DATA_DIR, '.' ]) tasks.export_context(os.path.join(backup_dir, 'context.zip')) print('*** __data__ compressed to: ' + backup_dir) return backup_name
def export_data(target_path): """ Exports the data of an application - media files plus database, :param: target_path: :return: a zip archive """ tasks.export_data_dir(target_path) tasks.export_database(target_path) tasks.export_context(target_path) return target_path