首页 > 数据库 >PostgreSQL学习之pg_recvlogical与pgoutput的使用

PostgreSQL学习之pg_recvlogical与pgoutput的使用

时间:2024-08-07 08:57:23浏览次数:14  
标签:slot PostgreSQL pgoutput pg test recvlogical my

       参考:

        pg内功修炼:逻辑复制_pgoutput-CSDN博客        PG原生解码工具pg_recvlogical的使用-在脑裂时帮我们找回丢失的数据-腾讯云开发者社区-腾讯云 (tencent.com)

        postgresql数据库的原生解码插件pg_recvlogical可以将wal日志解码保存到指定文件,准确的说是将复制槽通过指定的逻辑解码插件(test_decoding、pgoutput等)解码后的数据保存为文件。

        pg_recvlogical使用

#创建复制槽
./pg_recvlogical --create-slot -S my_slot_test -d test_pgoutput

#启动复制槽
./pg_recvlogical --start -S my_slot_test  -d test_pgoutput -f test_pgoutput.log

        假如启动复制槽后,在另一终端登录数据库test_pgoutput 并执行insert等操作,则会在文件test_pgoutput.log中看到如下内容:

[postgres@localhost bin]$ cat ./test_pgoutput.log
BEGIN 740
table public.test_table: INSERT: id[integer]:9 name[character varying]:'Alice3' age[integer]:33
table public.test_table: INSERT: id[integer]:10 name[character varying]:'Bob3' age[integer]:253
COMMIT 740

        上述复制槽使用的是默认插件 test_decoding。

        pg_recvlogical使用pgoutput

        首先创建使用pgoutput做解码插件的复制槽,然后启动复制槽,但会出现如下错误:

        client sent proto_version=0 but we only support protocol 1 or higher

[postgres@localhost bin]$ ./pg_recvlogical --create-slot -S my_slot_pgoutput -d test_pgoutput --plugin=pgoutput
[postgres@localhost bin]$ ./pg_recvlogical --start -S my_slot_pgoutput -d test_pgoutput -f test_pgoutput.log
pg_recvlogical: error: could not send replication command "START_REPLICATION SLOT "my_slot_pgoutput" LOGICAL 0/0": ERROR:  client sent proto_version=0 but we only support protocol 1 or higher
CONTEXT:  slot "my_slot_pgoutput", output plugin "pgoutput", in the startup callback
pg_recvlogical: disconnected; waiting 5 seconds to try again
^Cpg_recvlogical: error: could not send replication command "START_REPLICATION SLOT "my_slot_pgoutput" LOGICAL 0/0": ERROR:  client sent proto_version=0 but we only support protocol 1 or higher
CONTEXT:  slot "my_slot_pgoutput", output plugin "pgoutput", in the startup callback

        上述错误是加密插件pgoutput的错误,具体是期望的版本与接受到的pg_recvlogical的发送版本不一致,这时需要使用pg_recvlogical的- o参数配置pgoutput版本

[postgres@localhost bin]$ ./pg_recvlogical --start -S my_slot_pgoutput  -d test_pgoutput -f test_pgoutput.log -o proto_version=1
pg_recvlogical: error: could not send replication command "START_REPLICATION SLOT "my_slot_pgoutput" LOGICAL 0/0 ("proto_version" '1')": ERROR:  publication_names parameter missing
CONTEXT:  slot "my_slot_pgoutput", output plugin "pgoutput", in the startup callback
pg_recvlogical: disconnected; waiting 5 seconds to try again
^Cpg_recvlogical: error: could not send replication command "START_REPLICATION SLOT "my_slot_pgoutput" LOGICAL 0/0 ("proto_version" '1')": ERROR:  publication_names parameter missing
CONTEXT:  slot "my_slot_pgoutput", output plugin "pgoutput", in the startup callback

        增加了参数-o proto_version=1,版本错误问题没有了,但又出现了新的错误:

 publication_names parameter missing

        登录数据库,创建发布

[postgres@localhost bin]$ ./psql -d test_pgoutput
psql (14.7)
Type "help" for help.

test_pgoutput=# CREATE PUBLICATION pgoutput_pub FOR ALL TABLES;
ERROR:  publication "pgoutput_pub" already exists
test_pgoutput=# SELECT * FROM pg_publication;
  oid  |   pubname    | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot
-------+--------------+----------+--------------+-----------+-----------+-----------+-------------+------------
 16392 | pgoutput_pub |       10 | t            | t         | t         | t         | t           | f
(1 row)

test_pgoutput=#

        增加参数再次测试:

[postgres@localhost bin]$ ./pg_recvlogical --start -S my_slot_pgoutput  -d test_pgoutput -f test_pgoutput.log -o proto_version=1 -o publication_names=pgoutput_pub

        运行成功。

        另一终端做insert等操作,然后查看文件test_pgoutput.log内容:

