WWW.YOUINFO.SITE
标签聚合 Postgresql

/tag/Postgresql

LinuxDo 最新话题 · 2026-06-11 19:58:53+08:00 · tech

PostgreSQL 14 到 Apache Doris 4.1.1 CDC 同步方案 本文档用于验证并实施 PostgreSQL 业务库 fudabd_common_plat_db.public.terminal_pos_202602 到 Apache Doris 分析库 fudabd_common_plat_db.terminal_pos 的数据同步。 实际验证环境要求 PostgreSQL 源端 PostgreSQL 版本:14。 连接地址: 127.0.0.1:15432 。 登录账号: postgres 。 登录密码: Fdbd@2013 。 源数据库: fudabd_common_plat_db 。 源 schema: public 。 源表: fudabd_user 。 主键字段: id 。 已开启 logical replication。 pg_hba.conf 已允许 Doris 所在机器或容器访问数据库和 logical replication。 PostgreSQL 账号具备 logical replication、publication、slot 操作权限。 Doris 目标端 Apache Doris要求 最低docker镜像版本 4.1.1 ,此版本支持Stream Job; Doris 版本: doris-4.1.1-rc01-b10073ad9ca 。 Doris @@version : 5.7.99 。 目标数据库: fudabd_common_plat_db 。 目标表: fudabd_user 。 目标表当前不存在,需要由方案一手动创建。 目标表需要支持 UPDATE 、 DELETE ,因此设计为 UNIQUE KEY 表。 同步要求 需要先全量初始化,再持续增量同步。 需要处理 INSERT 、 UPDATE 、 DELETE 。 当前只验证 terminal_pos_202602 单表,暂不处理后续每月新增分表。 单表数据量:日均约 500 万条。 延迟目标:10 秒内。 Doris Streaming Job 支持判断 Apache Doris 4.x 官方文档提供 CREATE JOB ... ON STREAMING ,支持以下两类模式: TVF Mode :使用 cdc_stream(...) 读取 PostgreSQL CDC,再通过 INSERT INTO ... SELECT ... 写入指定 Doris 表,适合单表 SQL 映射同步。 当前环境是 4.1.1-rc01 ,建议正式执行前在当前 Doris 集群验证 Streaming Job 语法和 FE 配置。 参考文档: CREATE STREAMING JOB : CREATE STREAMING JOB - Apache Doris PostgreSQL SQL Mapping Sync: PostgreSQL CDC with SQL Mapping - Apache Doris PostgreSQL Auto Table Creation Sync: PostgreSQL CDC with Auto Table Creation - Apache Doris Doris 4.1.1 Release Notes: Release 4.1.1 - Apache Doris 前置检查 PostgreSQL 配置检查 当前已确认 postgresql.conf 包含以下配置: wal_level = logical max_replication_slots = 10 max_wal_senders = 10 wal_sender_timeout = 0 执行以下 SQL 复核: SHOW wal_level; SHOW max_replication_slots; SHOW max_wal_senders; 检查源表主键: SELECT tc.table_schema, tc.table_name, kcu.column_name FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = 'public' AND tc.table_name = 'terminal_pos_202602'; Doris 配置检查 登录 Doris FE MySQL 协议端口后执行: SELECT @@version_comment, @@version; SHOW FRONTEND CONFIG LIKE 'max_streaming_job_num'; 如果 max_streaming_job_num 为 0 或 Streaming Job 语法不可用,需要先调整 Doris FE 配置或切换到正式 4.1.1 镜像版本。 PostgreSQL JDBC Driver 准备 Streaming Job 需要 PostgreSQL JDBC Driver。建议将驱动放到 Doris FE/BE 都可访问的 HTTP 地址。 示例: postgresql-42.7.3.jar 本文 SQL 中使用 <PG_DRIVER_URL> 占位,执行前替换为实际地址,例如: https://maven.aliyun.com/repository/public/org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar 源表结构 CREATE TABLE `fudabd_user` ( `id` bigint NOT NULL COMMENT "用户ID", `user_name` varchar(50) NOT NULL COMMENT "用户名", `password` varchar(255) NOT NULL COMMENT "密码(应加密存储)", `age` tinyint NULL COMMENT "年龄", `create_time` datetime NULL COMMENT "创建时间", `update_time` datetime NULL COMMENT "更新时间", `is_deleted` int NULL DEFAULT "0" COMMENT "是否删除标记" ) SQL 映射同步 推荐结论 当前验证目标是 fudabd_user 同步到 fudabd_user ,且 Doris 目标表不存在、需要设计为 UNIQUE KEY ,优先 SQL 映射同步。 该模式优势: 可将源表 fudabd_user 明确写入目标表 fudabd_user 。 可手动控制 Doris 表模型、字段类型、分桶数和副本数。 可承接 PostgreSQL 主键表的 INSERT 、 UPDATE 、 DELETE CDC 变更。 创建 Doris 数据库 CREATE DATABASE IF NOT EXISTS fudabd_common_plat_db; USE fudabd_common_plat_db; 创建 Doris 目标表 CREATE TABLE `fudabd_user` ( `id` bigint NOT NULL COMMENT "用户ID", `user_name` varchar(50) NOT NULL COMMENT "用户名", `password` varchar(255) NOT NULL COMMENT "密码(应加密存储)", `age` tinyint NULL COMMENT "年龄", `create_time` datetime NULL COMMENT "创建时间", `update_time` datetime NULL COMMENT "更新时间", `is_deleted` int NULL DEFAULT "0" COMMENT "是否删除标记" ) ENGINE=OLAP UNIQUE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 10 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "min_load_replica_num" = "-1", "is_being_synced" = "false", "storage_medium" = "hdd", "storage_format" = "V2", "inverted_index_storage_format" = "V3", "compression" = "LZ4", "enable_unique_key_merge_on_write" = "true", "light_schema_change" = "true", "disable_auto_compaction" = "false", "enable_single_replica_compaction" = "false", "group_commit_interval_ms" = "10000", "group_commit_data_bytes" = "134217728", "enable_mow_light_delete" = "false" );; 参数建议: 单 BE 验证环境使用 replication_num = 1 。 生产多 BE 环境建议改为 replication_num = 3 。 日均 500 万数据验证阶段可先使用 BUCKETS 32 ,生产环境根据 BE 数量和 tablet 大小调整为 32 或 64 。 创建 SQL 映射 Streaming Job 执行前需要将 <PG_DRIVER_URL> 替换为 PostgreSQL JDBC Driver 的实际地址。 将 “offset” 从 “initial” 改为 “latest” 即可跳过全量快照,仅捕获增量变更: CREATE JOB pg_fudabd_user_to_fudabd_user ON STREAMING DO INSERT INTO fudabd_common_plat_db.fudabd_user ( id , user_name , password , age` tinyint , create_time , update_time , is_deleted ) SELECT id, user_name , password , age, create_time , update_time , is_deleted FROM cdc_stream( "type" = "postgres", "jdbc_url" = "jdbc:postgresql://127.0.0.1:15432/fudabd_common_plat_db", "driver_url" = "https://maven.aliyun.com/repository/public/org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar", "driver_class" = "org.postgresql.Driver", "user" = "postgres", "password" = "Fdbd@2013", "database" = "fudabd_common_plat_db", "schema" = "public", "table" = "fudabd_user", "offset" = "initial" ); JOB 运维命令 以下命令用于查看、暂停、恢复和删除前面创建的 Doris Streaming Job。 JOB 查看所有 INSERT 类型 JOB: SELECT * FROM jobs("type" = "insert"); 查看 SQL 映射同步 JOB: SELECT * FROM jobs("type" = "insert") WHERE Name = 'pg_fudabd_user_to_fudabd_user'; 查看 JOB 产生的 TASK 查看所有 INSERT 类型 TASK: SELECT * FROM tasks("type" = "insert"); 查看 SQL 映射同步 JOB 的 TASK: SELECT * FROM tasks("type" = "insert") WHERE JobName = 'pg_fudabd_user_to_fudabd_user'; 暂停 JOB 暂停 SQL 映射同步 JOB: PAUSE JOB WHERE jobName = 'pg_fudabd_user_to_fudabd_user'; 恢复启动 JOB 恢复 SQL 映射同步 JOB: RESUME JOB WHERE jobName = 'pg_fudabd_user_to_fudabd_user'; 删除 JOB 删除 SQL 映射同步 JOB: DROP JOB WHERE jobName = 'pg_fudabd_user_to_fudabd_user'; PGSQL运维命令 -- 查看当前 Publication SELECT p.pubname, n.nspname AS schema_name, c.relname AS table_name FROM pg_publication p JOIN pg_publication_rel pr ON p.oid = pr.prpubid JOIN pg_class c ON pr.prrelid = c.oid JOIN pg_namespace n ON c.relnamespace = n.oid; -- 查看 Replication Slot SELECT slot_name, plugin, slot_type, active, database, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots; ​ -- 如果 Slot 仍然 active,先终止连接 SELECT pid, usename, application_name, client_addr, state FROM pg_stat_activity WHERE backend_type = 'walsender'; ​ SELECT pg_terminate_backend(pid); -- pid 需要手动替换 ​ -- 删除 Replication Slot SELECT pg_drop_replication_slot('slot_name'); ​ -- 删除 Publication -- 查看当前 Publication 进行替换 DROP PUBLICATION doris_pub_1781162893358; ​ ​ -- 确认 Slot 已删除 SELECT slot_name FROM pg_replication_slots; ​ -- 检查 WAL 是否恢复正常 SELECT slot_name, active, pg_size_pretty( pg_wal_lsn_diff( pg_current_wal_lsn(), restart_lsn ) ) AS retained_wal FROM pg_replication_slots; ​ 延迟与性能建议 当前单表日均约 500 万条,验证阶段建议先使用 BUCKETS 32 。 如果同步延迟超过 10 秒,优先检查 Doris Streaming Job 状态、BE compaction、tablet 数量、网络带宽和 PostgreSQL replication slot WAL 堆积。 如果 Doris 集群 BE 数量较多,可将 BUCKETS 调整到 64 ,但不建议在 POC 初期过度增加 tablet 数。 生产环境建议使用多 BE,并将 replication_num 调整为 3 。 PostgreSQL 侧需要持续监控 pg_replication_slots ,避免 Doris Job 停止后 WAL 长时间堆积。 注意事项 STREAMING JOB 任务状态出现PENDING解决 问题根因 __internal_schema.streaming_job_meta 是 Doris 内部管理 Streaming Job 元数据的系统表, FE 未能自动创建它 。所有 Streaming Job 操作都依赖此表,缺失则全部阻塞在 PENDING。 确认 __internal_schema 库及表现状 -- 查看内部库是否存在 SHOW DATABASES LIKE '__internal_schema'; ​ -- 如果存在,查看里面有哪些表 SHOW TABLES FROM __internal_schema; 第一步:先停掉报错的 JOB 止血 TOP JOB pg_fudabd_user_to_fudabd_user; 第二步:手动创建缺失的内部表 CREATE TABLE IF NOT EXISTS `__internal_schema`.`streaming_job_meta` ( `id` bigint NOT NULL, `job_id` bigint NOT NULL, `table_name` varchar(256) NOT NULL, `chunk_list` text ) UNIQUE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_num" = "1" ); 这是基于日志中 SQL 推断的最小表结构。如果后续 FE 代码还访问了其他字段,会再次报错,届时根据错误信息用 ALTER TABLE 补充列即可。 第三步:删除旧 JOB 重新创建 3 个帖子 - 3 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-04 13:13:39+08:00 · tech

