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 获取唯一值并添加列
1739浏览 • 2回复 待解决
webviewController是否无法在异步情况下loadUrl
600浏览 • 1回复 待解决
Slider组件在Item数量等于displayCount的情况下无法轮播
878浏览 • 1回复 待解决
MYSQL 如何在现有的产品详情信息不变的情况下,再往里面批量新增相同内容
2705浏览 • 0回复 待解决
ForEach什么情况下会触发复用
392浏览 • 1回复 待解决
请教个问题,在不使用双向绑定的情况下如何主动刷新UI?
858浏览 • 1回复 待解决
在什么情况下,PolarDB会自动启动并行查询框架?
2033浏览 • 1回复 待解决
在取模方式相同的情况下,不通工具取模结果会有相差吗?
6473浏览 • 1回复 待解决
网络监听不可用状态, netUnavailable 在Wifi情况下,不回调。
258浏览 • 1回复 待解决
Text组件在不配置宽度的情况下,有没有办法实现超出部分隐藏
471浏览 • 2回复 待解决
如何在多设备情况下使用hdc
325浏览 • 1回复 待解决
什么情况下会使用多Module
1186浏览 • 1回复 待解决
multiDeviceConnection和taskKeeping分别在什么情况下使用
915浏览 • 1回复 待解决
页面上存在多个video组件,如何控制各自的播放和停播,在只使用一个controller的情况下
736浏览 • 1回复 待解决
应用如何在没有任何异常的情况下重启应用自身
288浏览 • 1回复 待解决
如何设计高并发情况下的大规模线程方案
78浏览 • 1回复 待解决
同一个应用多个ability的情况下,后台ability页面跳转
506浏览 • 1回复 待解决
candidate 会在哪三种情况下退出?
2619浏览 • 1回复 待解决
固定屏幕Orientation的情况下,是否能够监听屏幕方向变化
874浏览 • 1回复 待解决
进程不重启的情况下是否可在应用上修复补丁?
379浏览 • 1回复 待解决
Kafka消费的时候丢失了一些数据,再不重置offset的情况下如何找回呢?
1138浏览 • 1回复 待解决
启动一个已启动的UIAbility,什么情况下才会执行onNewWant()回调
850浏览 • 1回复 待解决
启动一个已启动的Ability,什么情况下才会执行onNewWant()回调
881浏览 • 1回复 待解决
Promise机制失败的情况下,拿到的异常是个object类型
364浏览 • 1回复 待解决
hilog OH_LOG_IsLoggable 方法什么情况下会返回 false?
299浏览 • 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
命令的默认锁模式。