On Fri, Aug 29, 2014 at 11:15 PM, Andres Freund <and...@2ndquadrant.com>
wrote:

> No, a textual output plugin is *NOT* allowed to produce binary
> output. That'd violate e.g. pg_logical_slot_peek_changes's return type
> because it's only declared to return text.
>

A textual output plugin can call pg_logical_slot_peek_binary_changes and
pg_logical_slot_peek_changes as well,
and a binary output plugin can only call
pg_logical_slot_peek_binary_changes, and will error out with
pg_logical_slot_peek_changes:
=# select pg_create_logical_replication_slot('foo', 'test_decoding');
 pg_create_logical_replication_slot
------------------------------------
 (foo,0/16C6880)
(1 row)
=# create table aa as select 1;
SELECT 1
=# select substring(encode(data, 'escape'), 1, 20),
               substring(data, 1, 20)
     FROM pg_logical_slot_peek_binary_changes('foo', NULL, NULL);
      substring       |                 substring
----------------------+--------------------------------------------
 BEGIN 1000           | \x424547494e2031303030
 table public.aa: INS | \x7461626c65207075626c69632e61613a20494e53
 COMMIT 1000          | \x434f4d4d49542031303030
(3 rows)
=# select pg_logical_slot_peek_changes('foo', NULL, NULL, 'force-binary',
'true');
ERROR:  0A000: output plugin cannot produce binary output
LOCATION:  pg_logical_slot_get_changes_guts, logicalfuncs.c:404
=# select substring(data, 1, 20)
    from pg_logical_slot_peek_binary_changes('foo', NULL, NULL,
'force-binary', 'true');
                 substring
--------------------------------------------
 \x424547494e2031303030
 \x7461626c65207075626c69632e61613a20494e53
 \x434f4d4d49542031303030
(3 rows)

Is that expected?
-- 
Michael

Reply via email to