Commit 896bd121 authored by Tom Lane's avatar Tom Lane

Code review for transaction-safe-TRUNCATE patch: minor cleanups.

parent a03c0d93
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.173 2002/12/20 00:24:00 momjian Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.174 2002/12/30 19:45:11 tgl Exp $
--> -->
<appendix id="release"> <appendix id="release">
...@@ -29,6 +29,7 @@ Information schema ...@@ -29,6 +29,7 @@ Information schema
Domains now support CHECK constraints Domains now support CHECK constraints
psql backslash commands for listing conversions, casts, and schemas psql backslash commands for listing conversions, casts, and schemas
TRUNCATE TABLE is transaction-safe TRUNCATE TABLE is transaction-safe
CLUSTER can re-cluster a previously clustered table, or all such tables
Statement-level triggers Statement-level triggers
System can use either hash- or sort-based strategy for grouped aggregation System can use either hash- or sort-based strategy for grouped aggregation
ON COMMIT options for temp tables ON COMMIT options for temp tables
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -26,7 +26,6 @@
#include "catalog/index.h" #include "catalog/index.h"
#include "catalog/indexing.h" #include "catalog/indexing.h"
#include "catalog/namespace.h" #include "catalog/namespace.h"
#include "catalog/pg_constraint.h"
#include "commands/cluster.h" #include "commands/cluster.h"
#include "commands/tablecmds.h" #include "commands/tablecmds.h"
#include "miscadmin.h" #include "miscadmin.h"
...@@ -111,9 +110,9 @@ cluster(ClusterStmt *stmt) ...@@ -111,9 +110,9 @@ cluster(ClusterStmt *stmt)
RelToCluster rvtc; RelToCluster rvtc;
/* Find and lock the table */ /* 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 */ /* Check permissions */
if (!check_cluster_permitted(tableOid)) if (!check_cluster_permitted(tableOid))
...@@ -325,6 +324,13 @@ cluster_rel(RelToCluster *rvtc, bool recheck) ...@@ -325,6 +324,13 @@ cluster_rel(RelToCluster *rvtc, bool recheck)
elog(ERROR, "CLUSTER: cannot cluster system relation \"%s\"", elog(ERROR, "CLUSTER: cannot cluster system relation \"%s\"",
RelationGetRelationName(OldHeap)); 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 */ /* Drop relcache refcnt on OldIndex, but keep lock */
index_close(OldIndex); index_close(OldIndex);
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -423,8 +423,7 @@ TruncateRelation(const RangeVar *relation)
Form_pg_constraint con = (Form_pg_constraint) GETSTRUCT(tuple); Form_pg_constraint con = (Form_pg_constraint) GETSTRUCT(tuple);
if (con->contype == 'f' && con->conrelid != relid) if (con->contype == 'f' && con->conrelid != relid)
elog(ERROR, "TRUNCATE cannot be used as table %s references " elog(ERROR, "TRUNCATE cannot be used as table %s references this one via foreign key constraint %s",
"this one via foreign key constraint %s",
get_rel_name(con->conrelid), get_rel_name(con->conrelid),
NameStr(con->conname)); NameStr(con->conname));
} }
...@@ -439,6 +438,11 @@ TruncateRelation(const RangeVar *relation) ...@@ -439,6 +438,11 @@ TruncateRelation(const RangeVar *relation)
rebuild_relation(rel, InvalidOid); rebuild_relation(rel, InvalidOid);
/* NB: rebuild_relation does heap_close() */ /* 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.
*/
} }
/*---------- /*----------
......
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