在Symfony中Postgres部分唯一索引

 捕鱼达人2602884285 发布于 2023-02-09 12:37

Postgres可以做部分独特的索引,但我找不到任何教条文档,表明对此有任何支持.

http://www.postgresql.org/docs/current/interactive/indexes-partial.html#INDEXES-PARTIAL-EX3

我如何在Symfony中拥有一个实体,例如电子邮件.我想在哪里存储默认电子邮件的布尔标志.

电子邮件表看起来像,

id,user_id,email,default
1,1,email@something.com,false
2,1,email2@something.com,true
3,1,email3@something.com,false

我想在user_id上使用唯一约束,默认= true.

SQL我会做类似的事情,

CREATE UNIQUE INDEX default_constraint ON emails (user_id)
    WHERE default;

还有另一种方法吗?我在实体中考虑了prePersist函数,但这需要db调用来检查.

编辑:我也在考虑一个事件监听器, http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

我不确定我是否想听每个prePersist事件,我可以听一个特定的实体而不必过滤if语句.例如if($ entity instanceof Product){

1 个回答
  • Postgres 9.0+中有一个非常简洁的构造称为排除约束.在CREATE TABLE文档中对其进行了简要说明.因为在这个例子中我们只依赖于排除约束的谓词部分而不是操作符的灵活性,所以我会使用B树索引,尽管有文档的建议.如果搜索"postgres索引类型",您可以阅读一些有关不同索引类型的信息.目前我不能在答案中发布多个链接,因为我是新来的,所以你只需要google它.:)

    这个小提琴就是它如何运作的一个例子.基本上,在结束时的谓词EXCLUDE将约束转换UNIQUE为仅应用的约束WHERE "default" = true.

    如果可能有其他应用程序与表进行交互,这可能是最佳路径,但如果信息可用且前端应用了约束,则可能更快地向客户端提供反馈.

    2023-02-09 12:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有