1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-25 01:02:05 +03:00

ALTER TABLESPACE ... MOVE ... OWNED BY

Add the ability to specify the objects to move by who those objects are
owned by (as relowner) and change ALL to mean ALL objects.  This
makes the command always operate against a well-defined set of objects
and not have the objects-to-be-moved based on the role of the user
running the command.

Per discussion with Simon and Tom.
This commit is contained in:
Stephen Frost
2014-01-23 23:52:40 -05:00
parent 3ee74df2e4
commit fbe19ee3b8
8 changed files with 117 additions and 29 deletions

View File

@ -7325,9 +7325,11 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
AlterTableSpaceMoveStmt *n =
makeNode(AlterTableSpaceMoveStmt);
n->orig_tablespacename = $3;
n->objtype = -1;
n->move_all = true;
n->roles = NIL;
n->new_tablespacename = $7;
n->nowait = $8;
n->move_all = true;
$$ = (Node *)n;
}
| ALTER TABLESPACE name MOVE TABLES TO name opt_nowait
@ -7335,10 +7337,11 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
AlterTableSpaceMoveStmt *n =
makeNode(AlterTableSpaceMoveStmt);
n->orig_tablespacename = $3;
n->new_tablespacename = $7;
n->nowait = $8;
n->objtype = OBJECT_TABLE;
n->move_all = false;
n->roles = NIL;
n->new_tablespacename = $7;
n->nowait = $8;
$$ = (Node *)n;
}
| ALTER TABLESPACE name MOVE INDEXES TO name opt_nowait
@ -7346,10 +7349,11 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
AlterTableSpaceMoveStmt *n =
makeNode(AlterTableSpaceMoveStmt);
n->orig_tablespacename = $3;
n->new_tablespacename = $7;
n->nowait = $8;
n->objtype = OBJECT_INDEX;
n->move_all = false;
n->roles = NIL;
n->new_tablespacename = $7;
n->nowait = $8;
$$ = (Node *)n;
}
| ALTER TABLESPACE name MOVE MATERIALIZED VIEWS TO name opt_nowait
@ -7357,10 +7361,59 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
AlterTableSpaceMoveStmt *n =
makeNode(AlterTableSpaceMoveStmt);
n->orig_tablespacename = $3;
n->new_tablespacename = $8;
n->nowait = $9;
n->objtype = OBJECT_MATVIEW;
n->move_all = false;
n->roles = NIL;
n->new_tablespacename = $8;
n->nowait = $9;
$$ = (Node *)n;
}
| ALTER TABLESPACE name MOVE ALL OWNED BY role_list TO name opt_nowait
{
AlterTableSpaceMoveStmt *n =
makeNode(AlterTableSpaceMoveStmt);
n->orig_tablespacename = $3;
n->objtype = -1;
n->move_all = true;
n->roles = $8;
n->new_tablespacename = $10;
n->nowait = $11;
$$ = (Node *)n;
}
| ALTER TABLESPACE name MOVE TABLES OWNED BY role_list TO name opt_nowait
{
AlterTableSpaceMoveStmt *n =
makeNode(AlterTableSpaceMoveStmt);
n->orig_tablespacename = $3;
n->objtype = OBJECT_TABLE;
n->move_all = false;
n->roles = $8;
n->new_tablespacename = $10;
n->nowait = $11;
$$ = (Node *)n;
}
| ALTER TABLESPACE name MOVE INDEXES OWNED BY role_list TO name opt_nowait
{
AlterTableSpaceMoveStmt *n =
makeNode(AlterTableSpaceMoveStmt);
n->orig_tablespacename = $3;
n->objtype = OBJECT_INDEX;
n->move_all = false;
n->roles = $8;
n->new_tablespacename = $10;
n->nowait = $11;
$$ = (Node *)n;
}
| ALTER TABLESPACE name MOVE MATERIALIZED VIEWS OWNED BY role_list TO name opt_nowait
{
AlterTableSpaceMoveStmt *n =
makeNode(AlterTableSpaceMoveStmt);
n->orig_tablespacename = $3;
n->objtype = OBJECT_MATVIEW;
n->move_all = false;
n->roles = $9;
n->new_tablespacename = $11;
n->nowait = $12;
$$ = (Node *)n;
}
| ALTER TABLESPACE name SET reloptions