PGSync安装使用教程(PostgreSQL数据实时同步至Elasticsearch)

说明

pgsync项目有两个,一个是ankane/pgsync,用于pgsql之间的数据同步,另一个是toluaina/pgsync,用于pgsql的数据同步至es,本教程适用于第二个项目。

pgsync应该是目前为止唯二支持es8的数据同步工具,另一个是canal,但是canal数据源只支持mysql。另外还有个flink cdc,数据源同时支持mysql和pgsql,但是只支持到es7,前几个月更新了es8的流驱动,flink sql es8的驱动应该也快了(GitHub - apache/flink-connector-elasticsearch: Apache Flink connector for ElasticSearch)。

使用pgsync的前置条件

首先需要正确安装和使用postgresql和elasticsearch。

PGSQL

pgsql需要contrib模块,网上很多安装教程,如果你是yum安装的,可以直接使用以下命令安装

yum install postgresql15-contrib

另外pgsql需要修改三个配置,使用yum安装的pgsql,配置文件一般在

/var/lib/pgsql/15/data/postgresql.conf

需要修改以下三个配置,这几个配置也是一般的同步工具都需要修改的

wal_level = logical
max_replication_slots = 10
max_slot_wal_keep_size = 100GB

ES

es不需要修改什么配置,只需要知道连接信息、用户名密码即可。

PYTHON

安装pgsync需要python3和pip3。

需要注意centos7不带python3环境,我在centos7里尝试装python3和pip3,要么就是pip不能用,要么就是python的ssl组件安装失败,要么就是yum不能用了,ssl组件安装失败之后,用pip安装pgsync也装不上,如果使用pip install -i参数指定镜像源,装完之后也会出现奇奇怪怪的问题。

所以本教程用的是自带python3的ubuntu22.04环境。

REDIS

pgsync还需要依赖redis,github项目上给的依赖是redis 3.1.0,redis根本就没有这个版本,纯属误导人,经测试,拿最新版的redis(7.0.15)就可以。

安装完redis别忘了修改redis.conf下的这三个配置

daemonize yes
#bind 127.0.0.1 -::1
protected-mode no

安装(Ubuntu22.04环境)

首先要安装pip3

apt install pip3

使用pip3安装pgsync

pip3 install pgsync

使用

配置环境

pgsync一共包含两个程序,boostrap和pgsync,使用pip3装完pgsync之后,这两条命令是全局的,任何路径下都可以直接使用,所以我们来建一个文件夹当作pgsync的同步主目录

mkdir /opt/pgsync_project

pgsync依赖于dotenv组件配置相关的环境变量,所以我们要创建一个.env文件来配置环境

vim /opt/pgsync_project/.env

写入以下内容(以实际情况为准),其他字段参考:Environment variables - PGSync

PG_USER=postgres
PG_HOST=192.168.100.108
PG_PORT=5432
PG_PASSWORD=postgres
ELASTICSEARCH_HOST=192.168.100.108
ELASTICSEARCH_PORT=9200
PG_SSLMODE=disable
REDIS_HOST=192.168.100.108

保存.env文件并退出。

创建DEMO

在pgsql中创建示例表和插入数据。

CREATE DATABASE testdb;

CREATE TABLE student (
  id int4 NOT NULL,
  name varchar(255)
);

INSERT INTO student VALUES (1, 'name1');
INSERT INTO student VALUES (2, 'name2');
INSERT INTO student VALUES (3, 'name3');

根据表结构创建pgsync的schema。

vim /opt/pgsync_project/schema.json

写入以下内容

[
    {
        "database":"testdb",
        "index":"student",
        "nodes":{
            "table":"student",
            "schema":"public",
            "columns":[
                "id",
                "name"
            ]
        }
    }
]

注意此示例是单表同步,如果是pgsql的多个表对es的一个表,需要在pgsql的表结构中建外键,关于pgsync的scheam的详细说明,见Schema definition - PGSync和Table with multiple children - PGSync。

同步

首先需要使用bootstrap初始化,用于连接验证和创建es索引。

bootstrap --config /opt/pgsync_project/schema.json

只同步一次,同步完结束程序

pgsync --config /opt/pgsync_project/schema.json

实时同步,前台一直执行

pgsync --config /opt/pgsync_project/schema.json -d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/598403.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“A”分心得:我的云计算HCIE学习之路

大家好,我是誉天云计算HCIE周末班梁同学,在誉天老师和同学们的帮助下,我终于在4月24日顺利通过了云计算3.0 HCIE的认证考试,而且获得了A,这是让我特别惊喜的,功夫不负有心人。 我日常的工作是网络运维&…

nestjs 全栈进阶--自定义装饰器

视频教程 20_nest中自定义装饰器_哔哩哔哩_bilibili nest new custom-decorator -p pnpm pnpm start:dev 在Nestjs 中我们使用了大量装饰器 decorator ,所以Nestjs 也允许我们去自定义装饰器。 1. 自定义方法装饰器 nest g decorator aaa --flat 它生产的代码…

基于web的物流管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

操作系统实战(二)(linux+C语言)

实验内容 通过Linux 系统中管道通信机制,加深对于进程通信概念的理解,观察和体验并发进程间的通信和协作的效果 ,练习利用无名管道进行进程通信的编程和调试技术。 管道pipe是进程间通信最基本的一种机制,两个进程可以通过管道一个在管道一…

