PostgreSQL,在不停机/锁定的情况下向现有表添加唯一约束
我正在尝试找出将新的 varchar 列添加到 PostgreSQL 数据库中不获取表锁或不需要停机的现有表的最佳方法。
我知道我可以同时添加一个索引来防止锁定。
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS "my_unique_index" ON "my_table" USING
我不确定,也无法从文档中推断出,如果唯一索引已经存在,约束操作是否会获取表上的锁。
ALTER TABLE "my_table" ADD CONSTRAINT "my_unique_constraint" UNIQUE USING
我在文档中看到
NOT VALID
选项对唯一约束没有用。
任何建议都会很棒。
PostgreSQL
数据库
赞
收藏 0
回答 2
待解决
相关问题
PostgreSQL group by 获取唯一值并添加列
760浏览 • 2回复 待解决
MYSQL 如何在现有的产品详情信息不变的情况下,再往里面批量新增相同内容
1696浏览 • 0回复 待解决
在什么情况下,PolarDB会自动启动并行查询框架?
1115浏览 • 1回复 待解决
在取模方式相同的情况下,不通工具取模结果会有相差吗?
5456浏览 • 1回复 待解决
candidate 会在哪三种情况下退出?
1710浏览 • 1回复 待解决
Kafka消费的时候丢失了一些数据,再不重置offset的情况下如何找回呢?
472浏览 • 1回复 待解决
nginx,mysql不做日志切割的情况下如何清理某些天以前的日志?
292浏览 • 1回复 待解决
MySQL: 如果group by的元素中缺失where后一个字段的情况下如何建立索引?
737浏览 • 1回复 待解决
在网络卡了的情况下,有没有可能不断重复地调用接口?
419浏览 • 1回复 待解决
更新了hadoop的配置文件,在整个集群其他节点都需要更改的情况下,如何能够快速复制到其他节点上?
392浏览 • 1回复 待解决
后台列表查询与展示,大数据量并且分页的情况下,有什么好的解决方案?
1274浏览 • 1回复 待解决
为什么说二级索引不唯一,不唯一是指什么不唯一呢?
546浏览 • 1回复 待解决
SQLAlchemy在删除有外键约束的记录时,外键约束未起作用,何解?
1916浏览 • 0回复 待解决
如果这样的话,数据在高频上报的情况下,如何保证控制的优先
6343浏览 • 1回复 待解决
使用 Apache-AGE 和 PostgreSQL 的有向图进行循环检测
550浏览 • 1回复 待解决
Mysql唯一字段和复合唯一键有什么差异?
1152浏览 • 1回复 待解决
请问一下编译的时候出现这种情况,是什么原因?怎么解决?
5466浏览 • 1回复 待解决
如何优雅生成非递增的唯一的数字uid?
1193浏览 • 2回复 待解决
组件如何动态设置全局唯一ID?
4853浏览 • 1回复 待解决
关于Mysql InnoDB下非唯一索引如果出现重复键,底层B+树具体是怎么排列的呢?
1374浏览 • 1回复 待解决
约束布局中你在我左边,我在你右边,为何程序中断呢?
6943浏览 • 1回复 待解决
服务器上的mysql中的一个表操作特别慢,如何知道该表的使用情况(例如连接数之类的)?
851浏览 • 1回复 待解决
富鸿蒙开发如何获取设备唯一Id?
11466浏览 • 1回复 待解决
有用户表与权限表,还有材料表,画ER图的问题,材料表与用户表是一对多还是一对一?
194浏览 • 1回复 待解决
Postgresql drop schema是直接物理删除所有表么?
1442浏览 • 1回复 待解决
你首先创建唯一索引
然后添加基于该索引的约束的方法很好。
需要一个
锁,但这只会保持很短的时间。这不会成为问题,除非你的数据库中总是有长时间运行的事务——但在那种情况下你已经有问题了。
显式锁定
SHARE UPDATE EXCLUSIVE
与
SHARE UPDATE EXCLUSIVE
、SHARE
、SHARE ROW EXCLUSIVE
、EXCLUSIVE
和ACCESS EXCLUSIVE
锁模式冲突。这种模式保护一个表不受并发模式改变和VACUUM
运行的影响。由
VACUUM
(不带FULL
)、ANALYZE
、CREATE INDEX CONCURRENTLY
、CREATE STATISTICS
和ALTER TABLE VALIDATE
以及其他ALTER TABLE
的变体获得。
SHARE
与
ROW EXCLUSIVE
、SHARE UPDATE EXCLUSIVE
、SHARE ROW EXCLUSIVE
、EXCLUSIVE
和ACCESS EXCLUSIVE
锁模式冲突。这种模式保护一个表不受并发数据改变的影响。由
CREATE INDEX
(不带CONCURRENTLY
)取得。
ACCESS EXCLUSIVE
与所有模式的锁冲突(
ACCESS SHARE
、ROW SHARE
、ROW EXCLUSIVE
、SHARE UPDATE EXCLUSIVE
、SHARE
、SHARE ROW EXCLUSIVE
、EXCLUSIVE
和ACCESS EXCLUSIVE
)。这种模式保证持有者是访问该表的唯一事务。由
ALTER TABLE
、DROP TABLE
、TRUNCATE
、REINDEX
、CLUSTER
、VACUUM FULL
和REFRESH MATERIALIZED VIEW
(不带CONCURRENTLY
)命令获取。ALTER TABLE
的很多形式也在这个层面上获得锁(见ALTER TABLE)。这也是未显式指定模式的LOCK TABLE
命令的默认锁模式。