繁体   English   中英

当另一个用户打开事务时在数据库上添加表

[英]Add table on DB when another user has a transaction open

在同一个项目中工作时,碰巧一些程序员正在测试 sw(使用事务),而另一些程序员想要创建或更改表。

当第二组启动“CREATE TABLE”时,查询将继续工作,直到所有事务都关闭。

有没有什么方法可以在其他用户进行事务处理时成功启动 CREATE 查询?

我们将 postgresql 用于 DB,将 c# 与 Npgsql 用于 sw。

并发 CREATE TABLE 不应相互干扰,除非它们试图对初始表使用相同的名称。 如果它们使用不同的名称并且仍然阻塞,那么您需要更详细地描述这些其他事务在做什么。 您可以监控锁以准确了解什么被什么阻止了。

不,这是设计使然。 您想如何删除某人仍在使用的表?

唯一的选择是中断这些事务。 我可以想到两种方法来做到这一点:

  • 调用pg_cancel_backend来终止所有对表表有锁的事务。

  • idle_in_transaction_session_timeout设置为默认“无限”以外的其他值,以便 PostgreSQL 自动取消这些阻塞事务。

您的开发人员不会喜欢这些选项中的任何一个,但在这种情况下,没有办法让每个人都满意。

这同样适用于ALTER TABLE

在您编写时运行CREATE TABLE应该不是问题,除非您必须先删除该名称的表(见上文)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM