Re: SET WITHOUT CLUSTER - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: SET WITHOUT CLUSTER |
Date | |
Msg-id | 200406022104.i52L4bC08687@candle.pha.pa.us Whole thread Raw |
In response to | SET WITHOUT CLUSTER (Christopher Kings-Lynne <chriskl@familyhealth.com.au>) |
List | pgsql-patches |
Patch applied. Thanks. I modified your docs slightly: This form removes the most recently used <xref linkend="SQL-CLUSTER" endterm="sql-cluster-title"> index specification from the table. This affects future cluster operations that don't specify an index. --------------------------------------------------------------------------- Christopher Kings-Lynne wrote: > OK, here's the final version of SET WITHOUT CLUSTER. Has docs + > regression test. > > Chris > > Index: doc/src/sgml/ref/alter_table.sgml > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/doc/src/sgml/ref/alter_table.sgml,v > retrieving revision 1.69 > diff -c -r1.69 alter_table.sgml > *** doc/src/sgml/ref/alter_table.sgml 5 May 2004 04:48:45 -0000 1.69 > --- doc/src/sgml/ref/alter_table.sgml 24 May 2004 05:55:47 -0000 > *************** > *** 42,47 **** > --- 42,48 ---- > SET WITHOUT OIDS > OWNER TO <replaceable class="PARAMETER">new_owner</replaceable> > CLUSTER ON <replaceable class="PARAMETER">index_name</replaceable> > + SET WITHOUT CLUSTER > </synopsis> > </refsynopsisdiv> > > *************** > *** 219,224 **** > --- 220,235 ---- > </listitem> > </varlistentry> > > + <varlistentry> > + <term><literal>SET WITHOUT CLUSTER</literal></term> > + <listitem> > + <para> > + This form disables future <xref linkend="SQL-CLUSTER" endterm="sql-cluster-title"> on > + any indexes on a table. > + </para> > + </listitem> > + </varlistentry> > + > <varlistentry> > <term><literal>RENAME</literal></term> > <listitem> > Index: src/backend/commands/tablecmds.c > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/tablecmds.c,v > retrieving revision 1.107 > diff -c -r1.107 tablecmds.c > *** src/backend/commands/tablecmds.c 8 May 2004 22:46:29 -0000 1.107 > --- src/backend/commands/tablecmds.c 24 May 2004 05:55:50 -0000 > *************** > *** 233,238 **** > --- 233,239 ---- > static void ATPostAlterTypeParse(char *cmd, List **wqueue); > static void ATExecChangeOwner(Oid relationOid, int32 newOwnerSysId); > static void ATExecClusterOn(Relation rel, const char *indexName); > + static void ATExecDropCluster(Relation rel); > static int ri_trigger_type(Oid tgfoid); > static void update_ri_trigger_args(Oid relid, > const char *oldname, > *************** > *** 1921,1928 **** > pass = AT_PASS_MISC; > break; > case AT_ClusterOn: /* CLUSTER ON */ > ATSimplePermissions(rel, false); > ! /* This command never recurses */ > /* No command-specific prep needed */ > pass = AT_PASS_MISC; > break; > --- 1922,1930 ---- > pass = AT_PASS_MISC; > break; > case AT_ClusterOn: /* CLUSTER ON */ > + case AT_DropCluster: /* SET WITHOUT CLUSTER */ > ATSimplePermissions(rel, false); > ! /* These commands never recurse */ > /* No command-specific prep needed */ > pass = AT_PASS_MISC; > break; > *************** > *** 2082,2087 **** > --- 2084,2092 ---- > case AT_ClusterOn: /* CLUSTER ON */ > ATExecClusterOn(rel, cmd->name); > break; > + case AT_DropCluster: /* SET WITHOUT CLUSTER */ > + ATExecDropCluster(rel); > + break; > case AT_DropOids: /* SET WITHOUT OIDS */ > /* > * Nothing to do here; we'll have generated a DropColumn subcommand > *************** > *** 5051,5056 **** > --- 5056,5074 ---- > /* And do the work */ > mark_index_clustered(rel, indexOid); > } > + > + /* > + * ALTER TABLE SET WITHOUT CLUSTER > + * > + * We have to find any indexes on the table that have indisclustered bit > + * set and turn it off. > + */ > + static void > + ATExecDropCluster(Relation rel) > + { > + mark_index_clustered(rel, InvalidOid); > + } > + > > /* > * ALTER TABLE CREATE TOAST TABLE > Index: src/backend/parser/gram.y > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/src/backend/parser/gram.y,v > retrieving revision 2.454 > diff -c -r2.454 gram.y > *** src/backend/parser/gram.y 10 May 2004 22:44:45 -0000 2.454 > --- src/backend/parser/gram.y 24 May 2004 05:55:52 -0000 > *************** > *** 1263,1268 **** > --- 1263,1276 ---- > n->name = $3; > $$ = (Node *)n; > } > + /* ALTER TABLE <name> SET WITHOUT CLUSTER */ > + | SET WITHOUT CLUSTER > + { > + AlterTableCmd *n = makeNode(AlterTableCmd); > + n->subtype = AT_DropCluster; > + n->name = NULL; > + $$ = (Node *)n; > + } > ; > > alter_column_default: > Index: src/include/nodes/parsenodes.h > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/src/include/nodes/parsenodes.h,v > retrieving revision 1.255 > diff -c -r1.255 parsenodes.h > *** src/include/nodes/parsenodes.h 5 May 2004 04:48:47 -0000 1.255 > --- src/include/nodes/parsenodes.h 24 May 2004 05:55:53 -0000 > *************** > *** 793,798 **** > --- 793,799 ---- > AT_ToastTable, /* create toast table */ > AT_ChangeOwner, /* change owner */ > AT_ClusterOn, /* CLUSTER ON */ > + AT_DropCluster, /* SET WITHOUT CLUSTER */ > AT_DropOids /* SET WITHOUT OIDS */ > } AlterTableType; > > Index: src/test/regress/expected/cluster.out > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/src/test/regress/expected/cluster.out,v > retrieving revision 1.14 > diff -c -r1.14 cluster.out > *** src/test/regress/expected/cluster.out 2 Oct 2003 06:32:46 -0000 1.14 > --- src/test/regress/expected/cluster.out 24 May 2004 05:55:53 -0000 > *************** > *** 297,302 **** > --- 297,313 ---- > clstr_tst_b_c > (1 row) > > + -- Try turning off all clustering > + ALTER TABLE clstr_tst SET WITHOUT CLUSTER; > + SELECT pg_class.relname FROM pg_index, pg_class, pg_class AS pg_class_2 > + WHERE pg_class.oid=indexrelid > + AND indrelid=pg_class_2.oid > + AND pg_class_2.relname = 'clstr_tst' > + AND indisclustered; > + relname > + --------- > + (0 rows) > + > -- Verify that clustering all tables does in fact cluster the right ones > CREATE USER clstr_user; > CREATE TABLE clstr_1 (a INT PRIMARY KEY); > Index: src/test/regress/sql/cluster.sql > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/src/test/regress/sql/cluster.sql,v > retrieving revision 1.7 > diff -c -r1.7 cluster.sql > *** src/test/regress/sql/cluster.sql 20 Mar 2003 18:52:48 -0000 1.7 > --- src/test/regress/sql/cluster.sql 24 May 2004 05:55:53 -0000 > *************** > *** 95,100 **** > --- 95,108 ---- > AND pg_class_2.relname = 'clstr_tst' > AND indisclustered; > > + -- Try turning off all clustering > + ALTER TABLE clstr_tst SET WITHOUT CLUSTER; > + SELECT pg_class.relname FROM pg_index, pg_class, pg_class AS pg_class_2 > + WHERE pg_class.oid=indexrelid > + AND indrelid=pg_class_2.oid > + AND pg_class_2.relname = 'clstr_tst' > + AND indisclustered; > + > -- Verify that clustering all tables does in fact cluster the right ones > CREATE USER clstr_user; > CREATE TABLE clstr_1 (a INT PRIMARY KEY); > > ---------------------------(end of broadcast)--------------------------- > TIP 9: the planner will ignore your desire to choose an index scan if your > joining column's datatypes do not match -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
pgsql-patches by date: