postgresql - 不区分大小写的唯一性 - 如何更新当前记录,无论大小写?
问题描述
我在 Postgres 之上使用 Hasura 来存储公司和其他信息。源数据具有相同的记录拼写,但在不同的情况下 - 例如:
姓名 | 国家 |
---|---|
Reckitt Benckiser (Aust) Pty Ltd | 我们 |
RECKITT BENCKISER (AUST) PTY LTD | 非盟 |
我有一个关于公司名称的索引:
CREATE UNIQUE INDEX name_company_unique_idx on company (LOWER(name));
当我“更新”第二条记录时,它会引发唯一性错误,因此索引工作正常。但是我想要的是第二条记录实现第一条记录是同一件事,并将国家更新为 AU。如果我没有索引,我会在不同的情况下获得同一实体的两条记录。
我不想以大写或小写形式存储所有内容,但很高兴它能够采用插入的第一条记录的任何情况。
如何使 upsert 流程案例不可知?
解决方案
您可以对表列使用不区分大小写的排序规则或citext
扩展名,并在列上使用INSERT ... ON CONFLICT
正常的唯一约束。
推荐阅读
- python - Pandas:关于如何处理丢失小数的建议
- angular - Karma jasmine 测试 Angular 5 无法调用 Promise
- android - android studio 带有目录目标的“-d”选项被忽略,因为指定了“-Xbuild-file”
- firebase - `service` 节点在 firebase database.rules.json 中的位置
- angular - Angular 5 应用程序中量角器测试的代码覆盖率
- java - Java getMetaData() 或 getString() 不侦听 SQL 查询中的别名
- git - Git 自动合并并忽略所有 CSV 冲突
- gams-math - 在 GAMS 中,如何处理分裂?
- django - 使用相关名称和管理器的 Django 模型查询集
- css - 带有数字的 Bootstrap 字体真棒徽章