Bird
Raised Fist0
PostgreSQLquery~20 mins

Updatable views in PostgreSQL - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Updatable Views Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Output of UPDATE on a simple updatable view

Consider a table employees(id, name, salary) and a view high_earners defined as SELECT * FROM employees WHERE salary > 50000. What will be the result of this query?

UPDATE high_earners SET salary = salary + 5000 WHERE id = 3 RETURNING *;
PostgreSQL
CREATE TABLE employees (id INT PRIMARY KEY, name TEXT, salary INT);
INSERT INTO employees VALUES (1, 'Alice', 60000), (2, 'Bob', 45000), (3, 'Carol', 70000);
CREATE VIEW high_earners AS SELECT * FROM employees WHERE salary > 50000;
AReturns the updated row for id=3 with salary increased to 75000
BReturns no rows because id=3 is not in the view
CRaises an error because views cannot be updated
DUpdates all rows in employees, not just id=3
Attempts:
2 left
💡 Hint

Think about whether the view filters rows and if the updated row still meets the filter.

🧠 Conceptual
intermediate
1:30remaining
Which views are updatable in PostgreSQL?

Which of the following views is not updatable by default in PostgreSQL?

AA view selecting all columns from a single table with no WHERE clause
BA view selecting columns with a WHERE filter from one table
CA view selecting all columns from a single table without aggregation
DA view that uses a JOIN between two tables
Attempts:
2 left
💡 Hint

Think about what makes a view simple enough to be updatable.

📝 Syntax
advanced
2:30remaining
Which statement creates an updatable view with an INSTEAD OF trigger?

Given a view v_emp_dept joining employees and departments, which option correctly creates an INSTEAD OF trigger to allow updates on the view?

ACREATE TRIGGER trg_update INSTEAD OF UPDATE ON v_emp_dept FOR EACH ROW EXECUTE FUNCTION update_emp_dept();
BCREATE TRIGGER trg_update AFTER UPDATE ON v_emp_dept FOR EACH ROW EXECUTE PROCEDURE update_emp_dept();
CCREATE TRIGGER trg_update INSTEAD OF UPDATE ON employees FOR EACH ROW EXECUTE FUNCTION update_emp_dept();
DCREATE TRIGGER trg_update BEFORE UPDATE ON v_emp_dept FOR EACH ROW EXECUTE FUNCTION update_emp_dept();
Attempts:
2 left
💡 Hint

INSTEAD OF triggers must be created on views, not tables, and use EXECUTE FUNCTION syntax in PostgreSQL 12+.

❓ optimization
advanced
2:00remaining
Improving performance of updates on an updatable view

You have an updatable view based on a large table with a WHERE clause. Updates on the view are slow. Which approach can improve update performance?

ACreate a materialized view instead of a regular view
BRewrite the view to use a JOIN with another large table
CAdd an index on the columns used in the WHERE clause of the view
DRemove the WHERE clause from the view to include all rows
Attempts:
2 left
💡 Hint

Think about how indexes help queries and updates.

🔧 Debug
expert
3:00remaining
Why does this UPDATE on a view raise an error?

Given the view definition:

CREATE VIEW v_emp AS SELECT id, name, salary, salary * 1.1 AS adjusted_salary FROM employees;

Why does this query raise an error?

UPDATE v_emp SET adjusted_salary = 80000 WHERE id = 2;
ABecause the employees table has no rows with id = 2
BBecause adjusted_salary is a computed column and cannot be updated
CBecause the UPDATE statement syntax is incorrect
DBecause the view does not include the primary key
Attempts:
2 left
💡 Hint

Consider which columns in a view can be updated.

Practice

(1/5)
1. What is an updatable view in PostgreSQL?
easy
A. A function that returns a set of rows
B. A view that only shows data but cannot be changed
C. A table that stores data permanently
D. A view that allows you to change data in the underlying table through it

Solution

  1. Step 1: Understand the definition of a view

    A view is a saved query that shows data from one or more tables.
  2. Step 2: Identify what makes a view updatable

    An updatable view lets you change data in the underlying table by modifying the view.
  3. Final Answer:

    A view that allows you to change data in the underlying table through it -> Option D
  4. Quick Check:

    Updatable view = change data through view [OK]
Hint: Updatable views let you edit data through the view [OK]
Common Mistakes:
  • Confusing views with tables
  • Thinking all views are read-only
  • Believing views store data themselves
