From 5fa3418304b06967fa54052b183bf96e1193d85e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 23 Sep 2002 20:43:41 +0000 Subject: Disallow VACUUM, ANALYZE, TRUNCATE on temp tables belonging to other backends. Given that temp tables now store data locally in the local buffer manager, these things are not going to work safely. --- src/backend/commands/tablecmds.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/backend/commands/tablecmds.c') diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 7b2bab71c34..0934a274c7a 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.43 2002/09/22 19:42:50 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.44 2002/09/23 20:43:40 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -367,6 +367,7 @@ TruncateRelation(const RangeVar *relation) RelationGetRelationName(rel)); } + /* Permissions checks */ if (!allowSystemTableMods && IsSystemRelation(rel)) elog(ERROR, "TRUNCATE cannot be used on system tables. '%s' is a system table", RelationGetRelationName(rel)); @@ -374,6 +375,13 @@ TruncateRelation(const RangeVar *relation) if (!pg_class_ownercheck(relid, GetUserId())) aclcheck_error(ACLCHECK_NOT_OWNER, RelationGetRelationName(rel)); + /* + * Don't allow truncate on temp tables of other backends ... their + * local buffer manager is not going to cope. + */ + if (isOtherTempNamespace(RelationGetNamespace(rel))) + elog(ERROR, "TRUNCATE cannot be used on temp tables of other processes"); + /* * Don't allow truncate on tables which are referenced by foreign keys */ -- cgit v1.2.3