我们有一个Django应用程序,它在Ubuntu上使用同一服务器上的Postgres DB运行。我们每天都使用以下命令备份数据库:
pg_dump -Fc -U user1 -w db_name > ${filepath}`
问题在于,似乎我们的Django应用程序阻止了使用同一用户(user1
)对同一数据库的读/写访问。查看说明文件
pg_dump不会阻止其他用户访问数据库(阅读器或 作家)
这让我认为这可能是因为Django应用程序使用了同一用户,所以阻止了对数据库的访问。这会发生吗?我没有找到任何可以澄清它的文档。
答案 0 :(得分:0)
如果访问实际上被阻止,即您没有错误,但是应用程序挂起,则必须是应用程序对表进行了ACCESS EXCLUSIVE
锁定。
如果您的工作负载包含大量TRUNCATE
或ALTER TABLE
语句或类似语句,则可能发生这种情况。在完成pg_dump
(为了确保一致性而在单个事务中运行)之前,这些将一直被阻止。
也可能是LOCK tablename
所使用的显式表锁,通常这是设计不良的标志。
尝试减少工作量中的ACCESS EXCLUSIVE
锁,它们也可以prevent autovacuum and thus damage your database。