When you try to insert, update, or delete data on a view in PostgreSQL, the database cannot change the view directly because views do not store data. Instead, you create an INSTEAD OF trigger on the view. This trigger runs a function you write that performs the needed changes on the real tables behind the view. For example, when inserting into the view, the trigger function inserts the data into the underlying table. The trigger function receives the new row data in a variable called NEW. If you try to insert into a view without an INSTEAD OF trigger, PostgreSQL will give an error. This way, the view appears to update as expected, but the real data changes happen in the base tables. This method lets you keep views updatable even when they are complex.