<!--
-$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">
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
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
#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"
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))
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);
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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));
}
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.
+ */
}
/*----------