1. As they're called in postgres at least
2. https://www.postgresql.org/docs/current/sql-creatematerializ...
1. As they're called in postgres at least
2. https://www.postgresql.org/docs/current/sql-creatematerializ...
If you start to need any kind of flexibility over refreshing the table, you'll need to move to using a plain old table anyway.
It's my understanding that there is a proposed feature, with a proof-of-concept floating around, called "Incremental View Maintenance", which is auto-update of dependent Materialized Views when their dependent base-tables change.
https://wiki.postgresql.org/wiki/Incremental_View_Maintenanc...
Materialized view with IVM option created by CRATE INCREMENTAL MATERIALIZED VIEW command. Noted this syntax is just tentative, so it may be changed.
When a materialized view is created, AFTER triggers are internally created on its all base tables.
When the base tables is modified (INSERT, DELETE, UPDATE), this view is updated incrementally in the trigger function.
I think there are some performance/technical things that are getting sorted out with this, but it would be a killer feature.It's the one thing I wish Postgres had that it doesn't. You have to use triggers to do this currently.
In particular, an event-sourced world becomes much easier to implement and maintain with the DB handling all the incremental magic.
[1] https://spaghettidba.com/2011/08/03/enforcing-complex-constr...
But for simple things they’re magical.
The best method I've personally found for window functions is cross/outer apply + narrow indexes with included columns. A lot of times you can get away without an indexed view at all.
> you need to hint the server to actually use the indexed view or it will just use it as a regular view which I don’t understand the reasoning behind
SQL Server Enterprise will use indexed views automatically. But you gotta shell out the big bucks for that improved query planner.