
API and mechanism to allow generic messages to be inserted into WAL that are intended to be read by logical decoding plugins. This commit adds an optional new callback to the logical decoding API. Messages are either text or bytea. Messages can be transactional, or not, and are identified by a prefix to allow multiple concurrent decoding plugins. (Not to be confused with Generic WAL records, which are intended to allow crash recovery of extensible objects.) Author: Petr Jelinek and Andres Freund Reviewers: Artur Zakirov, Tomas Vondra, Simon Riggs Discussion: 5685F999.6010202@2ndquadrant.com
80 lines
1.9 KiB
Plaintext
80 lines
1.9 KiB
Plaintext
-- predictability
|
|
SET synchronous_commit = on;
|
|
SET client_encoding = 'utf8';
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
?column?
|
|
----------
|
|
init
|
|
(1 row)
|
|
|
|
SELECT 'msg1' FROM pg_logical_emit_message(true, 'test', 'msg1');
|
|
?column?
|
|
----------
|
|
msg1
|
|
(1 row)
|
|
|
|
SELECT 'msg2' FROM pg_logical_emit_message(false, 'test', 'msg2');
|
|
?column?
|
|
----------
|
|
msg2
|
|
(1 row)
|
|
|
|
BEGIN;
|
|
SELECT 'msg3' FROM pg_logical_emit_message(true, 'test', 'msg3');
|
|
?column?
|
|
----------
|
|
msg3
|
|
(1 row)
|
|
|
|
SELECT 'msg4' FROM pg_logical_emit_message(false, 'test', 'msg4');
|
|
?column?
|
|
----------
|
|
msg4
|
|
(1 row)
|
|
|
|
ROLLBACK;
|
|
BEGIN;
|
|
SELECT 'msg5' FROM pg_logical_emit_message(true, 'test', 'msg5');
|
|
?column?
|
|
----------
|
|
msg5
|
|
(1 row)
|
|
|
|
SELECT 'msg6' FROM pg_logical_emit_message(false, 'test', 'msg6');
|
|
?column?
|
|
----------
|
|
msg6
|
|
(1 row)
|
|
|
|
SELECT 'msg7' FROM pg_logical_emit_message(true, 'test', 'msg7');
|
|
?column?
|
|
----------
|
|
msg7
|
|
(1 row)
|
|
|
|
COMMIT;
|
|
SELECT 'žluťoučký kůň' FROM pg_logical_emit_message(true, 'test', 'žluťoučký kůň');
|
|
?column?
|
|
---------------
|
|
žluťoučký kůň
|
|
(1 row)
|
|
|
|
SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'force-binary', '0', 'skip-empty-xacts', '1');
|
|
data
|
|
----------------------------------------------------------------------
|
|
message: transactional: 1 prefix: test, sz: 4 content:msg1
|
|
message: transactional: 0 prefix: test, sz: 4 content:msg2
|
|
message: transactional: 0 prefix: test, sz: 4 content:msg4
|
|
message: transactional: 0 prefix: test, sz: 4 content:msg6
|
|
message: transactional: 1 prefix: test, sz: 4 content:msg5
|
|
message: transactional: 1 prefix: test, sz: 4 content:msg7
|
|
message: transactional: 1 prefix: test, sz: 19 content:žluťoučký kůň
|
|
(7 rows)
|
|
|
|
SELECT 'init' FROM pg_drop_replication_slot('regression_slot');
|
|
?column?
|
|
----------
|
|
init
|
|
(1 row)
|
|
|