2. Which of the following is the correct syntax to create a simple updatable view on a single table employees showing id and name columns?
easy
A. CREATE VIEW emp_view AS SELECT id, name FROM employees;
B. CREATE VIEW emp_view AS UPDATE employees SET name = 'John';
C. CREATE TABLE emp_view AS SELECT id, name FROM employees;
D. CREATE FUNCTION emp_view() RETURNS TABLE(id INT, name TEXT) AS $$ SELECT id, name FROM employees; $$ LANGUAGE SQL;

Solution

  1. Step 1: Recall the syntax to create a view

    The syntax is CREATE VIEW view_name AS SELECT columns FROM table;
  2. Step 2: Check each option

    CREATE VIEW emp_view AS SELECT id, name FROM employees; matches the correct syntax for a simple view. The other options are incorrect because they use UPDATE, CREATE TABLE, or FUNCTION instead of CREATE VIEW.
  3. Final Answer:

    CREATE VIEW emp_view AS SELECT id, name FROM employees; -> Option A
  4. Quick Check:

    CREATE VIEW uses SELECT query [OK]
Hint: CREATE VIEW uses SELECT, not UPDATE or TABLE [OK]
Common Mistakes:
  • Using UPDATE instead of SELECT in CREATE VIEW
  • Confusing CREATE VIEW with CREATE TABLE
  • Trying to create a function instead of a view
3. Given the table products(id, name, price) and the view CREATE VIEW cheap_products AS SELECT id, name FROM products WHERE price < 100; What happens if you try to update the name of a product through cheap_products view?
medium
A. The update changes only the view but not the underlying table
B. The update fails because the view filters rows with a WHERE clause
C. The update succeeds and changes the product name in the products table
D. The update causes a syntax error

Solution

  1. Step 1: Understand updatable views with WHERE clause

    Views that select from a single base table with a restricting WHERE clause are updatable in PostgreSQL.
  2. Step 2: Check the effect of updating through filtered view

    Updating the name of a product visible in the view (price < 100) will successfully update the underlying products table.
  3. Final Answer:

    The update succeeds and changes the product name in the products table -> Option C
  4. Quick Check:

    Single-table views with WHERE are updatable [OK]
Hint: Single-table views with WHERE filters are updatable [OK]
Common Mistakes:
  • Thinking WHERE clause prevents updates
  • Thinking update affects only the view
  • Expecting syntax error instead of runtime error
4. You created a view with this SQL:
CREATE VIEW emp_dept AS SELECT e.id, e.name, d.name AS dept_name FROM employees e JOIN departments d ON e.dept_id = d.id;
When you try to update emp_dept to change an employee's name, you get an error. What is the main reason?
medium
A. The view joins multiple tables, so it is not automatically updatable
B. The view does not include the employee's ID column
C. The view uses aliases for columns, causing syntax errors
D. The view is missing a WHERE clause

Solution

  1. Step 1: Analyze the view definition

    The view joins two tables: employees and departments.
  2. Step 2: Understand updatable view rules for joins

    Views that join multiple tables are not automatically updatable in PostgreSQL because the system cannot decide how to update multiple tables from one view.
  3. Final Answer:

    The view joins multiple tables, so it is not automatically updatable -> Option A
  4. Quick Check:

    Joined views are not updatable by default [OK]
Hint: Views with joins are not updatable automatically [OK]
Common Mistakes:
  • Thinking missing ID causes update failure
  • Blaming column aliases for errors
  • Assuming WHERE clause is required for updates
5. You want to make a complex view updatable that joins orders and customers tables. Which PostgreSQL feature should you use to allow updates through this view?
hard
A. Use a materialized view instead of a regular view
B. Create INSTEAD OF triggers on the view to handle updates
C. Add a WHERE clause to the view to filter rows
D. Create a function that returns the joined data

Solution

  1. Step 1: Understand limitations of updatable views with joins

    Views joining multiple tables are not automatically updatable in PostgreSQL.
  2. Step 2: Use INSTEAD OF triggers to enable updates

    INSTEAD OF triggers let you define custom update logic on complex views, making them updatable.
  3. Final Answer:

    Create INSTEAD OF triggers on the view to handle updates -> Option B
  4. Quick Check:

    INSTEAD OF triggers enable updates on complex views [OK]
Hint: Use INSTEAD OF triggers for complex view updates [OK]
Common Mistakes:
  • Thinking WHERE clause makes view updatable
  • Confusing materialized views with updatable views
  • Believing functions replace update triggers
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard