在插入查询仍在运行时运行pg_dump?

9
如果我使用pg_dump将表导出到SQL文件中,它会拍摄表中的最后一行快照,并将所有行转储到这一行吗?
还是说它会继续转储所有行,即使在运行pg_dump之后插入了新行?
第二个问题是:在运行pg_dump之前停止所有插入查询是否是一个好主意?
1个回答

10
当您运行pg_dump时,它将在您的表上获取共享锁定。在您运行转储后完成的任何事务将不会被包括在内。因此,在转储完成时,如果存在尚未提交的正在进行中的当前事务,则不会将其包含在转储中。
还有另一种pg_dump选项可以使用:

--lock-wait-timeout=timeout

在转储开始时不要永远等待以获取共享表锁定。相反,如果在指定的超时时间内无法锁定表,则失败。超时时间可以用SET statement_timeout接受的任何格式指定。(允许的格式因所转储服务器版本而异,但所有版本都接受毫秒的整数数字)。


2
如果一个事务在 pg_dump 开始之前就开始并且在 pg_dump 开始但是在其结束之前就完成了,那会怎样呢? - Sergey
如果在您的转储开始之前交易尚未完成,则不会包括在内。 - Scotch
或者说,如果pg_dump开始,事务开始,事务结束,pg_dump结束呢? - Sergey
当您运行pg_dump时,正在将数据库转储为在运行时处于的状态 - 它使其保持一致的状态。因此,任何打开的事务都不会包括在内。并且要澄清的是 - 在运行pg_dump之后启动和完成的任何事务也都不会被包括在内。 - Scotch
4
好的,谢谢 - 我只是想澄清一下,因为你回答的第一段有点含糊不清。你可能需要提到 pg_dump 操作的是数据库的一个快照,其中包括在 pg_dump 启动之前提交的所有事务,或者类似这样的内容。 - Sergey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接