For AI agents: the complete documentation index is at llms.txt. Every page is also available as markdown by appending .md to its URL, or by sending an Accept: text/markdown request header.

ALTER VIEW

Modifies an existing view's definition. The view must exist before it can be altered.

For more information on views, see the Views documentation.

Syntax

ALTER VIEW view_name AS ( query )

Parameters

ParameterDescription
view_nameName of the existing view to modify
queryNew SELECT statement defining the view

Examples

Change view query

Alter view definition
-- Original view
CREATE VIEW summary AS (
SELECT ts, symbol, max(price) as max_price
FROM trades
SAMPLE BY 1h
)

-- Alter to change aggregation
ALTER VIEW summary AS (
SELECT ts, symbol, avg(price) as avg_price
FROM trades
SAMPLE BY 1h
)

Add columns to view

Expand view columns
-- Original view
CREATE VIEW trade_view AS (
SELECT ts, symbol, price FROM trades
)

-- Add volume column
ALTER VIEW trade_view AS (
SELECT ts, symbol, price, quantity FROM trades
)

Change filtering

Modify view filter
-- Original view
CREATE VIEW filtered AS (
SELECT * FROM trades WHERE price > 100
)

-- Change filter threshold
ALTER VIEW filtered AS (
SELECT * FROM trades WHERE price > 200
)

Update parameterized view

Modify parameterized view
-- Original view with parameter
CREATE VIEW by_price AS (
DECLARE @min := 0
SELECT * FROM trades WHERE price >= @min
)

-- Change default value
ALTER VIEW by_price AS (
DECLARE @min := 100
SELECT * FROM trades WHERE price >= @min
)

Add parameters to existing view

Add DECLARE to view
-- Original view without parameters
CREATE VIEW trades_filtered AS (
SELECT * FROM trades WHERE price > 100
)

-- Add parameter
ALTER VIEW trades_filtered AS (
DECLARE @threshold := 100
SELECT * FROM trades WHERE price > @threshold
)

Errors

ErrorCause
view does not exist [view=name]View with specified name doesn't exist
table does not exist [table=name]Referenced table in new query doesn't exist
Invalid columnColumn in new query doesn't exist
circular dependency detectedNew definition would create circular reference
Access denied [ALTER VIEW on view_name]User lacks ALTER VIEW permission (Enterprise)
Access denied [SELECT on table_name]User lacks SELECT on tables in new definition (Enterprise)

Behavior

  • Altering a view replaces its entire definition
  • The new query must be valid at the time of alteration
  • Dependent views may become invalid if the altered view's output changes
  • Use CREATE OR REPLACE VIEW as an alternative if you want to create the view when it doesn't exist

Definer permissions transfer (Enterprise)

When a user alters a view, the view's definer permissions transfer to that user. This means:

  • The view now runs with the permissions of the user who performed the ALTER
  • Other users querying the view can access data the new definer has access to
  • The original creator's permissions no longer apply to the view
Definer transfer example
-- UserA creates view on table1 (UserA has SELECT on table1)
-- UserA is the "definer"
CREATE VIEW my_view AS (SELECT * FROM table1);

-- UserB alters view to reference table2 (UserB has SELECT on table2)
-- UserB becomes the new "definer"
ALTER VIEW my_view AS (SELECT * FROM table2);

-- UserC (with SELECT on my_view) now sees table2 data
-- using UserB's permissions
SELECT * FROM my_view;

Permissions (Enterprise)

Altering a view requires:

  1. ALTER VIEW permission on the view
  2. SELECT permission on all tables referenced in the new definition
-- Grant ALTER VIEW permission
GRANT ALTER VIEW ON my_view TO username;

You cannot use ALTER VIEW to access tables you don't have permission for:

-- This fails if user doesn't have SELECT on secret_table
ALTER VIEW my_view AS (SELECT * FROM secret_table);
-- Error: Access denied for username [SELECT on secret_table]

See also