三台服务器,一台用来跑服务,简称service,另外一台运行了Kafka和PostgreSQL,这台简称sql-kafka,最后一台放了Cassandra,这个简称Cassandra,然后这三个服务器都是同一个vpc,并且他们的可用区域都是一样的,service访问sql-kafka和cassandra都是通过vpc的里面的内网IP访问的,亚马逊的数据转发不是说处于同一个区域并且通过内网IP访问是没有数据转发费用的,但是现在我看到了很多的数据转发流量 3 个帖子 - 2 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-05-15 12:10:13+08:00 · tech

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 项目地址 https://github.com/sleepinginsummer/agent-database-cli 为什么开发这个 想找一个cli数据库管理工具,发现只有mcp,每次改配置都要重启有点麻烦。 此前开源了 agent-ssh-cli 和 agent-browser-cli,再加上这个cli,打通前后端全栈开发整个链路 页面+数据库+服务器+代码。方便ai完成整个项目链路的开发调试。 【开源】参考ssh-mcp-server,开发了一个ssh-cli的版本 开发调优 本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 他能做的事… 【开源】三级了!开源一个项目,AI Agent 复用本机真实 Chrome 会话的浏览器控制 CLI,支持读取页面、执行 JS、操作标签页、获取 Cookie、截图和上传文件,保留登录态 开发调优 本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 今天终于三… 使用建议 生产库建议配置专门的只读账号,使用只读模式+命令黑名单,如果需要执行查询外的sql,让ai输出手动执行 oralce 需要额外sqlcl 驱动,需要去oracle官网下载 sqlcl 怎么安装 丢给ai 安装请阅读 https://github.com/sleepinginsummer/agent-database-cli/blob/main/AI_INSTALL.md,按说明安装 CLI 并添加 `SKILL.md`。 使用截图 最后,欢迎大家使用和提建议 1 个帖子 - 1 位参与者 阅读完整话题

linux.do · 2026-04-30 17:50:53+08:00 · tech

前一阵我在国内腾讯云的机子上装了个宝塔,因为是面板,省事 然后安装了 Postgresql 改了一下配置支持外网访问 第二天一看数据库没了连不上,数据库备份也没有了(就是自动备份) 看到下面有个 我点进去一看 给我吓得呀,这数据库被黑进来了,服务器是不是也差不多被黑进来了,然后联系腾讯云客服,他们的安全专员看了ip访问日志没看出所以然来,我以为腾讯云有问题,不敢用腾讯云了。 然后有一个国外闲置的小机子,这个小机子几个月前我装过宝塔,但是没装 Postgresql,大概是21号左右吧,然后我就没动过机子了,今天刚刚快下班闲了,想起来这个机子,上来一看,我数据库怎么又被黑了, 然后谷歌搜索了一下 宝塔 + Postgresql 被黑关键词,一看果然有几个帖子 bt.cn 【待反馈】安装pgsql有后面 大家小心 - Linux面板 - 宝塔面板论坛 运维人员常用的服务器监控系统,宝塔面板可一键部署:LAMP/LNMP/Tomcat/Node.js环境,通过web端可视化操作,优化了建站流程,提供安全管理、计划任务、文件管理以及软件管理等功能, 【待反馈】安装pgsql有后面 大家小心 ,宝塔面板论坛 bt.cn 【已完成】宝塔postgresql疑感染勒索病毒,请官方检查安装包 - Linux面板 - 宝塔面板论坛 运维人员常用的服务器监控系统,宝塔面板可一键部署:LAMP/LNMP/Tomcat/Node.js环境,通过web端可视化操作,优化了建站流程,提供安全管理、计划任务、文件管理以及软件管理等功能, 【已完成】宝塔postgresql疑感染勒索病毒,请官方检查安装包 ,宝塔面板论坛 bt.cn 【已解答】卧槽,宝塔的postgresql有毒 - Linux面板 - 宝塔面板论坛 运维人员常用的服务器监控系统,宝塔面板可一键部署:LAMP/LNMP/Tomcat/Node.js环境,通过web端可视化操作,优化了建站流程,提供安全管理、计划任务、文件管理以及软件管理等功能, 【已解答】卧槽,宝塔的postgresql有毒 ,宝塔面板论坛 这儿不知道让不让放链接,不让的话我删掉 复现方法很简单,我过一阵再试试能不能复现,能复现的话就太有意思了。 安装宝塔 通过宝塔安装 Postgresql 然后开放外网 就是 5432 那个端口 往里面放点什么代码,等一天。 还好数据不多是用来学习的,这瓜吃到自己身上了 5 个帖子 - 5 位参与者 阅读完整话题

