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 获取唯一值并添加列
2599浏览 • 2回复 待解决
webviewController是否无法在异步情况下loadUrl
1483浏览 • 1回复 待解决
HarmonyOS在使用@BuilderParam的情况下如何使用@Provide和@Cousume
274浏览 • 1回复 待解决
在多个Navigation组件的情况下,如何进行路由管理
424浏览 • 1回复 待解决
Slider组件在Item数量等于displayCount的情况下无法轮播
2032浏览 • 1回复 待解决
MYSQL 如何在现有的产品详情信息不变的情况下,再往里面批量新增相同内容
3856浏览 • 0回复 待解决
HarmonyOS textInput在没有点击的情况下进入响应输入的状态
191浏览 • 1回复 待解决
在什么情况下使用?
427浏览 • 1回复 待解决
TextInput在使用的情况下,可以设置点击不触发编辑状态吗?
319浏览 • 1回复 待解决
在什么情况下,PolarDB会自动启动并行查询框架?
3004浏览 • 1回复 待解决
ForEach什么情况下会触发复用
627浏览 • 1回复 待解决
请教个问题,在不使用双向绑定的情况下如何主动刷新UI?
1734浏览 • 1回复 待解决
网络监听不可用状态, netUnavailable 在Wifi情况下,不回调。
561浏览 • 1回复 待解决
Grid组件使用cachedcount属性在垂直滚动情况下如何实现缓存?
812浏览 • 1回复 待解决
在取模方式相同的情况下,不通工具取模结果会有相差吗?
7639浏览 • 1回复 待解决
如何在多设备情况下使用hdc
596浏览 • 1回复 待解决
什么情况下会使用多Module
2215浏览 • 1回复 待解决
HarmonyOS 在class文件中,没有上下文的情况下弹出一个自定义Dialog
150浏览 • 1回复 待解决
PEDOMETER计步器传感器,在锁屏情况下,不上报步数
381浏览 • 1回复 待解决
同一个应用多个ability的情况下,后台ability页面跳转
871浏览 • 1回复 待解决
拆分har包的情况?什么情况下建议拆分,什么情况不建议拆分?
127浏览 • 1回复 待解决
Text组件在不配置宽度的情况下,有没有办法实现超出部分隐藏
869浏览 • 2回复 待解决
在不使用双向绑定的情况下,是否可以主动通过函数触发组件的刷新
307浏览 • 1回复 待解决
页面上存在多个video组件,如何控制各自的播放和停播,在只使用一个controller的情况下
1707浏览 • 1回复 待解决
candidate 会在哪三种情况下退出?
3843浏览 • 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
命令的默认锁模式。