您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

跨表的Postgres唯一组合约束

跨表的Postgres唯一组合约束

如果文件名列不是唯一的,则可以在product_attachment表上添加自定义约束。请注意,这将在每次插入和更新时执行以下查询,这并不是理想的性能

CREATE OR REPLACE FUNCTION check_filename(product_id integer, file_id integer)
RETURNS boolean AS
$$
    LOCK product_attachment IN SHARE MODE;
    SELECT (COUNT(*) = 0)
    FROM product_attachment pa
    JOIN file f1 ON f1.file_id = pa.file_id
    JOIN file f2 ON f1.filename = f2.filename
    WHERE pa.product_id = $1 AND f2.file_id = $2
$$
LANGUAGE 'plpgsql'

ALTER TABLE product_attachment
ADD CONSTRAINT check_filename CHECK
(check_filename(product_id, file_id))
Postgres 2022/1/1 18:37:22 有352人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