作者:来自 新智锦绣 靳海峰

PostgreSQL 通过 Connector 连接 Elasticsearch 的主要作用是实现关系型数据库与搜索引擎之间的数据同步,将 PostgreSQL中的数据实时或准实时地复制到 ES 中,以利用 ES 强大的全文检索和分析能力。EDB EPAS 除了其高级功能外,原生完全兼容 postgresql。所以通过 Elastic Integrations 中的 PostgreSQL Connector 是可以实现 EDB 与 ES 的数据连接与同步的。
PostgreSQL 到 ES 的连接器核心价值在于打破数据孤岛,在保留 PG 事务能力的同时,充分发挥ES的检索与分析优势,且集成连接器支持低代码、近实时和高可靠性,是企业构建搜索中台和实时数据平台的重要组件。
一、PG 与 ES 数据同步优势
- **提升搜索性能:**PostgreSQL 虽然支持全文搜索,但在处理复杂搜索、模糊匹配和高并发查询时,Elasticsearch 表现更加出色。
- **实现数据分析与搜索分离:**将搜索压力从业务数据库中分离出来,保证 OLTP 业务的稳定性。
- **充分利用 Elasticsearch生态:**通过 ES 强大的聚合分析、可视化功能,为数据挖掘和业务监控提供支持。
二、常见的数据同步方案
目前主流的数据同步方法主要有以下几种:
- 应用层双写 - 在业务代码中同时写入 PG 和 ES
- 日志解析 - 通过解析 PG 的 WAL 日志实现数据同步
- 定时任务 - 通过定时扫描数据库来同步数据
- 使用 CDC 工具 - 如 Debezium 等变更数据捕获工具
- 原生 Connector - 使用 Elasticsearch 官方提供的集成方案
今天我们将重点介绍最后一种方案 ------ 使用 Elastic Integrations 的 PostgreSQL Connector。
三、Elastic 原生 PG Connector 配置指南
环境准备
在开始之前,请确保您已准备好:
- Elasticsearch 集群(本例 8.17.2)
- PostgreSQL 数据库(本例 Enterprisedb EPAS 17)
配置 PostgreSQL 连接器
在 Kibana 界面中操作:
1)进入 管理 → 集成
2)搜索 PostgreSQL
这里有两个 postgresql 集成选项,一个主要是 postgresql 的日志及审计集成,另一个是数据内容同步,这里我们选择第二个。

3)点击 PostgreSQL 进入添加界面,新建 enterprisedb 连接器名称

4)选择部署方式 - docker 方式

5)自动生成为 docker 运行连接器生成索引及密钥,后续在 config.yml 配置中做相应调整。并提示 docker 运行命令,等待连接器接入。
Docker(podman)环境下连接器的安装和启动配置
1)选择任意一台安装好 docker 运行环境的机器,按上面提示进行连接器配置。
我们以已经配好的一个连接器为参考来进行配置(主要是 api_key 等的差别)
[nuser@epas-1 elastic-connectors]$ mkdir -p "$HOME/elastic-connectors"
[nuser@epas-1 elastic-connectors]$ cd $HOME/elastic-connectors
[nuser@epas-1 elastic-connectors]$ touch config.yml
[nuser@epas-1 elastic-connectors]$ mkdir certs
[nuser@epas-1 elastic-connectors]$ sudo cp /etc/elasticsearch/certs/http_ca.crt ./certs/ca.crt
[nuser@epas-1 elastic-connectors]$ chmod 644 $HOME/elastic-connectors/certs/ca.crt
添加相应配置内容到 config.yml,从 Elastic 8.0 版本开始,安全功能(包括 TLS)是自动配置并默认开启的,所以我们要添加 tls 安全认证证书。可以从 elasticsearch cluster 的配置目录下拷贝 http_ca.crt 证书到当前目录下。并添加 ssl 字段内容。
[nuser@epas-1 elastic-connectors]$ cat config.yml
connectors:
-
connector_id: "K8Fcv5oBs306iAMqUdoW"
service_type: "postgresql"
api_key: "TE1GY3Y1b0JzMzA2aUFNcVV0b3U6TTZ6Z1hvOGlTS2FYSmlScUIybC1YUQ=="
elasticsearch:
host: "https://192.168.31.11:9200"
api_key: "TE1GY3Y1b0JzMzA2aUFNcVV0b3U6TTZ6Z1hvOGlTS2FYSmlScUIybC1YUQ=="
ssl:
certificate_authorities: ["/config/certs/ca.crt"]
2)运行并启动 docker 连接器
-
运行 docker 的环境是 Oracle Linux Server release 8.5,默认系统已用 podman 替代 docker engine,所以环境需要做一些配置。当前网络环境是192.168.31.0/255
- Podman 默认的 "podman" 网络(CNI bridge)不会自动路由到主机所在 LAN,所以容器无法访问 192.168.31.x。所以在容器启动时,最好通过-- network=host 使容器直接用主机网络。
-
镜像里 elastic-ingest 使用 Python venv,内部 SSL 初始化逻辑硬编码了 CA 加载方式,所以即使正确指定了证书位置,启动后还是会报 "Cannot connect to host 192.168.31.11:9200 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1006)')]"这样的错误,所以需要重构一个 update 证书的 image
在 elastic-connectors 目录下,创建 Dockerfile 文件,以便重新 build 新的 image
[nuser@epas-1 elastic-connectors]$ cat Dockerfile
FROM docker.elastic.co/integrations/elastic-connectors:8.17.2
# 拷贝 CA
COPY certs/ca.crt /usr/local/share/ca-certificates/ca.crt
COPY certs/ca.crt /etc/ssl/certs/ca.crt
RUN apk add --no-cache ca-certificates \
&& update-ca-certificates
[nuser@epas-1 elastic-connectors]$ sudo podman build -t elastic-connectors-ssl
-
启动 docker
[nuser@epas-1 elastic-connectors] sudo podman run --network host -v "HOME/elastic-connectors:/config" elastic-connectors-ssl /app/bin/elastic-ingest -c /config/config.yml
[FMWK][10:16:05][INFO] Running connector service version 8.17.2
[FMWK][10:16:05][INFO] Loading config from /config/config.yml
[FMWK][10:16:05][INFO] Running preflight checks
[FMWK][10:16:05][INFO] Waiting for Elasticsearch at https://192.168.31.11:9200 (so far: 0 secs)
[FMWK][10:16:05][INFO] Elasticsearch 8.17.2and Connectors 8.17.2 are compatible
[FMWK][10:16:05][INFO] Extraction service is not configured, skipping its preflight check.
[FMWK][10:16:05][INFO] [job_scheduling_service] Job Scheduling Service started, listening to events from https://192.168.31.11:9200
[FMWK][10:16:05][INFO] [content_sync_job_execution_service] Content sync job execution service started, listening to events from https://192.168.31.11:9200
[FMWK][10:16:05][INFO] [access_control_sync_job_execution_service] Access control sync job execution service started, listening to events from https://192.168.31.11:9200
[FMWK][10:16:06][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3] Connector is not configured yet. Finish connector configuration in Kibana to make it possible to run a sync.
[FMWK][10:16:36][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3] Connector is not configured yet. Finish connector configuration in Kibana to make it possible to run a sync.
[FMWK][10:17:06][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3] Connector is not configured yet. Finish connector configuration in Kibana to make it possible to run a sync.
[FMWK][10:17:36][INFO] [job_scheduling_service] Connector is configured correctly and can reach the data source
[FMWK][10:18:06][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3, Sync job id: A9Crv5oBs306iAMqUws7] Executing full sync
[FMWK][10:18:06][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3, Sync job id: A9Crv5oBs306iAMqUws7] Filtering validation starte
成功启动并连接到 ES。
3)在连接成功的 connector 下,配置 edb epas 连接信息

Kibana下进行同步或设置同步计划

至此,通过 postgresql 连接器连接 enterprisedb 到 ES 的数据同步就成功了。接下来就可以在 ES 下进行数据分析和可视化操作了。
三、在 ES 下测试导入的数据及可视化操作
在 EPAS 下的显示:
edb=# select version();
version
-----------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 17.6 (EnterpriseDB Advanced Server 17.6.0) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.020210514 (Red Hat 8.5.0-26), 64-bit
(1 行记录)
edb=# \dt
关联列表
架构模式 | 名称 | 类型 | 拥有者
----------+---------------------------------------+--------+--------------
public | credit_card_transactions | 分区表 | enterprisedb
public | credit_card_transactions_2025_09 | 数据表 | enterprisedb
public | credit_card_transactions_heap_2025_09 | 数据表 | enterprisedb
public | dept | 数据表 | enterprisedb
public | emp | 数据表 | enterprisedb
public | items | 数据表 | enterprisedb
public | jobhist | 数据表 | enterprisedb
public | maps | 数据表 | enterprisedb
public | reservation_slots | 数据表 | enterprisedb
public | reservations | 数据表 | enterprisedb
public | restaurant_tables | 数据表 | enterprisedb
public | t1 | 数据表 | enterprisedb
public | test | 数据表 | enterprisedb
(13 行记录)
edb=# select sum(sal) from emp;
sum
----------
30025.00
(1 行记录)
在连接器的下的文档页可以看到同步的内容:

为了方便在 discover 下观测和分析,可以把该索引创建 datastream。我们创建了enterprisedb的datastream。

在 Discover下查看索引文档信息:

还可以基于数据进行可视化编排和处理:

在开发控制台下进行 DSL/SQL 查询:

四、总结
通过 Elastic Integrations 的 PostgreSQL Connector,我们可以实现从 Enterprise EPAS 到 Elasticsearch 的数据同步,既保留了 PostgreSQL 在事务处理上的优势,又充分发挥了 Elasticsearch 在搜索和分析方面的强大能力。
这种方案特别适合需要实时搜索、复杂分析和数据可视化的场景,为业务提供更加完善的数据支持。
感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。