更新时间:2024-10-31 GMT+08:00
分享

使用SQL函数接口进行逻辑解码

GaussDB可以通过调用SQL函数,进行创建、删除、推进逻辑复制槽,获取解码后的事务日志。

操作步骤

  1. 以具有REPLICATION权限的用户登录GaussDB集群任一主机。
  2. 使用如下命令通过CN端口连接数据库。

    gsql -U user1 -d gaussdb -p 40000 -r

    其中,user1为用户名,gaussdb为需要连接的数据库名称,40000为数据库CN端口号,用户可根据实际情况替换。

  3. 创建名称为slot1的逻辑复制槽。

    1
    2
    3
    4
    5
    gaussdb=# SELECT * FROM pg_create_logical_replication_slot('slot1', 'mppdb_decoding');
    slotname | xlog_position
    ----------+---------------
    slot1    | 0/601C150
    (1 row)
    

  4. 在数据库中创建表t,并向表t中插入数据。

    1
    2
    gaussdb=# CREATE TABLE t(a int PRIMARY KEY, b int);
    gaussdb=# INSERT INTO t VALUES(3,3);
    

  5. 读取所有DN上复制槽slot1解码结果,解码条数为4096。

    逻辑解码选项可参考逻辑解码选项

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    gaussdb=# EXECUTE DIRECT ON DATANODES 'SELECT * FROM pg_logical_slot_peek_changes(''slot1'', NULL, 4096);';
    location  |  xid  | data                                                                                         
    -----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------
    -------------------------------------------
     0/601C188 | 1010023 | BEGIN 1010023
     0/601ED60 | 1010023 | COMMIT 1010023 CSN 1010022
     0/601ED60 | 1010024 | BEGIN 1010024
     0/601ED60 | 1010024 | {"table_name":"public.t","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
     0/601EED8 | 1010024 | COMMIT 1010024 CSN 1010023
    (5 rows)
    

  6. 删除逻辑复制槽slot1。

    1
    2
    3
    4
    5
    gaussdb=# SELECT * FROM pg_drop_replication_slot('slot1');
     pg_drop_replication_slot
    --------------------------
    
    (1 row)
    

相关文档