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 获取唯一值并添加列
1008浏览 • 2回复 待解决
MYSQL 如何在现有的产品详情信息不变的情况下,再往里面批量新增相同内容
1981浏览 • 0回复 待解决
请教个问题,在不使用双向绑定的情况下如何主动刷新UI?
202浏览 • 1回复 待解决
在取模方式相同的情况下,不通工具取模结果会有相差吗?
5810浏览 • 1回复 待解决
在什么情况下,PolarDB会自动启动并行查询框架?
1362浏览 • 1回复 待解决
multiDeviceConnection和taskKeeping分别在什么情况下使用
279浏览 • 1回复 待解决
什么情况下会使用多Module
520浏览 • 1回复 待解决
candidate 会在哪三种情况下退出?
2007浏览 • 1回复 待解决
Kafka消费的时候丢失了一些数据,再不重置offset的情况下如何找回呢?
666浏览 • 1回复 待解决
启动一个已启动的Ability,什么情况下才会执行onNewWant()回调
329浏览 • 1回复 待解决
启动一个已启动的UIAbility,什么情况下才会执行onNewWant()回调
219浏览 • 1回复 待解决
如何在未知UIAbility的情况下通过隐式want拉起应用
186浏览 • 1回复 待解决
nginx,mysql不做日志切割的情况下如何清理某些天以前的日志?
554浏览 • 1回复 待解决
MySQL: 如果group by的元素中缺失where后一个字段的情况下如何建立索引?
1016浏览 • 1回复 待解决
网络波动情况下,底层系统是否会关闭Socket连接
192浏览 • 1回复 待解决
在网络卡了的情况下,有没有可能不断重复地调用接口?
600浏览 • 1回复 待解决
为什么说二级索引不唯一,不唯一是指什么不唯一呢?
761浏览 • 1回复 待解决
更新了hadoop的配置文件,在整个集群其他节点都需要更改的情况下,如何能够快速复制到其他节点上?
576浏览 • 1回复 待解决
使用 Apache-AGE 和 PostgreSQL 的有向图进行循环检测
743浏览 • 1回复 待解决
如何解决列表组件List在不设置高度的情况下滑动不到底的问题
155浏览 • 1回复 待解决
SQLAlchemy在删除有外键约束的记录时,外键约束未起作用,何解?
2205浏览 • 0回复 待解决
后台列表查询与展示,大数据量并且分页的情况下,有什么好的解决方案?
1584浏览 • 1回复 待解决
Mysql唯一字段和复合唯一键有什么差异?
1425浏览 • 1回复 待解决
如何实现一个组件不停地旋转
306浏览 • 1回复 待解决
请问一下编译的时候出现这种情况,是什么原因?怎么解决?
5916浏览 • 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
命令的默认锁模式。