Skip to content

Commit 5654fd1

Browse files
committed
Fix line end mishandling in pg_upgrade on Windows.
pg_upgrade opened the output from pg_dumpall in text mode and wrote the split files in text mode. This caused unwanted eating of intended carriage returns on input and production of spurious carriage returns on output. To avoid this, open all these files in binary mode. On non-Windows platforms, this change has no effect. Backpatch to 9.0. On 9.0 and 9.1, we also switch from redirecting pg_dumpall's output to using pg_dumpall's -f switch, for the same reason.
1 parent 8e6f6b8 commit 5654fd1

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

contrib/pg_upgrade/dump.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,20 @@ split_old_dump(void)
5858
char filename[MAXPGPATH];
5959
bool suppressed_username = false;
6060

61+
62+
/*
63+
* Open all files in binary mode to avoid line end translation on Windows,
64+
* boths for input and output.
65+
*/
66+
6167
snprintf(filename, sizeof(filename), "%s", ALL_DUMP_FILE);
62-
if ((all_dump = fopen(filename, "r")) == NULL)
68+
if ((all_dump = fopen(filename, PG_BINARY_R)) == NULL)
6369
pg_log(PG_FATAL, "Could not open dump file \"%s\": %s\n", filename, getErrorText(errno));
6470
snprintf(filename, sizeof(filename), "%s", GLOBALS_DUMP_FILE);
65-
if ((globals_dump = fopen_priv(filename, "w")) == NULL)
71+
if ((globals_dump = fopen_priv(filename, PG_BINARY_W)) == NULL)
6672
pg_log(PG_FATAL, "Could not write to dump file \"%s\": %s\n", filename, getErrorText(errno));
6773
snprintf(filename, sizeof(filename), "%s", DB_DUMP_FILE);
68-
if ((db_dump = fopen_priv(filename, "w")) == NULL)
74+
if ((db_dump = fopen_priv(filename, PG_BINARY_W)) == NULL)
6975
pg_log(PG_FATAL, "Could not write to dump file \"%s\": %s\n", filename, getErrorText(errno));
7076

7177
current_output = globals_dump;

0 commit comments

Comments
 (0)