Index: doc/src/sgml/ref/alter_index.sgml
===================================================================
RCS file: /usr/local/cvsroot/pgsql-server/doc/src/sgml/ref/alter_index.sgml,v
retrieving revision 1.1
diff -2 -c -r1.1 alter_index.sgml
*** doc/src/sgml/ref/alter_index.sgml 13 Aug 2004 04:32:27 -0000 1.1
--- doc/src/sgml/ref/alter_index.sgml 13 Aug 2004 06:35:17 -0000
***************
*** 0 ****
--- 1,188 ----
+
+
+
+
+ ALTER INDEX
+ SQL - Language Statements
+
+
+
+ ALTER INDEX
+ change the definition of an index
+
+
+
+ ALTER INDEX
+
+
+
+
+ ALTER INDEX name
+ action [, ... ]
+ ALTER INDEX name
+ RENAME TO new_name
+
+ where action is one of:
+
+ OWNER TO new_owner
+ SET INDEXSPACE indexspace_name
+
+
+
+
+ Description
+
+
+ ALTER INDEX changes the definition of an existing index.
+ There are several subforms:
+
+
+
+
+ OWNER
+
+
+ This form changes the owner of the index to the
+ specified user.
+
+
+
+
+
+ SET TABLESPACE
+
+
+ This form changes the index's tablespace to the specified tablespace and
+ moves the data file(s) associated with the index to the new tablespace.
+ See also
+ .
+
+
+
+
+
+ RENAME
+
+
+ The RENAME forms change the name of the index.
+ There is no effect on the stored data.
+
+
+
+
+
+
+
+
+ All the actions except RENAME can be combined into
+ a list of multiple alterations to apply in parallel.
+
+
+
+
+
+ Parameters
+
+
+
+
+ name
+
+
+ The name (possibly schema-qualified) of an existing index to
+ alter.
+
+
+
+
+
+
+ new_name
+
+
+ New name for the index.
+
+
+
+
+
+
+ new_owner
+
+
+ The user name of the new owner of the index.
+
+
+
+
+
+ tablespace_name
+
+
+ The tablespace name to which the index will be moved.
+
+
+
+
+
+
+
+
+ Notes
+
+
+ This same operations are supported by ALTER TABLE>. See also
+ .
+
+
+
+ Changing any part of a system catalog index is not permitted.
+
+
+
+
+ Examples
+
+ To rename an existing index:
+
+ ALTER INDEX distributors RENAME TO suppliers;
+
+
+
+
+ To move a index to a different tablespace:
+
+ ALTER INDEX distributors SET TABLESPACE fasttablespace;
+
+
+
+
+
+
+ Compatibility
+
+
+ ALTER INDEX> is a PostgreSQL extension.
+
+
+
+
+
Index: src/backend/parser/gram.y
===================================================================
RCS file: /usr/local/cvsroot/pgsql-server/src/backend/parser/gram.y,v
retrieving revision 2.469
diff -2 -c -r2.469 gram.y
*** src/backend/parser/gram.y 2 Aug 2004 04:26:35 -0000 2.469
--- src/backend/parser/gram.y 13 Aug 2004 03:50:25 -0000
***************
*** 157,162 ****
%type add_drop
! %type alter_table_cmd
! %type alter_table_cmds
%type opt_drop_behavior
--- 157,162 ----
%type add_drop
! %type alter_table_cmd alter_rel_cmd
! %type alter_table_cmds alter_rel_cmds
%type opt_drop_behavior
***************
*** 1139,1143 ****
/*****************************************************************************
*
! * ALTER TABLE variations
*
*****************************************************************************/
--- 1139,1143 ----
/*****************************************************************************
*
! * ALTER [ TABLE | INDEX ] variations
*
*****************************************************************************/
***************
*** 1149,1152 ****
--- 1149,1161 ----
n->relation = $3;
n->cmds = $4;
+ n->relkind = OBJECT_TABLE;
+ $$ = (Node *)n;
+ }
+ | ALTER INDEX relation_expr alter_rel_cmds
+ {
+ AlterTableStmt *n = makeNode(AlterTableStmt);
+ n->relation = $3;
+ n->cmds = $4;
+ n->relkind = OBJECT_INDEX;
$$ = (Node *)n;
}
***************
*** 1263,1274 ****
$$ = (Node *)n;
}
- /* ALTER TABLE OWNER TO UserId */
- | OWNER TO UserId
- {
- AlterTableCmd *n = makeNode(AlterTableCmd);
- n->subtype = AT_ChangeOwner;
- n->name = $3;
- $$ = (Node *)n;
- }
/* ALTER TABLE CLUSTER ON */
| CLUSTER ON name
--- 1272,1275 ----
***************
*** 1287,1291 ****
$$ = (Node *)n;
}
! /* ALTER TABLE SET TABLESPACE */
| SET TABLESPACE name
{
--- 1288,1312 ----
$$ = (Node *)n;
}
! | alter_rel_cmd
! {
! $$ = $1;
! }
! ;
!
! alter_rel_cmds: alter_rel_cmd { $$ = list_make1($1); }
! | alter_rel_cmds ',' alter_rel_cmd { $$ = lappend($1, $3); }
! ;
!
!
! alter_rel_cmd:
! /* ALTER [ TABLE | INDEX ] OWNER TO UserId */
! OWNER TO UserId
! {
! AlterTableCmd *n = makeNode(AlterTableCmd);
! n->subtype = AT_ChangeOwner;
! n->name = $3;
! $$ = (Node *)n;
! }
! /* ALTER [ TABLE | INDEX ] SET TABLESPACE */
| SET TABLESPACE name
{
***************
*** 1320,1323 ****
--- 1341,1346 ----
;
+
+
/*****************************************************************************
*
***************
*** 3656,3659 ****
--- 3679,3691 ----
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TABLE;
+ n->relation = $3;
+ n->subname = NULL;
+ n->newname = $6;
+ $$ = (Node *)n;
+ }
+ | ALTER INDEX relation_expr RENAME TO name
+ {
+ RenameStmt *n = makeNode(RenameStmt);
+ n->renameType = OBJECT_INDEX;
n->relation = $3;
n->subname = NULL;
Index: src/backend/tcop/utility.c
===================================================================
RCS file: /usr/local/cvsroot/pgsql-server/src/backend/tcop/utility.c,v
retrieving revision 1.223
diff -2 -c -r1.223 utility.c
*** src/backend/tcop/utility.c 2 Aug 2004 01:30:45 -0000 1.223
--- src/backend/tcop/utility.c 13 Aug 2004 03:52:06 -0000
***************
*** 1272,1275 ****
--- 1272,1278 ----
tag = "ALTER GROUP";
break;
+ case OBJECT_INDEX:
+ tag = "ALTER INDEX";
+ break;
case OBJECT_LANGUAGE:
tag = "ALTER LANGUAGE";
***************
*** 1334,1340 ****
case T_AlterTableStmt:
! tag = "ALTER TABLE";
! break;
case T_AlterDomainStmt:
tag = "ALTER DOMAIN";
--- 1337,1355 ----
case T_AlterTableStmt:
! {
! AlterTableStmt *stmt = (AlterTableStmt *) parsetree;
!
! /*
! * We might be supporting ALTER INDEX here, so
! * set the completion table appropriately.
! * Catch all other possibilities with ALTER TABLE
! */
+ if(stmt->relkind == OBJECT_INDEX)
+ tag = "ALTER INDEX";
+ else
+ tag = "ALTER TABLE";
+ }
+ break;
case T_AlterDomainStmt:
tag = "ALTER DOMAIN";
Index: src/bin/psql/tab-complete.c
===================================================================
RCS file: /usr/local/cvsroot/pgsql-server/src/bin/psql/tab-complete.c,v
retrieving revision 1.109
diff -2 -c -r1.109 tab-complete.c
*** src/bin/psql/tab-complete.c 28 Jul 2004 14:23:30 -0000 1.109
--- src/bin/psql/tab-complete.c 13 Aug 2004 06:34:55 -0000
***************
*** 633,637 ****
{
static const char *const list_ALTER[] =
! {"DATABASE", "GROUP", "SCHEMA", "TABLE", "TRIGGER", "USER", NULL};
COMPLETE_WITH_LIST(list_ALTER);
--- 633,638 ----
{
static const char *const list_ALTER[] =
! {"DATABASE", "GROUP", "SCHEMA", "TABLE", "TRIGGER", "USER", "INDEX",
! NULL};
COMPLETE_WITH_LIST(list_ALTER);
***************
*** 647,650 ****
--- 648,661 ----
COMPLETE_WITH_LIST(list_ALTERDATABASE);
}
+ /* ALTER INDEX */
+ else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
+ pg_strcasecmp(prev2_wd, "INDEX") == 0)
+ {
+ static const char *const list_ALTERDATABASE[] =
+ {"SET TABLESPACE", "OWNER TO", "RENAME TO", NULL};
+
+ COMPLETE_WITH_LIST(list_ALTERDATABASE);
+ }
+
/* ALTER TRIGGER , add ON */
else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /usr/local/cvsroot/pgsql-server/src/include/nodes/parsenodes.h,v
retrieving revision 1.265
diff -2 -c -r1.265 parsenodes.h
*** src/include/nodes/parsenodes.h 4 Aug 2004 21:34:24 -0000 1.265
--- src/include/nodes/parsenodes.h 13 Aug 2004 03:50:47 -0000
***************
*** 782,785 ****
--- 782,786 ----
RangeVar *relation; /* table to work on */
List *cmds; /* list of subcommands */
+ ObjectType relkind; /* type of object */
} AlterTableStmt;