🎉 Add refcount-like functionality to storages.

This allows reuse of storage objects among different files.
This commit is contained in:
Andrey Antukh 2021-01-29 23:56:11 +01:00 committed by Alonso Torres
parent b57e63d7d6
commit e54b443247
7 changed files with 130 additions and 23 deletions

View file

@ -0,0 +1,10 @@
DROP TABLE IF EXISTS file_media_thumbnail;
ALTER TABLE profile DROP COLUMN photo;
ALTER TABLE team DROP COLUMN photo;
ALTER TABLE file_media_object DROP COLUMN path;
ALTER TABLE file_media_object ALTER COLUMN media_id SET NOT NULL;
ALTER TRIGGER media_object__insert__tgr
ON file_media_object RENAME TO file_media_object__on_insert__tgr;

View file

@ -0,0 +1,26 @@
ALTER TABLE storage_object
ADD COLUMN touched_at timestamptz NULL;
CREATE INDEX storage_object__id_touched_at__idx
ON storage_object (touched_at, id)
WHERE touched_at IS NOT NULL;
-- DROP TRIGGER file_media_object__on_delete__tgr ON file_media_object CASCADE;
-- DROP FUNCTION on_delete_file_media_object () ;
CREATE OR REPLACE FUNCTION on_delete_file_media_object()
RETURNS TRIGGER AS $func$
BEGIN
IF OLD.thumbnail_id IS NOT NULL THEN
UPDATE storage_object
SET touched_at = now()
WHERE id in (OLD.thumbnail_id, OLD.media_id);
ELSE
UPDATE storage_object
SET touched_at = now()
WHERE id = OLD.media_id;
END IF;
RETURN OLD;
END;
$func$ LANGUAGE plpgsql;