Add option to skip raw SQL file when dumping postgres DB
trying to cut down on disk space, we'll see how well this works..
This commit is contained in:
		
							parent
							
								
									8e9a685006
								
							
						
					
					
						commit
						24d632b7e3
					
				
					 1 changed files with 30 additions and 10 deletions
				
			
		|  | @ -28,6 +28,7 @@ import os | ||||||
| import re | import re | ||||||
| 
 | 
 | ||||||
| from rattail_fabric2 import apt, append, contains, sed, uncomment | from rattail_fabric2 import apt, append, contains, sed, uncomment | ||||||
|  | from rattail.util import shlex_join | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def install(c): | def install(c): | ||||||
|  | @ -199,7 +200,8 @@ def drop_db(c, name, checkfirst=True): | ||||||
|         c.sudo('dropdb {}'.format(name), user='postgres') |         c.sudo('dropdb {}'.format(name), user='postgres') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def dump_db(c, name, port=None, exclude_tables=None): | def dump_db(c, name, port=None, exclude_tables=None, | ||||||
|  |             skip_raw_file=False): | ||||||
|     """ |     """ | ||||||
|     Dump a database to file, on the server represented by ``c`` param. |     Dump a database to file, on the server represented by ``c`` param. | ||||||
| 
 | 
 | ||||||
|  | @ -209,22 +211,40 @@ def dump_db(c, name, port=None, exclude_tables=None): | ||||||
|     """ |     """ | ||||||
|     c.run('touch {}.sql'.format(name)) |     c.run('touch {}.sql'.format(name)) | ||||||
|     c.run('chmod 0666 {}.sql'.format(name)) |     c.run('chmod 0666 {}.sql'.format(name)) | ||||||
|     cmd = 'pg_dump {port} {exclude_tables} --file={name}.sql {name}'.format( | 
 | ||||||
|         name=name, |     sql_name = f'{name}.sql' | ||||||
|         port='--port={}'.format(port) if port else '', |     gz_name = f'{sql_name}.gz' | ||||||
|         exclude_tables='--exclude-table-data={}'.format(exclude_tables) if exclude_tables else '') |     filename = gz_name if skip_raw_file else sql_name | ||||||
|  | 
 | ||||||
|  |     port = f'--port={port}' if port else '' | ||||||
|  |     exclude_tables = f'--exclude-table-data={exclude_tables}' if exclude_tables else '' | ||||||
|  |     filename = '' if skip_raw_file else f'--file={filename}' | ||||||
|  |     cmd = f'pg_dump {port} {exclude_tables} {filename} {name}' | ||||||
|  | 
 | ||||||
|  |     if skip_raw_file: | ||||||
|  |         tmp_name = f'/tmp/{gz_name}' | ||||||
|  |         cmd = f'{cmd} | gzip -c > {tmp_name}' | ||||||
|  |         cmd = shlex_join(['bash', '-c', cmd]) | ||||||
|         c.sudo(cmd, user='postgres') |         c.sudo(cmd, user='postgres') | ||||||
|     c.run('gzip --force {}.sql'.format(name)) |         # TODO: should remove this file | ||||||
|     return '{}.sql.gz'.format(name) |         c.run(f"cp {tmp_name} {gz_name}") | ||||||
|  | 
 | ||||||
|  |     else: | ||||||
|  |         c.sudo(cmd, user='postgres') | ||||||
|  |         c.run(f'gzip --force {sql_name}') | ||||||
|  | 
 | ||||||
|  |     return gz_name | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def download_db(c, name, destination=None, port=None, exclude_tables=None): | def download_db(c, name, destination=None, port=None, exclude_tables=None, | ||||||
|  |                 skip_raw_file=False): | ||||||
|     """ |     """ | ||||||
|     Download a database from the server represented by ``c`` param. |     Download a database from the server represented by ``c`` param. | ||||||
|     """ |     """ | ||||||
|     if destination is None: |     if destination is None: | ||||||
|         destination = './{}.sql.gz'.format(name) |         destination = './{}.sql.gz'.format(name) | ||||||
|     dumpfile = dump_db(c, name, port=port, exclude_tables=exclude_tables) |     dumpfile = dump_db(c, name, port=port, exclude_tables=exclude_tables, | ||||||
|  |                        skip_raw_file=skip_raw_file) | ||||||
|     c.get(dumpfile, destination) |     c.get(dumpfile, destination) | ||||||
|     c.run('rm {}'.format(dumpfile)) |     c.run('rm {}'.format(dumpfile)) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar