【问题标题】:What is the postgres_fdw CLOSE transaction and why does it block the table?什么是 postgres_fdw CLOSE 事务,为什么它会阻塞表?
【发布时间】:2023-02-22 01:14:31
【问题描述】:

我只是去运行我的生产数据库上的迁移。迁移是一个简单的 ALTER TABLE .. add a column 在一张小桌子上。我在本地测试过,不到一秒钟就跑完了。但是当我部署到生产环境并且迁移试图在那里运行时,它被阻止了。当我查询 pg_stat_activity 时,我可以看到它被这个查询阻止了:

592635 | idle in transaction | postgres_fdw | 00:51:42.589821 | CLOSE c9

谁能告诉我这是什么?我通过 postgres 外部数据包装器将此数据库安装到另一个数据库,因此它显然与此相关。但是这个查询具体是什么,CLOSE,什么东西?如果它“空闲”,为什么会阻塞?

发生这种情况时,我尝试 pg:kill 查询,但它不会被杀死。我改为终止了 ALTER TABLE 查询。

现在(第二天)我检查我的 pg:ps 并且这个 postgres_fdw 不再存在。但我想从这件事中吸取教训,这样我就可以避免在未来停工。

【问题讨论】:

  • 有人创建了一个外部表链接到您的数据库和表。 idle in transaction 意味着事务已经开始,但还没有提交。
  • 您在那里显示 pg_stat_activity 的哪些列?
  • 某些东西创建了一个事务并且没有提交它。该事务中的一个语句占用了锁,这会阻止您。 CLOSE 没有获取锁,它只是在空闲之前在该事务中执行的最后一条语句。
  • 至于"CLOSE是什么见CLOSE。似乎 postgres_fdw 在幕后使用游标。

标签: postgresql heroku heroku-postgres


【解决方案1】:

CLOSE 关闭游标。由于状态是“idle in transaction”,应用程序忘记关闭使用该表的事务。您需要修复应用程序,以便它关闭其事务。

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2017-11-11
    • 2017-04-26
    • 2016-04-21
    相关资源
    最近更新 更多