summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-08-22 19:40:37 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-08-22 19:40:37 +0000
commit83357da684b66c5ed50aac0326042fdcda7e3757 (patch)
treed0a8e85ffb9484897950735dbfe1eda338f6da3c /src
parentbf1e33d24a9611583595eb1c6cc2e7ce3fa01da4 (diff)
Cause ALTER INDEX OWNER to generate a warning and do nothing, rather than
erroring out as it has done for the last couple weeks. Document that this form is now ignored because indexes can't usefully have different owners from their parent tables. Fix pg_dump to not generate ALTER OWNER commands for indexes.
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/tablecmds.c21
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c11
2 files changed, 23 insertions, 9 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 95e3ef68bb0..f2dd4a5a47d 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.167 2005/08/22 17:38:20 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.168 2005/08/22 19:40:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -5279,6 +5279,25 @@ ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing)
/* ok to change owner */
break;
case RELKIND_INDEX:
+ if (!recursing)
+ {
+ /*
+ * Because ALTER INDEX OWNER used to be allowed, and in fact
+ * is generated by old versions of pg_dump, we give a warning
+ * and do nothing rather than erroring out. Also, to avoid
+ * unnecessary chatter while restoring those old dumps, say
+ * nothing at all if the command would be a no-op anyway.
+ */
+ if (tuple_class->relowner != newOwnerId)
+ ereport(WARNING,
+ (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+ errmsg("cannot change owner of index \"%s\"",
+ NameStr(tuple_class->relname)),
+ errhint("Change the ownership of the index's table, instead.")));
+ /* quick hack to exit via the no-op path */
+ newOwnerId = tuple_class->relowner;
+ }
+ break;
case RELKIND_TOASTVALUE:
if (recursing)
break;
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 9bfed97424f..a8fb1d70f77 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -15,7 +15,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.112 2005/08/12 01:35:59 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.113 2005/08/22 19:40:37 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -2305,14 +2305,9 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH)
strcmp(type, "SEQUENCE") == 0)
type = "TABLE";
- /* We assume CONSTRAINTs are always pkey/unique indexes */
- if (strcmp(type, "CONSTRAINT") == 0)
- type = "INDEX";
-
/* objects named by a schema and name */
if (strcmp(type, "CONVERSION") == 0 ||
strcmp(type, "DOMAIN") == 0 ||
- strcmp(type, "INDEX") == 0 ||
strcmp(type, "TABLE") == 0 ||
strcmp(type, "TYPE") == 0)
{
@@ -2473,12 +2468,10 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat
strlen(te->owner) > 0 && strlen(te->dropStmt) > 0)
{
if (strcmp(te->desc, "AGGREGATE") == 0 ||
- strcmp(te->desc, "CONSTRAINT") == 0 ||
strcmp(te->desc, "CONVERSION") == 0 ||
strcmp(te->desc, "DATABASE") == 0 ||
strcmp(te->desc, "DOMAIN") == 0 ||
strcmp(te->desc, "FUNCTION") == 0 ||
- strcmp(te->desc, "INDEX") == 0 ||
strcmp(te->desc, "OPERATOR") == 0 ||
strcmp(te->desc, "OPERATOR CLASS") == 0 ||
strcmp(te->desc, "SCHEMA") == 0 ||
@@ -2497,8 +2490,10 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat
}
else if (strcmp(te->desc, "CAST") == 0 ||
strcmp(te->desc, "CHECK CONSTRAINT") == 0 ||
+ strcmp(te->desc, "CONSTRAINT") == 0 ||
strcmp(te->desc, "DEFAULT") == 0 ||
strcmp(te->desc, "FK CONSTRAINT") == 0 ||
+ strcmp(te->desc, "INDEX") == 0 ||
strcmp(te->desc, "PROCEDURAL LANGUAGE") == 0 ||
strcmp(te->desc, "RULE") == 0 ||
strcmp(te->desc, "TRIGGER") == 0)