我在Postgres 文档中看到:
两个事务不能同时在同一张表上持有冲突模式的锁
ALTER TABLE
在维护(架构迁移)期间,我们看到了由于挂起SELECT
事务(pg_locks
+ )而无法进行的情况pg_stat_activity
。
为了继续迁移,我们撤销CONNECT
了“流氓”用户的权限并踢掉了他们的所有会话。
这是正确的:
BEGIN;
SELECT ...;
将阻塞ALTER TABLE
直到COMMIT
或ROLLBACK
?
我在Postgres 文档中看到:
两个事务不能同时在同一张表上持有冲突模式的锁
ALTER TABLE
在维护(架构迁移)期间,我们看到了由于挂起SELECT
事务(pg_locks
+ )而无法进行的情况pg_stat_activity
。
为了继续迁移,我们撤销CONNECT
了“流氓”用户的权限并踢掉了他们的所有会话。
这是正确的:
BEGIN;
SELECT ...;
将阻塞ALTER TABLE
直到COMMIT
或ROLLBACK
?
你答对了。
这就是 PostgreSQL 防止冲突的方式:当有人正在使用它时,您不能删除或修改它。
是的,在 Mysql 中 SELECT 本身被认为是一个事务。所以如果一个事务在一个表上,你不能为改变获取元数据锁。