Introduction
Views with CHECK OPTION make sure that any data added or changed through the view fits the rules of that view. This keeps the data clean and correct.
CREATE VIEW view_name AS SELECT columns FROM table_name WHERE condition WITH CHECK OPTION;
CREATE VIEW active_customers AS SELECT * FROM customers WHERE status = 'active' WITH CHECK OPTION;
CREATE VIEW high_salary_employees AS SELECT id, name, salary FROM employees WHERE salary > 50000 WITH CHECK OPTION;
CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(50), salary INT ); INSERT INTO employees (name, salary) VALUES ('Alice', 60000), ('Bob', 45000); CREATE VIEW high_salary_employees AS SELECT id, name, salary FROM employees WHERE salary > 50000 WITH CHECK OPTION; -- This insert will succeed INSERT INTO high_salary_employees (name, salary) VALUES ('Charlie', 70000); -- This insert will fail because salary is not > 50000 INSERT INTO high_salary_employees (name, salary) VALUES ('Dave', 40000);
WITH CHECK OPTION in a PostgreSQL view?WITH CHECK OPTIONWITH CHECK OPTION in PostgreSQL?WITH CHECK OPTION at the end of the CREATE VIEW statement.CREATE VIEW v AS SELECT ... WITH CHECK OPTION;employees(id, name, salary) and the view:CREATE VIEW high_salary AS SELECT * FROM employees WHERE salary > 5000 WITH CHECK OPTION;(10, 'Anna', 4000) into high_salary?CREATE VIEW active_users AS SELECT * FROM users WHERE active = true WITH CHECK OPTION;active = false. What is the result?active = true. WITH CHECK OPTION blocks updates that break this condition.active = false violates the view filter, so the update is rejected.CREATE VIEW vip_customers AS SELECT * FROM customers WHERE vip = true WITH CHECK OPTION;vip = true. WITH CHECK OPTION blocks inserts with vip = false.vip = true succeeds. Inserting Jane with vip = false fails due to CHECK OPTION.Pass the test and this pattern moves unknown