---
title: "ALTER VIEW"
id: sql-alterview
pg_version: "20devel"
---
# ALTER VIEW — change the definition of a view
## Synopsis
```
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
```
## Description
`ALTER VIEW` changes various auxiliary properties of a view. (If you want to modify the view's defining query, use `CREATE OR REPLACE VIEW`.)
You must own the view to use `ALTER VIEW`. To change a view's schema, you must also have `CREATE` privilege on the new schema. To alter the owner, you must be able to `SET ROLE` to the new owning role, and that role must have `CREATE` privilege on the view's schema. (These restrictions enforce that altering the owner doesn't do anything you couldn't do by dropping and recreating the view. However, a superuser can alter ownership of any view anyway.)
## Parameters
**`name`**
The name (optionally schema-qualified) of an existing view. **`column_name`**
Name of an existing column. **`new_column_name`**
New name for an existing column. **`IF EXISTS`**
Do not throw an error if the view does not exist. A notice is issued in this case. **`SET`/`DROP DEFAULT`**
These forms set or remove the default value for a column. A view column's default value is substituted into any `INSERT` or `UPDATE` command whose target is the view, before applying any rules or triggers for the view. The view's default will therefore take precedence over any default values from underlying relations. **`new_owner`**
The user name of the new owner of the view. **`new_name`**
The new name for the view. **`new_schema`**
The new schema for the view. **`SET ( view_option_name [= view_option_value] [, ... ] )`**, **`RESET ( view_option_name [, ... ] )`**
Sets or resets a view option. Currently supported options are: **`check_option` (`enum`)**
Changes the check option of the view. The value must be `local` or `cascaded`. **`security_barrier` (`boolean`)**
Changes the security-barrier property of the view. The value must be a Boolean value, such as `true` or `false`. **`security_invoker` (`boolean`)**
Changes the security-invoker property of the view. The value must be a Boolean value, such as `true` or `false`.
## Notes
For historical reasons, `ALTER TABLE` can be used with views too; but the only variants of `ALTER TABLE` that are allowed with views are equivalent to the ones shown above.
## Examples
To rename the view `foo` to `bar`:
ALTER VIEW foo RENAME TO bar;
To attach a default column value to an updatable view:
CREATE TABLE base_table (id int, ts timestamptz);
CREATE VIEW a_view AS SELECT * FROM base_table;
ALTER VIEW a_view ALTER COLUMN ts SET DEFAULT now();
INSERT INTO base_table(id) VALUES(1); -- ts will receive a NULL
INSERT INTO a_view(id) VALUES(2); -- ts will receive the current time
## Compatibility
`ALTER VIEW` is a PostgreSQL extension of the SQL standard.
## See Also
[CREATE VIEW](sql-createview.md), [DROP VIEW](sql-dropview.md)