The ALTER VIEW
statement applies a schema change to a view.
ALTER VIEW ... RENAME TO
can be used to move a view from one database to another, but it cannot be used to move a view from one schema to another. To change a views's schema, use SET SCHEMA
.
Note that, in a future release, ALTER VIEW ... RENAME TO
will be limited to changing the name of a view, and will not have to the ability to change a view's database.
This statement performs a schema change. For more information about how online schema changes work in CockroachDB, see Online Schema Changes.
Required privileges
The user must have the DROP
privilege on the view and the CREATE
privilege on the parent database.
Synopsis
Parameters
Parameter | Description |
---|---|
MATERIALIZED |
New in v20.2: Rename a materialized view. |
IF EXISTS |
Rename the view only if a view of view_name exists; if one does not exist, do not return an error. |
view_name |
The name of the view to rename. To find view names, use:SELECT * FROM information_schema.tables WHERE table_type = 'VIEW'; |
name |
The new name for the view, which must be unique to its database and follow these identifier rules. |
Limitations
CockroachDB does not currently support:
- Changing the
SELECT
statement executed by a view. Instead, you must drop the existing view and create a new view. - Renaming a view that other views depend on. This feature may be added in the future (see tracking issue).
Example
> SELECT * FROM information_schema.tables WHERE table_type = 'VIEW';
+---------------+-------------------+--------------------+------------+---------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | VERSION |
+---------------+-------------------+--------------------+------------+---------+
| def | bank | user_accounts | VIEW | 2 |
| def | bank | user_emails | VIEW | 1 |
+---------------+-------------------+--------------------+------------+---------+
(2 rows)
> ALTER VIEW bank.user_emails RENAME TO bank.user_email_addresses;
> RENAME VIEW
> SELECT * FROM information_schema.tables WHERE table_type = 'VIEW';
+---------------+-------------------+----------------------+------------+---------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | VERSION |
+---------------+-------------------+----------------------+------------+---------+
| def | bank | user_accounts | VIEW | 2 |
| def | bank | user_email_addresses | VIEW | 3 |
+---------------+-------------------+----------------------+------------+---------+
(2 rows)