当前位置: 首页 > news >正文

clickhouse如何从postgres导入

从 PostgreSQL 导入数据到 ClickHouse的完整方法,涵盖多种场景:一次性迁移、实时同步、联邦查询等。


一、ClickHouse 内置 PostgreSQL 引擎(推荐)

ClickHouse 内置PostgreSQL 引擎,可直接查询 PostgreSQL 数据,无需中间件。

1. 创建 PostgreSQL 数据库引擎

sql

复制

-- 创建虚拟数据库,自动映射所有 PostgreSQL 表 CREATE DATABASE pg_db ENGINE = PostgreSQL( 'postgres-host:5432', -- PostgreSQL 地址:端口 'source_database', -- PostgreSQL 数据库名 'username', -- 用户名 'password' -- 密码 );

2. 直接查询 PostgreSQL 数据

sql

复制

-- 查询 PostgreSQL 表(无需导入) SELECT * FROM pg_db.users; SELECT * FROM pg_db.orders WHERE created_at >= '2024-01-01'; -- 关联 ClickHouse 和 PostgreSQL 数据 SELECT ch.order_id, pg.customer_name, pg.customer_email FROM clickhouse_orders ch INNER JOIN pg_db.customers pg ON ch.customer_id = pg.id;

3. 将数据导入 ClickHouse

sql

复制

-- 创建本地表 CREATE TABLE users_local ( id UInt64, name String, email String, created_at DateTime ) ENGINE = MergeTree() ORDER BY id; -- 从 PostgreSQL 导入数据 INSERT INTO users_local SELECT * FROM pg_db.users WHERE created_at >= '2024-01-01';

二、PostgreSQL 表函数(单次查询)

无需创建数据库,直接查询:

sql

复制

-- 单次查询 PostgreSQL SELECT * FROM postgresql( 'postgres-host:5432', 'database', 'table_name', 'user', 'password' ); -- 导入数据 INSERT INTO clickhouse_table SELECT * FROM postgresql( 'postgres:5432', 'mydb', 'events', 'admin', 'secret' ) WHERE event_date >= today() - INTERVAL 7 DAY;

三、批量导出/导入(CSV 方式)

适用于大规模一次性迁移:

步骤 1:从 PostgreSQL 导出 CSV

bash

复制

# 使用 psql 导出 psql -h localhost -U postgres -d mydb -c \ "\COPY (SELECT * FROM events WHERE created_at >= '2024-01-01') TO '/tmp/events.csv' WITH CSV HEADER" # 或使用 COPY 命令(在 psql 内执行) COPY events TO '/tmp/events.csv' WITH (FORMAT CSV, HEADER);

步骤 2:导入 ClickHouse

sql

复制

-- 创建目标表 CREATE TABLE events ( id UInt64, user_id UInt32, event_type String, created_at DateTime ) ENGINE = MergeTree() ORDER BY (user_id, created_at); -- 从 CSV 导入 INSERT INTO events SELECT * FROM file('/tmp/events.csv', 'CSVWithNames'); -- 或使用 URL/S3 INSERT INTO events SELECT * FROM url('http://example.com/events.csv', 'CSVWithNames');

四、实时同步方案(CDC)

方案 1:MaterializedPostgreSQL 引擎(自动同步)

ClickHouse 实验性功能,自动同步 PostgreSQL 数据:

sql

复制

-- 创建物化 PostgreSQL 数据库(自动 CDC) CREATE DATABASE pg_sync ENGINE = MaterializedPostgreSQL( 'postgres-host:5432', 'source_db', 'user', 'password' ) SETTINGS materialized_postgresql_tables_list = 'users,orders,products', -- 指定同步表 materialized_postgresql_schema = 'public'; -- 查看同步状态 SELECT database, table, is_replicated, replication_lag_seconds FROM system.materialized_postgresql_tables;

