mirror of
https://github.com/postgres/postgres.git
synced 2026-04-21 06:08:26 -04:00
A transaction can export a snapshot with pg_export_snapshot(), and then others can import it with SET TRANSACTION SNAPSHOT. The data does not leave the server so there are not security issues. A snapshot can only be imported while the exporting transaction is still running, and there are some other restrictions. I'm not totally convinced that we've covered all the bases for SSI (true serializable) mode, but it works fine for lesser isolation modes. Joachim Wieland, reviewed by Marko Tiikkaja, and rather heavily modified by Tom Lane
50 lines
1.6 KiB
C
50 lines
1.6 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* snapmgr.h
|
|
* POSTGRES snapshot manager
|
|
*
|
|
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/utils/snapmgr.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef SNAPMGR_H
|
|
#define SNAPMGR_H
|
|
|
|
#include "utils/resowner.h"
|
|
|
|
|
|
extern bool FirstSnapshotSet;
|
|
|
|
extern TransactionId TransactionXmin;
|
|
extern TransactionId RecentXmin;
|
|
extern TransactionId RecentGlobalXmin;
|
|
|
|
extern Snapshot GetTransactionSnapshot(void);
|
|
extern Snapshot GetLatestSnapshot(void);
|
|
extern void SnapshotSetCommandId(CommandId curcid);
|
|
|
|
extern void PushActiveSnapshot(Snapshot snapshot);
|
|
extern void PushCopiedSnapshot(Snapshot snapshot);
|
|
extern void UpdateActiveSnapshotCommandId(void);
|
|
extern void PopActiveSnapshot(void);
|
|
extern Snapshot GetActiveSnapshot(void);
|
|
extern bool ActiveSnapshotSet(void);
|
|
|
|
extern Snapshot RegisterSnapshot(Snapshot snapshot);
|
|
extern void UnregisterSnapshot(Snapshot snapshot);
|
|
extern Snapshot RegisterSnapshotOnOwner(Snapshot snapshot, ResourceOwner owner);
|
|
extern void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner);
|
|
|
|
extern void AtSubCommit_Snapshot(int level);
|
|
extern void AtSubAbort_Snapshot(int level);
|
|
extern void AtEOXact_Snapshot(bool isCommit);
|
|
|
|
extern Datum pg_export_snapshot(PG_FUNCTION_ARGS);
|
|
extern void ImportSnapshot(const char *idstr);
|
|
extern bool XactHasExportedSnapshots(void);
|
|
extern void DeleteAllExportedSnapshotFiles(void);
|
|
|
|
#endif /* SNAPMGR_H */
|