Couldn't you use views for that? Everything you described sounds like a view to me. Whats the difference between them?
Once your indices are larger than than your available memory, write and read performance plummets. This obviously only applies to fairly large tables, but in our case it will be a godsend.
https://www.postgresql.org/docs/10/static/rules-materialized...