From 896bd121cc4d468245acb76232b95100d5a87e12 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 30 Dec 2002 19:45:17 +0000 Subject: [PATCH] Code review for transaction-safe-TRUNCATE patch: minor cleanups. --- doc/src/sgml/release.sgml | 3 ++- src/backend/commands/cluster.c | 14 ++++++++++---- src/backend/commands/tablecmds.c | 10 +++++++--- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml index 6d2595009b..57fa4052b8 100644 --- a/doc/src/sgml/release.sgml +++ b/doc/src/sgml/release.sgml @@ -1,5 +1,5 @@ @@ -29,6 +29,7 @@ Information schema Domains now support CHECK constraints psql backslash commands for listing conversions, casts, and schemas TRUNCATE TABLE is transaction-safe +CLUSTER can re-cluster a previously clustered table, or all such tables Statement-level triggers System can use either hash- or sort-based strategy for grouped aggregation ON COMMIT options for temp tables diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 0361ede009..4858504f58 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.103 2002/12/30 18:42:13 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.104 2002/12/30 19:45:15 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -26,7 +26,6 @@ #include "catalog/index.h" #include "catalog/indexing.h" #include "catalog/namespace.h" -#include "catalog/pg_constraint.h" #include "commands/cluster.h" #include "commands/tablecmds.h" #include "miscadmin.h" @@ -111,9 +110,9 @@ cluster(ClusterStmt *stmt) RelToCluster rvtc; /* Find and lock the table */ - tableOid = RangeVarGetRelid(stmt->relation, false); + rel = heap_openrv(stmt->relation, AccessExclusiveLock); - rel = heap_open(tableOid, AccessExclusiveLock); + tableOid = RelationGetRelid(rel); /* Check permissions */ if (!check_cluster_permitted(tableOid)) @@ -325,6 +324,13 @@ cluster_rel(RelToCluster *rvtc, bool recheck) elog(ERROR, "CLUSTER: cannot cluster system relation \"%s\"", RelationGetRelationName(OldHeap)); + /* + * Don't allow cluster on temp tables of other backends ... their + * local buffer manager is not going to cope. + */ + if (isOtherTempNamespace(RelationGetNamespace(OldHeap))) + elog(ERROR, "CLUSTER cannot be used on temp tables of other processes"); + /* Drop relcache refcnt on OldIndex, but keep lock */ index_close(OldIndex); diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 29edb61638..3f9cad16ce 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.63 2002/12/30 18:42:14 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.64 2002/12/30 19:45:17 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -423,8 +423,7 @@ TruncateRelation(const RangeVar *relation) Form_pg_constraint con = (Form_pg_constraint) GETSTRUCT(tuple); if (con->contype == 'f' && con->conrelid != relid) - elog(ERROR, "TRUNCATE cannot be used as table %s references " - "this one via foreign key constraint %s", + elog(ERROR, "TRUNCATE cannot be used as table %s references this one via foreign key constraint %s", get_rel_name(con->conrelid), NameStr(con->conname)); } @@ -439,6 +438,11 @@ TruncateRelation(const RangeVar *relation) rebuild_relation(rel, InvalidOid); /* NB: rebuild_relation does heap_close() */ + + /* + * You might think we need to truncate the rel's toast table here too, + * but actually we don't; it will have been rebuilt in an empty state. + */ } /*---------- -- 2.40.0