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 获取唯一值并添加列
3432浏览 • 2回复 待解决
HarmonyOS relationalStore数据库唯一约束(UNIQUE)是非支持值>0时才会触发?
637浏览 • 1回复 待解决
HarmonyOS 配置系统路由表的情况下,无法正常显示页面
2183浏览 • 2回复 待解决
webviewController是否无法在异步情况下loadUrl
2611浏览 • 1回复 待解决
HarmonyOS text设置为超长情况下尾部省略,特定情况下展示异常,尾部还有空间的情况下提前省略
1253浏览 • 1回复 待解决
#鸿蒙通关秘籍#HSP一般在什么情况下用?
1281浏览 • 1回复 待解决
HarmonyOS 在连接蓝牙的情况下,怎么使用蓝牙(sco)采集
1049浏览 • 1回复 待解决
HarmonyOS 在不导入class的情况下,如何new一个新的对象?
694浏览 • 1回复 待解决
MYSQL 如何在现有的产品详情信息不变的情况下,再往里面批量新增相同内容
4673浏览 • 0回复 待解决
HarmonyOS 在用户不需操作和预览的情况下,实现给图片添加水印
840浏览 • 1回复 待解决
在多个Navigation组件的情况下,如何进行路由管理
1658浏览 • 1回复 待解决
Slider组件在Item数量等于displayCount的情况下无法轮播
2799浏览 • 1回复 待解决
HarmonyOS 手机静音情况下,无法震动
1397浏览 • 1回复 待解决
HarmonyOS textInput在没有点击的情况下进入响应输入的状态
1160浏览 • 1回复 待解决
HarmonyOS在使用@BuilderParam的情况下如何使用@Provide和@Cousume
1394浏览 • 1回复 待解决
#鸿蒙通关秘籍#为啥terminateSelfWithResult在某些情况下无法返回结果?
1114浏览 • 1回复 待解决
在什么情况下使用?
1917浏览 • 1回复 待解决
TextInput在使用的情况下,可以设置点击不触发编辑状态吗?
1698浏览 • 1回复 待解决
ForEach什么情况下会触发复用
1739浏览 • 2回复 待解决
HarmonyOS 在fullscreen的情况下,如何让页面避免与摄像头重叠
655浏览 • 1回复 待解决
请教个问题,在不使用双向绑定的情况下如何主动刷新UI?
2684浏览 • 1回复 待解决
HarmonyOS 在开启长时任务后台的情况下,进程依旧会被挂起
945浏览 • 1回复 待解决
在什么情况下,PolarDB会自动启动并行查询框架?
3996浏览 • 1回复 待解决
#鸿蒙通关秘籍#在需要节省内存的情况下,LightWeightSet如何实现?
964浏览 • 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
命令的默认锁模式。