我有两个表来处理附件:
id
和其他信息id_file
(表id
中的files
是外键)和附件的其他信息。两个表能够共享文件,而无需在服务器上复制文件(供您参考)。
当我删除附件时,只有当没有附件引用其
id
时,我才想删除该文件。
我有这个请求,删除链接到特定项目的所有附件(表的第 26 项
TABLE_NAME
:
WITH deleted_files AS (
DELETE FROM public.attachments a
WHERE a.id_in_table = 26
AND a.table_name = 'TABLE_NAME'
RETURNING id_file
)
DELETE FROM public.files f
WHERE f.id IN (SELECT id FROM deleted_files)
AND NOT EXISTS (
SELECT 1
FROM public.attachments a
WHERE a.id_file = f.id
);
问题是:
DELETE
运行第二个 ids
,它们将被正确删除。是否有某种机制可以保留包含已删除项目的表的浅表副本,从而使项目无法删除?