You've already forked pg_probackup
							
							
				mirror of
				https://github.com/postgrespro/pg_probackup.git
				synced 2025-10-31 00:17:52 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*-------------------------------------------------------------------------
 | |
|  *
 | |
|  * configure.c: - manage backup catalog.
 | |
|  *
 | |
|  * Portions Copyright (c) 2017-2017, Postgres Professional
 | |
|  *
 | |
|  *-------------------------------------------------------------------------
 | |
|  */
 | |
| 
 | |
| #include "pg_probackup.h"
 | |
| 
 | |
| /* Set configure options */
 | |
| int
 | |
| do_configure(bool show_only)
 | |
| {
 | |
| 	pgBackupConfig *config = readBackupCatalogConfigFile();
 | |
| 	if (pgdata)
 | |
| 		config->pgdata = pgdata;
 | |
| 	if (pgut_dbname)
 | |
| 		config->pgdatabase = pgut_dbname;
 | |
| 	if (host)
 | |
| 		config->pghost = host;
 | |
| 	if (port)
 | |
| 		config->pgport = port;
 | |
| 	if (username)
 | |
| 		config->pguser = username;
 | |
| 
 | |
| 	if (retention_redundancy)
 | |
| 		config->retention_redundancy = retention_redundancy;
 | |
| 	if (retention_window)
 | |
| 		config->retention_window = retention_window;
 | |
| 
 | |
| 	if (show_only)
 | |
| 		writeBackupCatalogConfig(stderr, config);
 | |
| 	else
 | |
| 		writeBackupCatalogConfigFile(config);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| void
 | |
| pgBackupConfigInit(pgBackupConfig *config)
 | |
| {
 | |
| 	config->system_identifier = 0;
 | |
| 	config->pgdata = NULL;
 | |
| 	config->pgdatabase = NULL;
 | |
| 	config->pghost = NULL;
 | |
| 	config->pgport = NULL;
 | |
| 	config->pguser = NULL;
 | |
| 
 | |
| 	config->retention_redundancy = 0;
 | |
| 	config->retention_window = 0;
 | |
| }
 | |
| 
 | |
| void
 | |
| writeBackupCatalogConfig(FILE *out, pgBackupConfig *config)
 | |
| {
 | |
| 	fprintf(out, "#Backup instance info\n");
 | |
| 	fprintf(out, "PGDATA = %s\n", config->pgdata);
 | |
| 	fprintf(out, "system-identifier = %li\n", config->system_identifier);
 | |
| 
 | |
| 	fprintf(out, "#Connection parameters:\n");
 | |
| 	if (config->pgdatabase)
 | |
| 		fprintf(out, "PGDATABASE = %s\n", config->pgdatabase);
 | |
| 	if (config->pghost)
 | |
| 		fprintf(out, "PGHOST = %s\n", config->pghost);
 | |
| 	if (config->pgport)
 | |
| 		fprintf(out, "PGPORT = %s\n", config->pgport);
 | |
| 	if (config->pguser)
 | |
| 		fprintf(out, "PGUSER = %s\n", config->pguser);
 | |
| 
 | |
| 	fprintf(out, "#Retention parameters:\n");
 | |
| 	if (config->retention_redundancy)
 | |
| 		fprintf(out, "retention-redundancy = %u\n", config->retention_redundancy);
 | |
| 	if (config->retention_window)
 | |
| 		fprintf(out, "retention-window = %u\n", config->retention_window);
 | |
| 
 | |
| }
 | |
| 
 | |
| void
 | |
| writeBackupCatalogConfigFile(pgBackupConfig *config)
 | |
| {
 | |
| 	char		path[MAXPGPATH];
 | |
| 	FILE	   *fp;
 | |
| 
 | |
| 	join_path_components(path, backup_path, BACKUPS_DIR);
 | |
| 	join_path_components(path, backup_path, BACKUP_CATALOG_CONF_FILE);
 | |
| 	fp = fopen(path, "wt");
 | |
| 	if (fp == NULL)
 | |
| 		elog(ERROR, "cannot create %s: %s",
 | |
| 			 BACKUP_CATALOG_CONF_FILE, strerror(errno));
 | |
| 
 | |
| 	writeBackupCatalogConfig(fp, config);
 | |
| 	fclose(fp);
 | |
| }
 | |
| 
 | |
| 
 | |
| pgBackupConfig*
 | |
| readBackupCatalogConfigFile(void)
 | |
| {
 | |
| 	pgBackupConfig *config = pgut_new(pgBackupConfig);
 | |
| 	char		path[MAXPGPATH];
 | |
| 
 | |
| 	pgut_option options[] =
 | |
| 	{
 | |
| 			/* configure options */
 | |
| 		{ 'U', 0, "system-identifier",		&(config->system_identifier),	SOURCE_FILE_STRICT },
 | |
| 		{ 's', 0, "pgdata",					&(config->pgdata),				SOURCE_FILE_STRICT },
 | |
| 		{ 's', 0, "pgdatabase",				&(config->pgdatabase),			SOURCE_FILE_STRICT },
 | |
| 		{ 's', 0, "pghost",					&(config->pghost),				SOURCE_FILE_STRICT },
 | |
| 		{ 's', 0, "pgport",					&(config->pgport),				SOURCE_FILE_STRICT },
 | |
| 		{ 's', 0, "pguser",					&(config->pguser),				SOURCE_FILE_STRICT },
 | |
| 		{ 'u', 0, "retention-redundancy",	&(config->retention_redundancy),SOURCE_FILE_STRICT },
 | |
| 		{ 'u', 0, "retention-window",		&(config->retention_window),	SOURCE_FILE_STRICT },
 | |
| 		{0}
 | |
| 	};
 | |
| 
 | |
| 	join_path_components(path, backup_path, BACKUPS_DIR);
 | |
| 	join_path_components(path, backup_path, BACKUP_CATALOG_CONF_FILE);
 | |
| 
 | |
| 	pgBackupConfigInit(config);
 | |
| 	pgut_readopt(path, options, ERROR);
 | |
| 
 | |
| 	return config;
 | |
| 
 | |
| }
 |