Code review for transaction-safe-TRUNCATE patch: minor cleanups.
This commit is contained in:
parent
a03c0d93d5
commit
896bd121cc
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$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
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* 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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* 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)
|
|||||||
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)
|
|||||||
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.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------
|
/*----------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user