mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Make pg_dumplo schema-aware. Karel Zak
This commit is contained in:
		
							parent
							
								
									839484f9f5
								
							
						
					
					
						commit
						db086aa962
					
				| @ -1,9 +1,9 @@ | |||||||
| /* -------------------------------------------------------------------------
 | /* -------------------------------------------------------------------------
 | ||||||
|  * pg_dumplo |  * pg_dumplo | ||||||
|  * |  * | ||||||
|  * $PostgreSQL: pgsql/contrib/pg_dumplo/lo_export.c,v 1.12 2003/11/29 19:51:35 pgsql Exp $ |  * $PostgreSQL: pgsql/contrib/pg_dumplo/lo_export.c,v 1.13 2004/11/28 23:49:49 tgl Exp $ | ||||||
|  * |  * | ||||||
|  *					Karel Zak 1999-2000 |  * Karel Zak 1999-2004 | ||||||
|  * ------------------------------------------------------------------------- |  * ------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| @ -39,15 +39,16 @@ load_lolist(LODumpMaster * pgLO) | |||||||
| 	 * NOTE: the system oid column is ignored, as it has attnum < 1. This | 	 * NOTE: the system oid column is ignored, as it has attnum < 1. This | ||||||
| 	 * shouldn't matter for correctness, but it saves time. | 	 * shouldn't matter for correctness, but it saves time. | ||||||
| 	 */ | 	 */ | ||||||
| 	pgLO->res = PQexec(pgLO->conn, | 	pgLO->res = PQexec(pgLO->conn, 	   "SELECT c.relname, a.attname, n.nspname " | ||||||
| 					   "SELECT c.relname, a.attname " | 					   "FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a, " | ||||||
| 					   "FROM pg_class c, pg_attribute a, pg_type t " | 					   "     pg_catalog.pg_type t, pg_catalog.pg_namespace n " | ||||||
| 					   "WHERE a.attnum > 0 " | 					   "WHERE a.attnum > 0 " | ||||||
| 					   "    AND a.attrelid = c.oid " | 					   "    AND a.attrelid = c.oid " | ||||||
| 					   "    AND a.atttypid = t.oid " | 					   "    AND a.atttypid = t.oid " | ||||||
| 					   "    AND t.typname = 'oid' " | 					   "    AND t.typname = 'oid' " | ||||||
| 					   "    AND c.relkind = 'r' " | 					   "    AND c.relkind = 'r' " | ||||||
| 					   "    AND c.relname NOT LIKE 'pg_%'"); | 					   "    AND c.relname NOT LIKE 'pg_%' " | ||||||
|  | 					   "    AND n.oid = c.relnamespace"); | ||||||
| 
 | 
 | ||||||
