Re: Non-text mode for pg_dumpall - Mailing list pgsql-hackers

From Srinath Reddy
Subject Re: Non-text mode for pg_dumpall
Date
Msg-id CAFC+b6qZmSgQuQ-zO0rwX5AF=229LCtwAuRfKUPqNETWNvEKkA@mail.gmail.com
Whole thread Raw
In response to Re: Non-text mode for pg_dumpall  (Srinath Reddy <srinath2133@gmail.com>)
List pgsql-hackers
here's the whole version of delta patch

diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 42c4fe3ce2..90e6b71a50 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -84,7 +84,7 @@ static int restoreAllDatabases(PGconn *conn, const char *dumpdirpath,
    SimpleStringList db_exclude_patterns, RestoreOptions *opts, int numWorkers);
 static void execute_global_sql_commands(PGconn *conn, const char *dumpdirpath,
  const char *outfile);
-static void copy_global_file_to_out_file(const char *outfile, FILE *pfile);
+static void copy_global_file(const char *outfile, FILE *pfile);
 static int filter_dbnames_for_restore(PGconn *conn,
   SimpleDatabaseOidList *dbname_oid_list,
   SimpleStringList db_exclude_patterns);
@@ -1178,7 +1178,7 @@ execute_global_sql_commands(PGconn *conn, const char *dumpdirpath, const char *o
  */
  if (outfile)
  {
- copy_global_file_to_out_file(outfile, pfile);
+ copy_global_file(outfile, pfile);
  return;
  }
 
@@ -1207,24 +1207,35 @@ execute_global_sql_commands(PGconn *conn, const char *dumpdirpath, const char *o
 }
 
 /*
- * copy_global_file_to_out_file
+ * copy_global_file
  *
- * This will copy global.dat file into out file.
+ * This will copy global.dat file into out file, if file is given
+ * else copies to stdout.
+ *
  */
 static void
-copy_global_file_to_out_file(const char *outfile, FILE *pfile)
+copy_global_file(const char *outfile, FILE *pfile)
 {
  char out_file_path[MAXPGPATH];
  FILE *ofile;
  int c;
 
- snprintf(out_file_path, MAXPGPATH, "%s", outfile);
- ofile = fopen(out_file_path, PG_BINARY_W);
+ if (strcmp(outfile, "-") == 0)
+ {
+ int fn = fileno(stdout);
+ ofile = fdopen(dup(fn), PG_BINARY_W);
+ }
+ else
+ {
+ snprintf(out_file_path, MAXPGPATH, "%s", outfile);
+ ofile = fopen(out_file_path, PG_BINARY_W);
+ }
+
 
  if (ofile == NULL)
  {
  fclose(pfile);
- pg_fatal("could not open file: \"%s\"", out_file_path);
+ pg_fatal("could not open file: \"%s\"", outfile);
  }
 
  /* Now append global.dat into out file. */
 
Regards,
Srinath Reddy Sadipiralla,
EDB: https://www.enterprisedb.com

pgsql-hackers by date:

Previous
From: Srinath Reddy
Date:
Subject: Re: Non-text mode for pg_dumpall
Next
From: Fu Zixuan
Date:
Subject: Re: Optimize scram_SaltedPassword performance