linux.do · 2026-04-28 15:09:18+08:00 · tech

如题,由于之前自己的postgresql docker镜像异常后重置了,数据都丢失了,耽误了不少事,所以希望有个一劳永逸的docker-compose配置来减少后续麻烦。 要求是尽量减少依赖,尽量在一个docker里,找ai问了下,ai给了两个如下的示例方案感觉都不算特别简洁,特来求助各位佬。 # docker-compose.yml services: postgres: image: postgres:15 environment: POSTGRES_PASSWORD: secret volumes: - pgdata:/var/lib/postgresql/data - ./backups:/backups # 定时备份服务 backup: image: ofelia:latest depends_on: - postgres volumes: - /var/run/docker.sock:/var/run/docker.sock - ./backups:/backups command: > job-exec --name backup --schedule "0 2 * * *" --docker postgres -- pg_dump -U postgres postgres | gzip > /backups/backup_$(date +%Y%m%d_%H%M%S).sql.gz # docker-compose.yml services: postgres: image: postgres:15 environment: POSTGRES_PASSWORD: secret volumes: - pgdata:/var/lib/postgresql/data # 定时备份容器 pgbackup: image: postgres:15 volumes: - pgdata:/var/lib/postgresql/data - ./backups:/backups command: > sh -c 'echo "0 2 * * * pg_dump -h postgres -U postgres postgres | gzip > /backups/backup_$(date +%%Y%%m%%d_%%H%%M%%S).sql.gz" >> /etc/cron.d/backup && cron && tail -f /dev/null' depends_on: - postgres restart: unless-stopped 6 个帖子 - 4 位参与者 阅读完整话题

linux.do · 2026-04-23 23:21:08+08:00 · tech

密码以 bcrypt 哈希存储在 PostgreSQL 的 users 表中。 步骤: 进入 PostgreSQL 容器: docker compose exec postgres psql -U sub2api -d sub2api 生成新密码的 bcrypt 哈希: # 用 Python 生成 bcrypt hash(在有python的电脑执行,密码改成你想要的) python3 -c "import bcrypt; print(bcrypt.hashpw(b'your_new_password', bcrypt.gensalt(10)).decode())" 在 psql 中更新密码: UPDATE users SET password_hash = '(刚刚生成的)$2a$10$...' WHERE role = 'admin'; SELECT email, role FROM users WHERE role = 'admin'; 1 个帖子 - 1 位参与者 阅读完整话题