Add --encoding to pg_dump.

The Problem:  Occassionally a DBA needs to dump a database to a new
encoding.   In instances where the current encoding, (or lack of an
encoding, like SQL_ASCII) is poorly supported on the target  database
server, it can be useful to dump into a particular  encoding.  But,
currently the only way to set the encoding of  a pg_dump file is to
change  client_encoding in postgresql.conf and restart postmaster.
This is more  than a little awkward for production systems.

Magnus Hagander
This commit is contained in:
Bruce Momjian 2005-07-10 15:08:52 +00:00
parent 0793108036
commit d1cffe2f77
2 changed files with 31 additions and 3 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.78 2005/06/21 20:45:43 tgl Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.79 2005/07/10 15:08:52 momjian Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
@ -194,6 +194,18 @@ PostgreSQL documentation
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><option>-E <replaceable class="parameter">encoding</replaceable></option></term>
<term><option>--encoding=<replaceable class="parameter">encoding</replaceable></option></term>
<listitem>
<para>
Create the dump in the specified encoding. By default, the dump is
created in the database encoding.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><option>-f <replaceable class="parameter">file</replaceable></option></term> <term><option>-f <replaceable class="parameter">file</replaceable></option></term>
<term><option>--file=<replaceable class="parameter">file</replaceable></option></term> <term><option>--file=<replaceable class="parameter">file</replaceable></option></term>

View File

@ -12,7 +12,7 @@
* by PostgreSQL * by PostgreSQL
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.414 2005/07/10 14:26:29 momjian Exp $ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.415 2005/07/10 15:08:52 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -185,6 +185,7 @@ main(int argc, char **argv)
const char *pghost = NULL; const char *pghost = NULL;
const char *pgport = NULL; const char *pgport = NULL;
const char *username = NULL; const char *username = NULL;
const char *dumpencoding = NULL;
bool oids = false; bool oids = false;
TableInfo *tblinfo; TableInfo *tblinfo;
int numTables; int numTables;
@ -231,6 +232,7 @@ main(int argc, char **argv)
{"no-privileges", no_argument, NULL, 'x'}, {"no-privileges", no_argument, NULL, 'x'},
{"no-acl", no_argument, NULL, 'x'}, {"no-acl", no_argument, NULL, 'x'},
{"compress", required_argument, NULL, 'Z'}, {"compress", required_argument, NULL, 'Z'},
{"encoding", required_argument, NULL, 'E'},
{"help", no_argument, NULL, '?'}, {"help", no_argument, NULL, '?'},
{"version", no_argument, NULL, 'V'}, {"version", no_argument, NULL, 'V'},
@ -276,7 +278,7 @@ main(int argc, char **argv)
} }
} }
while ((c = getopt_long(argc, argv, "abcCdDf:F:h:in:oOp:RsS:t:uU:vWxX:Z:", while ((c = getopt_long(argc, argv, "abcCdDE:f:F:h:in:oOp:RsS:t:uU:vWxX:Z:",
long_options, &optindex)) != -1) long_options, &optindex)) != -1)
{ {
switch (c) switch (c)
@ -308,6 +310,10 @@ main(int argc, char **argv)
attrNames = true; attrNames = true;
break; break;
case 'E': /* Dump encoding */
dumpencoding = optarg;
break;
case 'f': case 'f':
filename = optarg; filename = optarg;
break; break;
@ -515,6 +521,15 @@ main(int argc, char **argv)
/* Set the datestyle to ISO to ensure the dump's portability */ /* Set the datestyle to ISO to ensure the dump's portability */
do_sql_command(g_conn, "SET DATESTYLE = ISO"); do_sql_command(g_conn, "SET DATESTYLE = ISO");
/* Set the client encoding */
if (dumpencoding)
{
char *cmd = malloc(strlen(dumpencoding) + 32);
sprintf(cmd,"SET client_encoding='%s'", dumpencoding);
do_sql_command(g_conn, cmd);
free(cmd);
}
/* /*
* If supported, set extra_float_digits so that we can dump float data * If supported, set extra_float_digits so that we can dump float data
* exactly (given correctly implemented float I/O code, anyway) * exactly (given correctly implemented float I/O code, anyway)
@ -662,6 +677,7 @@ help(const char *progname)
printf(_(" -C, --create include commands to create database in dump\n")); printf(_(" -C, --create include commands to create database in dump\n"));
printf(_(" -d, --inserts dump data as INSERT, rather than COPY, commands\n")); printf(_(" -d, --inserts dump data as INSERT, rather than COPY, commands\n"));
printf(_(" -D, --column-inserts dump data as INSERT commands with column names\n")); printf(_(" -D, --column-inserts dump data as INSERT commands with column names\n"));
printf(_(" -E, --encoding=ENCODING dump the data in encoding ENCODING\n"));
printf(_(" -n, --schema=SCHEMA dump the named schema only\n")); printf(_(" -n, --schema=SCHEMA dump the named schema only\n"));
printf(_(" -o, --oids include OIDs in dump\n")); printf(_(" -o, --oids include OIDs in dump\n"));
printf(_(" -O, --no-owner skip restoration of object ownership\n" printf(_(" -O, --no-owner skip restoration of object ownership\n"