618必买好物清单来袭,这些数码产品值得你考虑!

是不是很多朋友和我一样,已经迫不及待地为618好物节做好了准备,准备开启一场购物盛宴!作为一名资深家居与数码爱好者,每年618好物节时我都会尽情挑选心仪的物品,因此今天我想和大家分享一下我的618购物清单&#xff0c…

不是,有你们这么卖东西的?涨价是肯定的,我苟住不浪也是必然的!——早读(逆天打工人爬取热门微信文章解读)

大家说我苟,我笑他人看不穿 引言Python 代码第一篇 洞见 晕船法则(深度好文)第二篇 九边 宅男之死结尾 理性的讨论能够促进理解 而不仅仅是赢得争论 我们追求的是通过讨论增进理解 而非仅仅证明自己的正确 引言 最近的言论似乎控制得更加严格…

LSS(Lift, Splat, Shoot)算法解析

1.简介 LSS(Lift, Splat, Shoot) 是一个比较经典的自下而上的构建BEV特征的3D目标检测算法,通过将图像特征反投影到3D空间生成伪视锥点云,通过Efficientnet算法提取云点的深度特征和图像特征并对深度信息进行估计,最终将点云特征转换到BEV空…

Minio(官方docker版)容器部署时区问题研究记录

文章目录 感慨&概述补充:MINIO_REGION和容器时间的关系 问题一:minio容器和本地容器时间不一致问题说明原因探究解决方法结果验证 问题二:minio修改时间和本地查询结果不一致具体问题原因探究解决办法时间转化工具类调用测试和验证上传文…

计算机组成结构—虚拟存储器

目录 一、虚拟存储器的基本概念 二、页式虚拟存储器 1.页表 2.快表(TLB) 3.具有 TLB 和 Cache 的多级存储系统 三、段式虚拟存储器 四、段页式虚拟存储器 五、虚拟存储器和Cache比较 早期的计算机,CPU 是直接操作主存的,也就是运行程序时&#xf…

深度学习之基于Vgg16卷积神经网络书法字体风格识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 书法是中国传统文化的重要组成部分,具有深厚的历史底蕴和独特的艺术魅力。在数字化时代&…

第50期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

损失函数详解

1.损失函数 是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误,损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数(loss function&#xf…

Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器

Baidu Comate智能编码助手 Baidu Comate 智能编码助手简单介绍安装使用查看Comate插件功能智能代码提示使用飞浆和百度智能小程序进行智能问答使用AutoWork插件实现二次函数图像的生成引用Comate知识库存在的问题结束语 Baidu Comate 智能编码助手简单介绍 Baidu Comate&#x…

设计模式(十一):外观模式

设计模式(十一):外观模式 1. 外观模式的介绍2. 外观模式的类图3. 外观模式的实现3.1 创建一个接口3.2 创建接口的实现3.3 创建一个外观类3.4 测试 1. 外观模式的介绍 外观模式(Facade Pattern)属于结构型模式&#xf…

Jupyter Notebook输入python代码没智能提示

1、在Jupyter中打开控制台 2、再控制台中执行以下两个命令: pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user pip install jupyter_contrib_nbextensions命令需要下载文件,请耐心等待。 3、执行完成后&#xff0…

202003青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 运行下方代码段,输出的结果是(   )。 a=(1,2,3)print(type(a))A :<class ‘float’> B :<class ‘int’> C :<class ‘str’> D :<class ‘tuple’> 正确答案:D 试题解析: 第 2 题 【单选题】 content.txt中原来的内容…

第11篇:创建Nios II工程之控制多个七段数码管

Q&#xff1a;DE2-115开发板上有8个七段数码管&#xff0c;如何用PIO IP并设计Nios II工程控制呢&#xff1f; A&#xff1a;基本思路&#xff1a;DE2-115上有8个7位七段数码管&#xff0c;而一个PIO最多可配置为32位&#xff0c;如此就可以添加2个PIO都配置为28位output。 Ni…

《500 Lines or Less》(13)—— A 3D Modeller

原文 作者 原code 我用py3重写的code 3D 建模器 介绍 计算机辅助设计&#xff08;Computer-aided design, CAD&#xff09;工具允许我们在2D屏幕上查看和编辑3D对象。为此&#xff0c;CAD工具必须具有3个基本功能&#xff1a; 表示对象&#xff1a;使用一种数据结构保存和表示…

SpringBoot的@Async注解有什么坑?

前言 SpringBoot中&#xff0c;Async注解可以实现异步线程调用&#xff0c;用法简单&#xff0c;体验舒适。 但是你一定碰到过异步调用不生效的情况&#xff0c;今天这篇文章总结了Async注解的坑点&#xff0c;希望对你会有所帮助。 未启用异步支持 Spring Boot默认情况下不启…

2024年短剧小程序视频怎么下载

想在闲暇之余轻松追剧&#xff0c;但不想跳转复杂的网页或者安装多个APP吗&#xff1f;来试试2024年的短剧小程序视频下载器吧&#xff01;它是一款专门为短剧爱好者打造的视频下载工具&#xff0c;让你轻松下载任何短剧小程序视频&#xff0c;随时随地享受精彩的短剧内容&…
最新文章