[postgres@localhost bin]$ cat ./test_pgoutput.log
Bp▒▒▒%▒M▒
R@publictest_tabledid▒▒▒▒nameage▒▒▒▒
I@Nt13tAlice5t66
I@Nt14tBob5t256
Cp▒p▒▒▒▒%▒M

标签:slot,PostgreSQL,pgoutput,pg,test,recvlogical,my
From: https://blog.csdn.net/weixin_38700215/article/details/140960625

相关文章

  • pg一些常用语句记录
    查看数据库大小pg_size_pretty:将数据库用量展示为KB、MB、GB等样式,查看更直观查看具体某个数据库的大小selectpg_size_pretty(pg_database_size('postgres'));查看所有数据库的大小selectpg_database.datname,pg_size_pretty(pg_database_size(pg_database.datna......
  • 第6章>>实验6:PS(ARM)端Linux RT与PL端FPGA之间(通过Reg寄存器进行通信和交互)-《LabVIEW Z
    1、实验内容       前面第五章入门实验和上一个实验5里面我们向大家展示通过了布尔类型的Reg寄存器通道实现了ZYNQPS端ARM和PL端FPGA二者之间的开关量交互,抛砖引玉。       从本节实验开始,接下来4个实验我们将着重向大家讲解更为通用和更为全面的4种交互方......
  • python 音频处理(2)——提取PPG特征之whisper库的使用(2.1)
    提取PPG特征之——whisper库的使用(2.1)1安装对应的包方法一(自用):直接pip即可:pipinstallopenai-whisper成功后如下图所示方法二:当时用了他这个方法环境直接崩了,已老实condainstall-cconda-forgeffmpegcondainstall-cconda-forgepoetrypoetryinitpoetry......
  • 《PostgreSQL 数据库在国内的发展前景》
    从DB-engines这张2024年8月的最新排名图上可以看出,PostgreSQL数据库的发展趋势还是非常好的,在国内,PostgreSQL数据库也展现出令人振奋的发展前景,非常明显的一种表现就是腾讯云、人大金仓、阿里云、华为等众多厂商都有基于PostgreSQL数据库的产品,比如TDSQL-PG版、PolarDB-PG版、Kin......
  • Python 将Word转换为JPG、PNG、SVG图片
    将Word文档以图片形式导出,既能方便信息的分享,也能保护数据安全,避免被二次编辑。文本将介绍如何使用 Spire.DocforPython 库在Python程序中实现Word到图片的批量转换。Python将Word转换为JPG、JPEG、PNG、BMP等图片格式Python将Word文档转换为SVG格式 Python库安装: ......
  • FPGA设计之跨时钟域(CDC)设计篇(5)----同步FIFO的两种设计方法(计数器法/高位扩展法 | 手撕
    1、什么是FIFO?        FIFO(FirstInFirstOut)是一种先进先出的数据缓存器,在逻辑设计里面用的非常多。它是一种存储器结构,被广泛应用于芯片设计中。FIFO由存储单元队列或阵列构成,第一个被写入队列的数据也是第一个从队列中读出的数据。        FIFO设计可......
  • Vuex的四个轻骑兵:mapState、mapGetter、mapMutation、mapAction(转载)
    vuex进阶一、state1.1引入vuex以后,我们需要在state中定义变量,类似于vue中的data,通过state来存放状态importVuefrom'vue'importVuexfrom'vuex'Vue.use(Vuex)exportdefaultnewVuex.Store({state:{//存放状态nickname:'Simba',age:20,gender:'男&......
  • 【pkill & pgrep】Centos/Linux pkill命令详细介绍
    简介        系统版本:Centos7.6    pkill命令用于杀死一个进程,会根据进程名称和其他属性杀死进程(默认会向进程发送SIGTERM信号,详细请看Linux信号的行为说明),与之相似的命令有killall,与kill命令相比,kill命令需要ps命令的配合查出PID,而pkill命令可以直接根据进......
  • psycopg2.errors.InvalidTextRepresentation
    我正在尝试在Flask应用程序中运行原始sql查询。这就是我所拥有的@app.route("/price/compare",methods=["POST"])defpost():data=request.jsoncur=conn.cursor()query_stock="""SELECTname,size,MIN(price::float)asprice,linkFROM......
  • How to upgrade pip on Debian Wheezy
    DebianWheezyprovidesanancientversionof pip utilityforinstallingPythonpackages.Toputitverysimply,itdoesnotworkanymoreasitisnotusing HTTPS protocol,butfortunatelythisissuecanbequicklyfixed.Debianversion.$lsb_release-a......