diff options
author | Bruce Momjian <bruce@momjian.us> | 2005-07-10 15:08:52 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2005-07-10 15:08:52 +0000 |
commit | d1cffe2f779d95ddb9f0607f284e2c6c3a71d566 (patch) | |
tree | fccb89ecfc26c1ccbc87a6017a823d38e9abc834 /src | |
parent | 07931080360021376af8128b0ca297406a9ab121 (diff) | |
download | postgresql-d1cffe2f779d95ddb9f0607f284e2c6c3a71d566.tar.gz postgresql-d1cffe2f779d95ddb9f0607f284e2c6c3a71d566.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index ec76ecdb997..54ca6252a45 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12,7 +12,7 @@ * by PostgreSQL * * 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 *pgport = NULL; const char *username = NULL; + const char *dumpencoding = NULL; bool oids = false; TableInfo *tblinfo; int numTables; @@ -231,6 +232,7 @@ main(int argc, char **argv) {"no-privileges", no_argument, NULL, 'x'}, {"no-acl", no_argument, NULL, 'x'}, {"compress", required_argument, NULL, 'Z'}, + {"encoding", required_argument, NULL, 'E'}, {"help", no_argument, NULL, '?'}, {"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) { switch (c) @@ -308,6 +310,10 @@ main(int argc, char **argv) attrNames = true; break; + case 'E': /* Dump encoding */ + dumpencoding = optarg; + break; + case 'f': filename = optarg; break; @@ -515,6 +521,15 @@ main(int argc, char **argv) /* Set the datestyle to ISO to ensure the dump's portability */ 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 * 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(_(" -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(_(" -E, --encoding=ENCODING dump the data in encoding ENCODING\n")); printf(_(" -n, --schema=SCHEMA dump the named schema only\n")); printf(_(" -o, --oids include OIDs in dump\n")); printf(_(" -O, --no-owner skip restoration of object ownership\n" |