forced-owner-v1.patch

application/octet-stream

Filename: forced-owner-v1.patch
Type: application/octet-stream
Part: 0
Message: Patch: forcing object owner in TOC file

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
Series: patch v1
File+
src/bin/pg_dump/pg_backup_archiver.c 21 0
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 7f47a7c..835f323 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -1137,6 +1137,7 @@ SortTocFromFile(Archive *AHX, RestoreOptions *ropt)
 		int			buflen;
 		char	   *cmnt;
 		char	   *endptr;
+		char		*owner = NULL;
 		DumpId		id;
 		TocEntry   *te;
 
@@ -1172,6 +1173,18 @@ SortTocFromFile(Archive *AHX, RestoreOptions *ropt)
 			continue;
 		}
 
+		/* If there is any string after ID assume it as "forced" owner. */
+		while (*endptr) {
+			if (!isspace(*endptr) && owner == NULL)
+				owner = endptr;
+			else if (isspace(*endptr) && owner != NULL) 
+			{
+				*endptr = '\0';
+				break;
+			}
+			*endptr++;
+		}
+
 		/* Find TOC entry */
 		te = getTocEntryByDumpId(AH, id);
 		if (!te)
@@ -1181,6 +1194,14 @@ SortTocFromFile(Archive *AHX, RestoreOptions *ropt)
 		/* Mark it wanted */
 		ropt->idWanted[id - 1] = true;
 
+		/* Alter TOC entry owner, if found "forced" owner. */
+		if (owner != NULL)
+		{
+			write_msg(modulename, "WARNING: forcing owner for %s %s to %s\n", te->desc, te->tag, owner);
+			free(te->owner);
+			te->owner = strdup(owner);
+		}
+
 		/*
 		 * Move each item to the end of the list as it is selected, so that
 		 * they are placed in the desired order.  Any unwanted items will end