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()" 的评论、建议或更正 此处