⚠️注意:需开启 PostgreSQL 逻辑复制(wal_level = logical

方案 2:Debezium + Kafka(生产级方案)

架构流程 :

plain

复制

PostgreSQL → WAL → Debezium → Kafka → ClickHouse Kafka Engine

PostgreSQL 配置

sql

复制

-- 开启逻辑复制 ALTER SYSTEM SET wal_level = logical; ALTER SYSTEM SET max_replication_slots = 10; ALTER SYSTEM SET max_wal_senders = 10; -- 创建复制槽 SELECT pg_create_logical_replication_slot('ch_slot', 'pgoutput');

ClickHouse Kafka 引擎

sql

复制

CREATE TABLE events_queue ( id UInt64, data String ) ENGINE = Kafka( 'kafka-host:9092', 'pg-events', 'ch-group', 'JSONEachRow' ); CREATE MATERIALIZED VIEW events_mv TO events AS SELECT * FROM events_queue;

五、云服务商方案

阿里云 DTS(数据传输服务)

适用于阿里云 RDS PostgreSQL 到 ClickHouse:

表格

功能说明
结构迁移自动转换表结构,添加_sign_version系统字段
全量迁移批量导出导入历史数据
增量同步基于逻辑复制槽实时同步 DML/DDL
数据校验自动校验数据一致性

关键配置

  • PostgreSQL 需设置wal_level = logical

  • 分区键不支持可空字段,仅支持 BIGINT/INT/TIMESTAMP/DATE

  • 目标表自动添加_sign(Int8)、_version(UInt64)字段


六、NineData 数据复制(第三方工具)

支持可视化配置,全量+增量同步:

特点

  • 结构自动迁移(自动添加_jz_data_sign_jz_data_time字段)

  • 行级并发复制

  • 断点续传

  • 双向同步支持

sql

复制

-- NineData 自动添加的系统列 _jz_data_sign Int8 DEFAULT 1, -- 1=INSERT, -1=DELETE _jz_data_time String DEFAULT now() -- 更新时间

七、数据类型映射对照

表格

PostgreSQLClickHouse说明
BIGINTInt64/UInt64无符号类型映射为 Uint
INTEGERInt32
VARCHAR/TEXTString
TIMESTAMPDateTime64注意时区处理
DATEDate
BOOLEANUInt80/1 存储
JSON/JSONBString需手动解析
NUMERICDecimal(P, S)需指定精度

八、推荐方案选择

表格

场景推荐方案延迟
临时查询/联邦分析PostgreSQL 引擎实时
一次性全量迁移CSV 导出导入分钟级
实时同步(简单)MaterializedPostgreSQL秒级
生产级实时同步Debezium + Kafka秒级
云环境迁移阿里云 DTS / NineData秒级

需要针对特定场景(如大数据量迁移、实时同步配置等)的详细步骤吗?

http://www.jsqmd.com/news/623530/

相关文章:

  • AI赋能软件原型设计:主流工具全解析与实战选型指南
  • AI抠图神器:cv_unet图像抠图WebUI,支持JPG/PNG多格式快速处理
  • kali 免杀木马
  • 告别代码恐惧:用自然语言让AI成为你的全平台操作助手
  • 解锁边缘AI新可能:在Jetson Nano上实战部署Qwen-1.8B大模型
  • Bandgap电路仿真避坑指南:你的温度曲线为啥不平?PSRR和噪声仿真结果怎么看?
  • AI原生开发工具链怎么选?2026年Top 12工具实测数据+企业落地ROI模型(附淘汰清单)
  • 掌握3D相机匹配:fSpy开源工具实战指南
  • 前端测试:别让bug悄悄溜进你的应用
  • fre:ac音频转换器完整指南:如何在5分钟内完成无损格式转换
  • Ostrakon-VL-8B辅助设计:基于SolidWorks模型的智能说明文档生成
  • Python自动化测试实战
  • 避开Proteus+51单片机仿真的5个常见坑:从键盘抖动到数码管鬼影的实战解决
  • GBase 8a数据库的“晚期物化内存瘦身术”解析(上)
  • 告别反极性!四管升降压电路(Buck-Boost)如何用双占空比实现宽电压输入?实测波形全解析
  • 5分钟搞定:bert-base-chinese完形填空与语义相似度实战
  • AI魔法修图师高阶玩法:结合Python脚本批量处理图片
  • Qwen3-ForcedAligner-0.6B模型压缩实践:减小部署体积
  • 大一新生 × AI Coding:从游戏到记账本,我如何用DeepSeek写出第二个Python项目
  • FlyThings3D 数据集在立体视觉任务中的应用探索
  • AltDrag完整指南:一键改变Windows窗口操作体验的终极工具
  • 电子实验记录本ELN测评:创腾科技 iLabPower使用体验
  • OpenHarmony MIPI CSI驱动调试笔记:如何用逻辑分析仪抓包排查‘无图像’问题
  • 终极SukiUI教程:打造惊艳Avalonia桌面应用的完整指南
  • 为什么92%的AI项目后端在6个月内重构?曝光3个被低估的AI原生设计反模式(含LLM API调用链路雪崩真实日志分析)
  • 别再死记硬背Modbus报文了!用Python+Modbus Poll手把手教你调试工业设备
  • 崩坏3扫码登录终极指南:轻松实现多渠道服一键登录解决方案
  • 暗黑2存档编辑终极指南:从新手到专家的3步进阶之路
  • 清华大学徐静团队突破视触觉传感极限:无透镜ThinTact在微创手术机器人中的应用探索
  • Qwen3.5-9B-AWQ-4bit Python数据分析环境快速搭建与模型调用