exports.up = async function(knex) { await knex.raw(` DROP MATERIALIZED VIEW stashes_meta; CREATE MATERIALIZED VIEW stashes_meta AS ( SELECT stashes.id as stash_id, COUNT(DISTINCT stashes_scenes)::integer as stashed_scenes, COUNT(DISTINCT stashes_movies)::integer as stashed_movies, COUNT(DISTINCT stashes_actors)::integer as stashed_actors, MAX(GREATEST(stashes_scenes.created_at, stashes_movies.created_at, stashes_actors.created_at)) as stashed_last FROM stashes LEFT JOIN stashes_scenes ON stashes_scenes.stash_id = stashes.id LEFT JOIN stashes_movies ON stashes_movies.stash_id = stashes.id LEFT JOIN stashes_actors ON stashes_actors.stash_id = stashes.id GROUP BY stashes.id ); `); }; exports.down = async function(knex) { await knex.raw(` DROP MATERIALIZED VIEW stashes_meta; CREATE MATERIALIZED VIEW stashes_meta AS ( SELECT stashes.id as stash_id, COUNT(DISTINCT stashes_scenes)::integer as stashed_scenes, COUNT(DISTINCT stashes_movies)::integer as stashed_movies, COUNT(DISTINCT stashes_actors)::integer as stashed_actors FROM stashes LEFT JOIN stashes_scenes ON stashes_scenes.stash_id = stashes.id LEFT JOIN stashes_movies ON stashes_movies.stash_id = stashes.id LEFT JOIN stashes_actors ON stashes_actors.stash_id = stashes.id GROUP BY stashes.id ); `); };