pg_dump使用同一用户阻止Postgres数据库访问

时间:2019-04-25 17:46:40

标签: postgresql backup pg-dump database-locking

我们有一个Django应用程序,它在Ubuntu上使用同一服务器上的Postgres DB运行。我们每天都使用以下命令备份数据库:

pg_dump -Fc -U user1 -w db_name > ${filepath}`

问题在于,似乎我们的Django应用程序阻止了使用同一用户(user1)对同一数据库的读/写访问。查看说明文件

  

pg_dump不会阻止其他用户访问数据库(阅读器或   作家)

这让我认为这可能是因为Django应用程序使用了同一用户,所以阻止了对数据库的访问。这会发生吗?我没有找到任何可以澄清它的文档。

1 个答案:

答案 0 :(得分:0)

如果访问实际上被阻止,即您没有错误,但是应用程序挂起,则必须是应用程序对表进行了ACCESS EXCLUSIVE锁定。

如果您的工作负载包含大量TRUNCATEALTER TABLE语句或类似语句,则可能发生这种情况。在完成pg_dump(为了确保一致性而在单个事务中运行)之前,这些将一直被阻止。

也可能是LOCK tablename所使用的显式表锁,通常这是设计不良的标志。

尝试减少工作量中的ACCESS EXCLUSIVE锁,它们也可以prevent autovacuum and thus damage your database