
[英]FileStream/StreamWriter if another user has the file open
[英]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.