Keep track of transaction commit timestamps
Transactions can now set their commit timestamp directly as they commit,
or an external transaction commit timestamp can be fed from an outside
system using the new function TransactionTreeSetCommitTsData(). This
data is crash-safe, and truncated at Xid freeze point, same as pg_clog.
This module is disabled by default because it causes a performance hit,
but can be enabled in postgresql.conf requiring only a server restart.
A new test in src/test/modules is included.
Catalog version bumped due to the new subdirectory within PGDATA and a
couple of new SQL functions.
Authors: Álvaro Herrera and Petr Jelínek
Reviewed to varying degrees by Michael Paquier, Andres Freund, Robert
Haas, Amit Kapila, Fujii Masao, Jaime Casanova, Simon Riggs, Steven
Singer, Peter Eisentraut
11 years ago
|
|
|
--
|
|
|
|
|
-- Commit Timestamp
|
|
|
|
|
--
|
|
|
|
|
SHOW track_commit_timestamp;
|
|
|
|
|
track_commit_timestamp
|
|
|
|
|
------------------------
|
|
|
|
|
on
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
CREATE TABLE committs_test(id serial, ts timestamptz default now());
|
|
|
|
|
INSERT INTO committs_test DEFAULT VALUES;
|
|
|
|
|
INSERT INTO committs_test DEFAULT VALUES;
|
|
|
|
|
INSERT INTO committs_test DEFAULT VALUES;
|
|
|
|
|
SELECT id,
|
|
|
|
|
pg_xact_commit_timestamp(xmin) >= ts,
|
|
|
|
|
pg_xact_commit_timestamp(xmin) <= now(),
|
Keep track of transaction commit timestamps
Transactions can now set their commit timestamp directly as they commit,
or an external transaction commit timestamp can be fed from an outside
system using the new function TransactionTreeSetCommitTsData(). This
data is crash-safe, and truncated at Xid freeze point, same as pg_clog.
This module is disabled by default because it causes a performance hit,
but can be enabled in postgresql.conf requiring only a server restart.
A new test in src/test/modules is included.
Catalog version bumped due to the new subdirectory within PGDATA and a
couple of new SQL functions.
Authors: Álvaro Herrera and Petr Jelínek
Reviewed to varying degrees by Michael Paquier, Andres Freund, Robert
Haas, Amit Kapila, Fujii Masao, Jaime Casanova, Simon Riggs, Steven
Singer, Peter Eisentraut
11 years ago
|
|
|
pg_xact_commit_timestamp(xmin) - ts < '60s' -- 60s should give a lot of reserve
|
|
|
|
|
FROM committs_test
|
|
|
|
|
ORDER BY id;
|
|
|
|
|
id | ?column? | ?column? | ?column?
|
|
|
|
|
----+----------+----------+----------
|
|
|
|
|
1 | t | t | t
|
|
|
|
|
2 | t | t | t
|
|
|
|
|
3 | t | t | t
|
|
|
|
|
(3 rows)
|
|
|
|
|
|
|
|
|
|
DROP TABLE committs_test;
|
|
|
|
|
SELECT pg_xact_commit_timestamp('0'::xid);
|
|
|
|
|
ERROR: cannot retrieve commit timestamp for transaction 0
|
|
|
|
|
SELECT pg_xact_commit_timestamp('1'::xid);
|
|
|
|
|
pg_xact_commit_timestamp
|
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
Keep track of transaction commit timestamps
Transactions can now set their commit timestamp directly as they commit,
or an external transaction commit timestamp can be fed from an outside
system using the new function TransactionTreeSetCommitTsData(). This
data is crash-safe, and truncated at Xid freeze point, same as pg_clog.
This module is disabled by default because it causes a performance hit,
but can be enabled in postgresql.conf requiring only a server restart.
A new test in src/test/modules is included.
Catalog version bumped due to the new subdirectory within PGDATA and a
couple of new SQL functions.
Authors: Álvaro Herrera and Petr Jelínek
Reviewed to varying degrees by Michael Paquier, Andres Freund, Robert
Haas, Amit Kapila, Fujii Masao, Jaime Casanova, Simon Riggs, Steven
Singer, Peter Eisentraut
11 years ago
|
|
|
SELECT pg_xact_commit_timestamp('2'::xid);
|
|
|
|
|
pg_xact_commit_timestamp
|
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT x.xid::text::bigint > 0 as xid_valid,
|
|
|
|
|
x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
|
|
|
|
|
roident != 0 AS valid_roident
|
|
|
|
|
FROM pg_last_committed_xact() x;
|
|
|
|
|
xid_valid | ts_in_range | valid_roident
|
|
|
|
|
-----------+-------------+---------------
|
|
|
|
|
t | t | f
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
-- Test non-normal transaction ids.
|
|
|
|
|
SELECT * FROM pg_xact_commit_timestamp_origin(NULL); -- ok, NULL
|
|
|
|
|
timestamp | roident
|
|
|
|
|
-----------+---------
|
|
|
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT * FROM pg_xact_commit_timestamp_origin('0'::xid); -- error
|
|
|
|
|
ERROR: cannot retrieve commit timestamp for transaction 0
|
|
|
|
|
SELECT * FROM pg_xact_commit_timestamp_origin('1'::xid); -- ok, NULL
|
|
|
|
|
timestamp | roident
|
|
|
|
|
-----------+---------
|
|
|
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT * FROM pg_xact_commit_timestamp_origin('2'::xid); -- ok, NULL
|
|
|
|
|
timestamp | roident
|
|
|
|
|
-----------+---------
|
|
|
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
-- Test transaction without replication origin
|
|
|
|
|
SELECT txid_current() as txid_no_origin \gset
|
|
|
|
|
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
|
|
|
|
|
roident != 0 AS valid_roident
|
|
|
|
|
FROM pg_last_committed_xact() x;
|
|
|
|
|
ts_in_range | valid_roident
|
|
|
|
|
-------------+---------------
|
|
|
|
|
t | f
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
|
|
|
|
|
roident != 0 AS valid_roident
|
|
|
|
|
FROM pg_xact_commit_timestamp_origin(:'txid_no_origin') x;
|
|
|
|
|
ts_in_range | valid_roident
|
|
|
|
|
-------------+---------------
|
|
|
|
|
t | f
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
-- Test transaction with replication origin
|
|
|
|
|
SELECT pg_replication_origin_create('regress_commit_ts: get_origin') != 0
|
|
|
|
|
AS valid_roident;
|
|
|
|
|
valid_roident
|
|
|
|
|
---------------
|
|
|
|
|
t
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT pg_replication_origin_session_setup('regress_commit_ts: get_origin');
|
|
|
|
|
pg_replication_origin_session_setup
|
|
|
|
|
-------------------------------------
|
|
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT txid_current() as txid_with_origin \gset
|
|
|
|
|
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
|
|
|
|
|
FROM pg_last_committed_xact() x, pg_replication_origin r
|
|
|
|
|
WHERE r.roident = x.roident;
|
|
|
|
|
ts_in_range | roname
|
|
|
|
|
-------------+-------------------------------
|
|
|
|
|
t | regress_commit_ts: get_origin
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
|
|
|
|
|
FROM pg_xact_commit_timestamp_origin(:'txid_with_origin') x, pg_replication_origin r
|
|
|
|
|
WHERE r.roident = x.roident;
|
|
|
|
|
ts_in_range | roname
|
|
|
|
|
-------------+-------------------------------
|
|
|
|
|
t | regress_commit_ts: get_origin
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT pg_replication_origin_session_reset();
|
|
|
|
|
pg_replication_origin_session_reset
|
|
|
|
|
-------------------------------------
|
|
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
|
|
SELECT pg_replication_origin_drop('regress_commit_ts: get_origin');
|
|
|
|
|
pg_replication_origin_drop
|
|
|
|
|
----------------------------
|
|
|
|
|
|
Keep track of transaction commit timestamps
Transactions can now set their commit timestamp directly as they commit,
or an external transaction commit timestamp can be fed from an outside
system using the new function TransactionTreeSetCommitTsData(). This
data is crash-safe, and truncated at Xid freeze point, same as pg_clog.
This module is disabled by default because it causes a performance hit,
but can be enabled in postgresql.conf requiring only a server restart.
A new test in src/test/modules is included.
Catalog version bumped due to the new subdirectory within PGDATA and a
couple of new SQL functions.
Authors: Álvaro Herrera and Petr Jelínek
Reviewed to varying degrees by Michael Paquier, Andres Freund, Robert
Haas, Amit Kapila, Fujii Masao, Jaime Casanova, Simon Riggs, Steven
Singer, Peter Eisentraut
11 years ago
|
|
|
(1 row)
|
|
|
|
|
|