pg_export_snapshot()

保存并导出当前快照的函数

pg_export_snapshot() 是一个系统函数,它保存事务的当前快照并返回一个标识符作为 text 值。

pg_export_snapshot()PostgreSQL 9.2 中添加。

用法

pg_export_snapshot () → text

另一个会话可以使用导出的快照来读取数据库,其状态与原始会话完全相同。这对于例如 pg_dump 很有用,它可以使用导出的快照来实现并行转储。

在事务期间可以导出多个快照,但是请注意,只有 READ COMMITTED 事务在其生命周期内实际使用多个快照。

导入到另一个事务

可以在事务中导出的快照可以使用 SET TRANSACTION SNAPSHOT '...' 导入到另一个事务中。

变更历史

示例

pg_export_snapshot() 的基本用法示例

postgres=# SELECT pg_export_snapshot();
 pg_export_snapshot  
---------------------
 00000003-00000011-1
(1 row)

请注意,在上例中,由于 pg_export_snapshot() 在事务之外执行,因此导出的快照已无效。

从事务中导出快照

postgres=# BEGIN
             TRANSACTION ISOLATION LEVEL
             REPEATABLE READ;

postgres=*# SELECT pg_export_snapshot();
 pg_export_snapshot
---------------------
 00000003-000001BF-1
(1 row)

现在可以将快照导入到另一个事务中

postgres=# BEGIN                                          
             TRANSACTION ISOLATION LEVEL
             REPEATABLE READ;
BEGIN

postgres=*# SET TRANSACTION SNAPSHOT '00000003-000001BF-1';
SET

无法从子事务中导出快照

postgres=# BEGIN;
BEGIN

postgres=*# SAVEPOINT s1;
SAVEPOINT

postgres=*# SELECT pg_export_snapshot();
ERROR:  cannot export a snapshot from a subtransaction

如果已导出事务的快照,则无法执行 PREPARE TRANSACTION

postgres=*# SELECT pg_export_snapshot();
 pg_export_snapshot  
---------------------
 00000003-00000013-1
(1 row)

postgres=*# PREPARE TRANSACTION 'foo';
ERROR:  cannot PREPARE a transaction that has exported snapshots

分类

系统函数事务

参见

pg_current_snapshot()

反馈

在此提交关于“pg_export_snapshot()”的任何评论、建议或更正 此处