| 	if (PQresultStatus(pgLO->res) != PGRES_TUPLES_OK) | 	if (PQresultStatus(pgLO->res) != PGRES_TUPLES_OK) | ||||||
| 	{ | 	{ | ||||||
| @ -63,6 +64,7 @@ load_lolist(LODumpMaster * pgLO) | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	pgLO->lolist = (LOlist *) malloc((n + 1) * sizeof(LOlist)); | 	pgLO->lolist = (LOlist *) malloc((n + 1) * sizeof(LOlist)); | ||||||
|  | 	memset(pgLO->lolist, 0, (n + 1) * sizeof(LOlist)); | ||||||
| 
 | 
 | ||||||
| 	if (!pgLO->lolist) | 	if (!pgLO->lolist) | ||||||
| 	{ | 	{ | ||||||
| @ -74,8 +76,8 @@ load_lolist(LODumpMaster * pgLO) | |||||||
| 	{ | 	{ | ||||||
| 		ll->lo_table = strdup(PQgetvalue(pgLO->res, i, 0)); | 		ll->lo_table = strdup(PQgetvalue(pgLO->res, i, 0)); | ||||||
| 		ll->lo_attr = strdup(PQgetvalue(pgLO->res, i, 1)); | 		ll->lo_attr = strdup(PQgetvalue(pgLO->res, i, 1)); | ||||||
|  | 		ll->lo_schema = strdup(PQgetvalue(pgLO->res, i, 2)); | ||||||
| 	} | 	} | ||||||
| 	ll->lo_table = ll->lo_attr = (char *) NULL; |  | ||||||
| 
 | 
 | ||||||
| 	PQclear(pgLO->res); | 	PQclear(pgLO->res); | ||||||
| } | } | ||||||
| @ -98,7 +100,7 @@ pglo_export(LODumpMaster * pgLO) | |||||||
| 		fprintf(pgLO->index, "#\tHost:     %s\n", pgLO->host); | 		fprintf(pgLO->index, "#\tHost:     %s\n", pgLO->host); | ||||||
| 		fprintf(pgLO->index, "#\tDatabase: %s\n", pgLO->db); | 		fprintf(pgLO->index, "#\tDatabase: %s\n", pgLO->db); | ||||||
| 		fprintf(pgLO->index, "#\tUser:     %s\n", pgLO->user); | 		fprintf(pgLO->index, "#\tUser:     %s\n", pgLO->user); | ||||||
| 		fprintf(pgLO->index, "#\n# oid\ttable\tattribut\tinfile\n#\n"); | 		fprintf(pgLO->index, "#\n# oid\ttable\tattribut\tinfile\tschema\n#\n"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	pgLO->counter = 0; | 	pgLO->counter = 0; | ||||||
| @ -109,8 +111,9 @@ pglo_export(LODumpMaster * pgLO) | |||||||
| 		 * Query: find the LOs referenced by this column | 		 * Query: find the LOs referenced by this column | ||||||
| 		 */ | 		 */ | ||||||
| 		snprintf(Qbuff, QUERY_BUFSIZ, | 		snprintf(Qbuff, QUERY_BUFSIZ, | ||||||
| 				 "SELECT DISTINCT l.loid FROM \"%s\" x, pg_largeobject l WHERE x.\"%s\" = l.loid", | 				 "SELECT DISTINCT l.loid FROM \"%s\".\"%s\" x, pg_catalog.pg_largeobject l " | ||||||
| 				 ll->lo_table, ll->lo_attr); | 				 "WHERE x.\"%s\" = l.loid", | ||||||
|  | 				 ll->lo_schema, ll->lo_table, ll->lo_attr); | ||||||
| 
 | 
 | ||||||
| 		/* puts(Qbuff); */ | 		/* puts(Qbuff); */ | ||||||
| 
 | 
 | ||||||
| @ -124,8 +127,8 @@ pglo_export(LODumpMaster * pgLO) | |||||||
| 		else if ((tuples = PQntuples(pgLO->res)) == 0) | 		else if ((tuples = PQntuples(pgLO->res)) == 0) | ||||||
| 		{ | 		{ | ||||||
| 			if (!pgLO->quiet && pgLO->action == ACTION_EXPORT_ATTR) | 			if (!pgLO->quiet && pgLO->action == ACTION_EXPORT_ATTR) | ||||||
| 				printf("%s: no large objects in \"%s\".\"%s\"\n", | 				printf("%s: no large objects in \"%s\".\"%s\".\"%s\"\n", | ||||||
| 					   progname, ll->lo_table, ll->lo_attr); | 					   progname, ll->lo_schema, ll->lo_table, ll->lo_attr); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
| 		{ | 		{ | ||||||
| @ -140,7 +143,7 @@ pglo_export(LODumpMaster * pgLO) | |||||||
| 			{ | 			{ | ||||||
| 
 | 
 | ||||||
| 				snprintf(path, BUFSIZ, "%s/%s/%s", pgLO->space, pgLO->db, | 				snprintf(path, BUFSIZ, "%s/%s/%s", pgLO->space, pgLO->db, | ||||||
| 						 ll->lo_table); | 						 ll->lo_schema); | ||||||
| 
 | 
 | ||||||
| 				if (mkdir(path, DIR_UMASK) == -1) | 				if (mkdir(path, DIR_UMASK) == -1) | ||||||
| 				{ | 				{ | ||||||
| @ -152,7 +155,19 @@ pglo_export(LODumpMaster * pgLO) | |||||||
| 				} | 				} | ||||||
| 				 | 				 | ||||||
| 				snprintf(path, BUFSIZ, "%s/%s/%s/%s", pgLO->space, pgLO->db, | 				snprintf(path, BUFSIZ, "%s/%s/%s/%s", pgLO->space, pgLO->db, | ||||||
| 						 ll->lo_table, ll->lo_attr); | 						 ll->lo_schema, ll->lo_table); | ||||||
|  | 
 | ||||||
|  | 				if (mkdir(path, DIR_UMASK) == -1) | ||||||
|  | 				{ | ||||||
|  | 					if (errno != EEXIST) | ||||||
|  | 					{ | ||||||
|  | 						perror(path); | ||||||
|  | 						exit(RE_ERROR); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				snprintf(path, BUFSIZ, "%s/%s/%s/%s/%s", pgLO->space, pgLO->db, | ||||||
|  | 						 ll->lo_schema, ll->lo_table, ll->lo_attr); | ||||||
| 
 | 
 | ||||||
| 				if (mkdir(path, DIR_UMASK) == -1) | 				if (mkdir(path, DIR_UMASK) == -1) | ||||||
| 				{ | 				{ | ||||||
| @ -164,8 +179,8 @@ pglo_export(LODumpMaster * pgLO) | |||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if (!pgLO->quiet) | 				if (!pgLO->quiet) | ||||||
| 					printf("dump %s.%s (%d large obj)\n", | 					printf("dump %s.%s.%s (%d large obj)\n", | ||||||
| 						   ll->lo_table, ll->lo_attr, tuples); | 						   ll->lo_schema, ll->lo_table, ll->lo_attr, tuples); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			pgLO->counter += tuples; | 			pgLO->counter += tuples; | ||||||
| @ -180,20 +195,22 @@ pglo_export(LODumpMaster * pgLO) | |||||||
| 
 | 
 | ||||||
| 				if (pgLO->action == ACTION_SHOW) | 				if (pgLO->action == ACTION_SHOW) | ||||||
| 				{ | 				{ | ||||||
| 					printf("%s.%s: %u\n", ll->lo_table, ll->lo_attr, lo); | 					printf("%s.%s.%s: %u\n", ll->lo_schema, ll->lo_table, ll->lo_attr, lo); | ||||||
| 					continue; | 					continue; | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				snprintf(path, BUFSIZ, "%s/%s/%s/%s/%s", pgLO->space, | 				snprintf(path, BUFSIZ, "%s/%s/%s/%s/%s/%s", pgLO->space, | ||||||
| 						 pgLO->db, ll->lo_table, ll->lo_attr, val); | 						 pgLO->db, ll->lo_schema, ll->lo_table, ll->lo_attr, val); | ||||||
| 
 | 
 | ||||||
| 				if (lo_export(pgLO->conn, lo, path) < 0) | 				if (lo_export(pgLO->conn, lo, path) < 0) | ||||||
| 					fprintf(stderr, "%s: lo_export failed:\n%s", progname, | 					fprintf(stderr, "%s: lo_export failed:\n%s", progname, | ||||||
| 							PQerrorMessage(pgLO->conn)); | 							PQerrorMessage(pgLO->conn)); | ||||||
| 
 | 
 | ||||||
| 				else | 				else | ||||||
| 					fprintf(pgLO->index, "%s\t%s\t%s\t%s/%s/%s/%s\n", val, | 					fprintf(pgLO->index, "%s\t%s\t%s\t%s/%s/%s/%s/%s\t%s\n",  | ||||||
| 							ll->lo_table, ll->lo_attr, pgLO->db, ll->lo_table, ll->lo_attr, val); | 							val, ll->lo_table, ll->lo_attr, pgLO->db,  | ||||||
|  | 							ll->lo_schema, ll->lo_table, ll->lo_attr,  | ||||||
|  | 							val, ll->lo_schema); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,9 +1,9 @@ | |||||||
| /* -------------------------------------------------------------------------
 | /* -------------------------------------------------------------------------
 | ||||||
|  * pg_dumplo |  * pg_dumplo | ||||||
|  * |  * | ||||||
|  * $PostgreSQL: pgsql/contrib/pg_dumplo/lo_import.c,v 1.10 2003/11/29 19:51:35 pgsql Exp $ |  * $PostgreSQL: pgsql/contrib/pg_dumplo/lo_import.c,v 1.11 2004/11/28 23:49:49 tgl Exp $ | ||||||
|  * |  * | ||||||
|  *					Karel Zak 1999-2000 |  * Karel Zak 1999-2004 | ||||||
|  * ------------------------------------------------------------------------- |  * ------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| @ -27,14 +27,17 @@ pglo_import(LODumpMaster * pgLO) | |||||||
| { | { | ||||||
| 	LOlist		loa; | 	LOlist		loa; | ||||||
| 	Oid			new_oid; | 	Oid			new_oid; | ||||||
|  | 	int		ret, line=0; | ||||||
| 	char		tab[MAX_TABLE_NAME], | 	char		tab[MAX_TABLE_NAME], | ||||||
| 				attr[MAX_ATTR_NAME], | 				attr[MAX_ATTR_NAME], | ||||||
|  | 				sch[MAX_SCHEMA_NAME], | ||||||
| 				path[BUFSIZ], | 				path[BUFSIZ], | ||||||
| 				lo_path[BUFSIZ], | 				lo_path[BUFSIZ], | ||||||
| 				Qbuff[QUERY_BUFSIZ]; | 				Qbuff[QUERY_BUFSIZ]; | ||||||
| 
 | 
 | ||||||
| 	while (fgets(Qbuff, QUERY_BUFSIZ, pgLO->index)) | 	while (fgets(Qbuff, QUERY_BUFSIZ, pgLO->index)) | ||||||
| 	{ | 	{ | ||||||
|  | 		line++; | ||||||
| 		 | 		 | ||||||
| 		if (*Qbuff == '#') | 		if (*Qbuff == '#') | ||||||
| 			continue; | 			continue; | ||||||
| @ -42,10 +45,28 @@ pglo_import(LODumpMaster * pgLO) | |||||||
| 		if (!pgLO->remove && !pgLO->quiet) | 		if (!pgLO->remove && !pgLO->quiet) | ||||||
| 			printf(Qbuff); | 			printf(Qbuff); | ||||||
| 
 | 
 | ||||||
| 		sscanf(Qbuff, "%u\t%s\t%s\t%s\n", &loa.lo_oid, tab, attr, path); | 		if ((ret=sscanf(Qbuff, "%u\t%s\t%s\t%s\t%s\n", &loa.lo_oid, tab, attr, path, sch)) < 5) | ||||||
|  | 		{ | ||||||
|  | 			/* backward compatible mode */ | ||||||
|  | 			ret = sscanf(Qbuff, "%u\t%s\t%s\t%s\n", &loa.lo_oid, tab, attr, path); | ||||||
|  | 			strcpy(sch, "public"); | ||||||
|  | 		} | ||||||
|  | 		if (ret < 4) | ||||||
|  | 		{ | ||||||
|  | 			fprintf(stderr, "%s: index file reading failed at line %d\n", progname, line); | ||||||
|  | 			PQexec(pgLO->conn, "ROLLBACK"); | ||||||
|  | 			fprintf(stderr, "\n%s: ROLLBACK\n", progname); | ||||||
|  | 			exit(RE_ERROR); | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		loa.lo_schema = sch; | ||||||
| 		loa.lo_table = tab; | 		loa.lo_table = tab; | ||||||
| 		loa.lo_attr = attr; | 		loa.lo_attr = attr; | ||||||
| 
 | 
 | ||||||
|  | 		if (path && *path=='/') | ||||||
|  | 			/* absolute path */ | ||||||
|  | 			snprintf(lo_path, BUFSIZ, "%s", path); | ||||||
|  | 		else | ||||||
| 			snprintf(lo_path, BUFSIZ, "%s/%s", pgLO->space, path); | 			snprintf(lo_path, BUFSIZ, "%s/%s", pgLO->space, path); | ||||||
| 
 | 
 | ||||||
| 		/*
 | 		/*
 | ||||||
| @ -80,8 +101,8 @@ pglo_import(LODumpMaster * pgLO) | |||||||
| 		 * UPDATE oid in tab | 		 * UPDATE oid in tab | ||||||
| 		 */ | 		 */ | ||||||
| 		snprintf(Qbuff, QUERY_BUFSIZ, | 		snprintf(Qbuff, QUERY_BUFSIZ, | ||||||
| 				 "UPDATE \"%s\" SET \"%s\"=%u WHERE \"%s\"=%u", | 				 "UPDATE \"%s\".\"%s\" SET \"%s\"=%u WHERE \"%s\"=%u", | ||||||
| 			loa.lo_table, loa.lo_attr, new_oid, loa.lo_attr, loa.lo_oid); | 			loa.lo_schema, loa.lo_table, loa.lo_attr, new_oid, loa.lo_attr, loa.lo_oid); | ||||||
| 
 | 
 | ||||||
| 		/*fprintf(stderr, Qbuff);*/ | 		/*fprintf(stderr, Qbuff);*/ | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| /* -------------------------------------------------------------------------
 | /* -------------------------------------------------------------------------
 | ||||||
|  * pg_dumplo |  * pg_dumplo | ||||||
|  * |  * | ||||||
|  * $PostgreSQL: pgsql/contrib/pg_dumplo/main.c,v 1.21 2004/11/27 18:51:04 tgl Exp $ |  * $PostgreSQL: pgsql/contrib/pg_dumplo/main.c,v 1.22 2004/11/28 23:49:49 tgl Exp $ | ||||||
|  * |  * | ||||||
|  *					Karel Zak 1999-2000 |  *					Karel Zak 1999-2000 | ||||||
|  * ------------------------------------------------------------------------- |  * ------------------------------------------------------------------------- | ||||||
| @ -150,13 +150,10 @@ main(int argc, char **argv) | |||||||
| 	/*
 | 	/*
 | ||||||
| 	 * Check space | 	 * Check space | ||||||
| 	 */ | 	 */ | ||||||
| 	if (!pgLO->space && !pgLO->action == ACTION_SHOW) | 	if (pgLO->space==NULL && pgLO->action != ACTION_SHOW) | ||||||
| 	{ | 	{ | ||||||
| 		if (!(pgLO->space = getenv("PWD"))) | 		if (!(pgLO->space = getenv("PWD"))) | ||||||
| 		{ | 			pgLO->space = "."; | ||||||
| 			fprintf(stderr, "%s: not set space for dump-tree (option '-s' or $PWD).\n", progname); |  | ||||||
| 			exit(RE_ERROR); |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (!pgLO->action) | 	if (!pgLO->action) | ||||||
| @ -230,9 +227,8 @@ static void | |||||||
| parse_lolist(LODumpMaster * pgLO) | parse_lolist(LODumpMaster * pgLO) | ||||||
| { | { | ||||||
| 	LOlist	   *ll; | 	LOlist	   *ll; | ||||||
| 	char	  **d, | 	char	  **d, *loc, *loc2,  | ||||||
| 			   *loc, | 		  buff[MAX_SCHEMA_NAME + MAX_TABLE_NAME + MAX_ATTR_NAME + 3]; | ||||||
| 				buff[MAX_TABLE_NAME + MAX_ATTR_NAME + 1]; |  | ||||||
| 
 | 
 | ||||||
| 	pgLO->lolist = (LOlist *) malloc(pgLO->argc * sizeof(LOlist)); | 	pgLO->lolist = (LOlist *) malloc(pgLO->argc * sizeof(LOlist)); | ||||||
| 
 | 
 | ||||||
| @ -247,16 +243,31 @@ parse_lolist(LODumpMaster * pgLO) | |||||||
| 		 d++, ll++) | 		 d++, ll++) | ||||||
| 	{ | 	{ | ||||||
| 
 | 
 | ||||||
| 		strncpy(buff, *d, MAX_TABLE_NAME + MAX_ATTR_NAME); | 		strncpy(buff, *d, MAX_SCHEMA_NAME + MAX_TABLE_NAME + MAX_ATTR_NAME + 2); | ||||||
| 
 | 
 | ||||||
| 		if ((loc = strchr(buff, '.')) == NULL) | 		if ((loc = strchr(buff, '.')) == NULL || *(loc+1)=='\0') | ||||||
| 		{ | 		{ | ||||||
| 			fprintf(stderr, "%s: '%s' is bad 'table.attr'\n", progname, buff); | 			fprintf(stderr, "%s: '%s' is bad 'table.attr' or 'schema.table.attr'\n", progname, buff); | ||||||
| 			exit(RE_ERROR); | 			exit(RE_ERROR); | ||||||
| 		} | 		} | ||||||
|  | 		loc2 = strchr(loc+1, '.'); | ||||||
| 		*loc = '\0'; | 		*loc = '\0'; | ||||||
|  | 		 | ||||||
|  | 		if (loc2) | ||||||
|  | 		{ | ||||||
|  | 			/* "schema.table.attr" 
 | ||||||
|  | 			 */ | ||||||
|  | 			*loc2 = '\0'; | ||||||
|  | 			ll->lo_schema = strdup(buff); | ||||||
|  | 			ll->lo_table = strdup(loc+1); | ||||||
|  | 			ll->lo_attr = strdup(loc2+1); | ||||||
|  | 		} | ||||||
|  | 		else | ||||||
|  | 		{ | ||||||
|  | 			ll->lo_schema = strdup("public"); | ||||||
| 			ll->lo_table = strdup(buff); | 			ll->lo_table = strdup(buff); | ||||||
| 		ll->lo_attr = strdup(++loc); | 			ll->lo_attr = strdup(loc+1); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	ll++; | 	ll++; | ||||||
| 	ll->lo_table = ll->lo_attr = (char *) NULL; | 	ll->lo_table = ll->lo_attr = (char *) NULL; | ||||||
| @ -277,7 +288,7 @@ usage(void) | |||||||
| 		 "-s --space=<dir>             directory with dump tree (for export/import)\n" | 		 "-s --space=<dir>             directory with dump tree (for export/import)\n" | ||||||
| 		 "-i --import                  import large obj dump tree to DB\n" | 		 "-i --import                  import large obj dump tree to DB\n" | ||||||
| 	"-e --export                  export (dump) large obj to dump tree\n" | 	"-e --export                  export (dump) large obj to dump tree\n" | ||||||
| 		 "-l <table.attr ...>          dump attribute (columns) with LO to dump tree\n" | 		"-l <schema.table.attr ...>   dump attribute (columns) with LO to dump tree\n" | ||||||
| 		 "-a --all                     dump all LO in DB (default)\n" | 		 "-a --all                     dump all LO in DB (default)\n" | ||||||
| 		 "-r --remove                  if is set '-i' try remove old LO\n" | 		 "-r --remove                  if is set '-i' try remove old LO\n" | ||||||
| 		 "-q --quiet                   run quietly\n" | 		 "-q --quiet                   run quietly\n" | ||||||
| @ -288,8 +299,9 @@ usage(void) | |||||||
| 		 "Example (import): pg_dumplo -i -d my_db -s /my_dump/dir\n" | 		 "Example (import): pg_dumplo -i -d my_db -s /my_dump/dir\n" | ||||||
| 		 "Example (show):   pg_dumplo -w -d my_db\n\n" | 		 "Example (show):   pg_dumplo -w -d my_db\n\n" | ||||||
| 		 "Note:  * option '-l' must be last option!\n" | 		 "Note:  * option '-l' must be last option!\n" | ||||||
|  | 		 "       * default schema is \"public\"\n" | ||||||
|   		 "       * option '-i' without option '-r' make new large obj in DB\n" |   		 "       * option '-i' without option '-r' make new large obj in DB\n" | ||||||
| 		 "         not rewrite old, the '-i' UPDATE oid numbers in table.attr only!\n" | 		 "         not rewrite old, the '-i' UPDATE oid numbers in table.attr only!\n" | ||||||
| 		 "       * if option -s is not set, pg_dumplo uses $PWD\n" | 		 "       * if option -s is not set, pg_dumplo uses $PWD or \".\"\n" | ||||||
| 		);						/* puts() */ | 		);						/* puts() */ | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,9 +1,9 @@ | |||||||
| /* -------------------------------------------------------------------------
 | /* -------------------------------------------------------------------------
 | ||||||
|  * pg_dumplo.h |  * pg_dumplo.h | ||||||
|  * |  * | ||||||
|  * $PostgreSQL: pgsql/contrib/pg_dumplo/pg_dumplo.h,v 1.10 2003/11/29 19:51:35 pgsql Exp $ |  * $PostgreSQL: pgsql/contrib/pg_dumplo/pg_dumplo.h,v 1.11 2004/11/28 23:49:49 tgl Exp $ | ||||||
|  * |  * | ||||||
|  *					Karel Zak 1999-2000 |  * Karel Zak 1999-2004 | ||||||
|  * ------------------------------------------------------------------------- |  * ------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| @ -25,6 +25,7 @@ | |||||||
| #define RE_OK		0 | #define RE_OK		0 | ||||||
| #define RE_ERROR	1 | #define RE_ERROR	1 | ||||||
| 
 | 
 | ||||||
|  | #define MAX_SCHEMA_NAME	128 | ||||||
| #define MAX_TABLE_NAME	128 | #define MAX_TABLE_NAME	128 | ||||||
| #define MAX_ATTR_NAME	128 | #define MAX_ATTR_NAME	128 | ||||||
| 
 | 
 | ||||||
| @ -36,7 +37,8 @@ | |||||||
|  */ |  */ | ||||||
| typedef struct | typedef struct | ||||||
| { | { | ||||||
| 	char	   *lo_table, | 	char	*lo_schema,    | ||||||
|  | 		*lo_table, | ||||||
| 		*lo_attr; | 		*lo_attr; | ||||||
| 	Oid	lo_oid; | 	Oid	lo_oid; | ||||||
| } LOlist; | } LOlist; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user