Commit 5ad7d65d authored by Tom Lane's avatar Tom Lane

Fix incorrect dumping of database LOCATION from 7.0.* servers.

Per report from Mattias Kregert.
parent feaf66aa
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
* by PostgreSQL * by PostgreSQL
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.362 2004/01/07 00:44:21 tgl Exp $ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.363 2004/01/22 19:09:32 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1149,12 +1149,19 @@ dumpDatabase(Archive *AH) ...@@ -1149,12 +1149,19 @@ dumpDatabase(Archive *AH)
} }
else else
{ {
/*
* In 7.0, datpath is either the same as datname, or the user-given
* location with "/" and the datname appended. We must strip this
* junk off to produce a correct LOCATION value.
*/
appendPQExpBuffer(dbQry, "SELECT " appendPQExpBuffer(dbQry, "SELECT "
"(SELECT oid FROM pg_class WHERE relname = 'pg_database') AS tableoid, " "(SELECT oid FROM pg_class WHERE relname = 'pg_database') AS tableoid, "
"oid, " "oid, "
"(SELECT usename FROM pg_user WHERE usesysid = datdba) as dba, " "(SELECT usename FROM pg_user WHERE usesysid = datdba) as dba, "
"pg_encoding_to_char(encoding) as encoding, " "pg_encoding_to_char(encoding) as encoding, "
"datpath " "CASE WHEN length(datpath) > length(datname) THEN "
"substr(datpath,1,length(datpath)-length(datname)-1) "
"ELSE '' END as datpath "
"FROM pg_database " "FROM pg_database "
"WHERE datname = "); "WHERE datname = ");
appendStringLiteral(dbQry, datname, true); appendStringLiteral(dbQry, datname, true);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* *
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.29 2003/11/29 19:52:05 pgsql Exp $ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.30 2004/01/22 19:09:32 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -430,6 +430,10 @@ dumpCreateDB(PGconn *conn) ...@@ -430,6 +430,10 @@ dumpCreateDB(PGconn *conn)
else else
{ {
/* /*
* In 7.0, datpath is either the same as datname, or the user-given
* location with "/" and the datname appended. We must strip this
* junk off to produce a correct LOCATION value.
*
* Note: 7.0 fails to cope with sub-select in COALESCE, so just * Note: 7.0 fails to cope with sub-select in COALESCE, so just
* deal with getting a NULL by not printing any OWNER clause. * deal with getting a NULL by not printing any OWNER clause.
*/ */
...@@ -437,7 +441,11 @@ dumpCreateDB(PGconn *conn) ...@@ -437,7 +441,11 @@ dumpCreateDB(PGconn *conn)
"SELECT datname, " "SELECT datname, "
"(select usename from pg_shadow where usesysid=datdba), " "(select usename from pg_shadow where usesysid=datdba), "
"pg_encoding_to_char(d.encoding), " "pg_encoding_to_char(d.encoding), "
"'f' as datistemplate, datpath, '' as datacl " "'f' as datistemplate, "
"CASE WHEN length(datpath) > length(datname) THEN "
"substr(datpath,1,length(datpath)-length(datname)-1) "
"ELSE '' END as datpath, "
"'' as datacl "
"FROM pg_database d " "FROM pg_database d "
"ORDER BY 1"); "ORDER BY 1");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment