2

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

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

问题是这似乎阻止了使用相同用户(user1)而不是我们的 Django 应用程序对相同数据库的读/写访问。检查它指出的文档

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

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

4

1 回答 1

2

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

如果您的工作负载有很多TRUNCATEorALTER TABLE语句或类似内容,则可能会发生这种情况。这些将被阻止,直到pg_dump在单个事务中运行以保持一致性,完成。

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

尽量减少ACCESS EXCLUSIVE工作量中的锁,它们还可以防止自动清空,从而损坏您的数据库

于 2019-04-25T20:33:24.157 回答