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