29 lines
734 B
JavaScript
29 lines
734 B
JavaScript
exports.up = async function(knex) {
|
|
await knex.schema.createMaterializedView('media_sfw', (view) => {
|
|
view.as(knex('media').select('id').where('is_sfw', true));
|
|
});
|
|
|
|
await knex.raw('CREATE UNIQUE INDEX media_sfw_id ON media_sfw(id)');
|
|
|
|
await knex.raw(`
|
|
CREATE OR REPLACE FUNCTION get_random_sfw_media_id() RETURNS varchar AS $$
|
|
SELECT id FROM media_sfw
|
|
ORDER BY random()
|
|
LIMIT 1;
|
|
$$ LANGUAGE sql STABLE;
|
|
`);
|
|
};
|
|
|
|
exports.down = async function(knex) {
|
|
await knex.raw(`
|
|
CREATE OR REPLACE FUNCTION get_random_sfw_media_id() RETURNS varchar AS $$
|
|
SELECT id FROM media
|
|
WHERE is_sfw = true
|
|
ORDER BY random()
|
|
LIMIT 1;
|
|
$$ LANGUAGE sql STABLE;
|
|
`);
|
|
|
|
await knex.schema.dropMaterializedView('media_sfw');
|
|
};
|