没想到!IvorySQL居然同步了原生PG18.4镜像

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

——外网拉 PostgreSQL 镜像苦熬 20 分钟?IvorySQL 社区国内源 30 秒极速拉取原生 PostgreSQL 18.4

👤 作者简介

作者: ShunWah
公众号: "shunwah 星辰数智社"主理人。

持有认证: OceanBase、MySQL、OpenGauss、崖山、金仓 KingBase、KaiwuDB、亚信 AntDBCA、瀚高、GBase、Galaxybase、Neo4j、NebulaGraph、东方通 TongTech、TiDB 等多项权威认证。

获奖经历: 崖山 YashanDB YVP、浪潮 KaiwuDB MVP、墨天轮 MVP、金仓社区 KVA、TiDB 社区 MVA、NebulaGraph 社区之星、IFClub 星珩联盟·智库星系技术专家、ITPUB 技术专家、GBase 8a 开发者联盟成员 社区版主及布道师。在 OceanBase&墨天轮征文大赛、OpenGauss、TiDB、YashanDB、Kingbase、KWDB、Navicat 征文等赛事中多次斩获一、二、三等奖,原创技术文章常年被墨天轮、优快云、ITPUB 等平台首页推荐。

111.jpg

📖 前言

前段时间发了一篇 IvorySQL 国内镜像实测文章,不少读者私信问:仓库里能不能拉原生 PostgreSQL?

今天专门拿 openEuler 真机完整测一遍 PG 18.4-bookworm 镜像,把整套实操、踩坑点一次性说透。

之前用 Docker Hub 拉 PG 镜像,老毛病一堆:⏱️ 高峰几百 KB/s、下到 90% 直接断连,机房无外网代理时干脆完全拉不动。现在 IvorySQL 社区 registry.highgo 仓库同步了官方原生 PG 镜像,不用切换第三方加速源,一套仓库同时跑 IvorySQL、原生 PG,做迁移对比、兼容性测试特别省事。

全文没有套话,全部是真机复制可执行命令,把版本标签坑、磁盘爆满、宿主机无客户端、命令粘贴报错这些运维高频问题全部拆解,新手照着操作也能一次性部署成功。

🔥 写在前面:本文所有命令均基于 openEuler 真机实测,截图均为实际操作记录,非模拟演示。

一、前置环境说明

本次实测机器配置:

项目版本/信息
🖥️ 操作系统openEuler
🐳 Docker20.10.24
📦 Docker Composev2.20.0
📍 镜像仓库registry.highgo.com
🎯 测试镜像registry.highgo.com/postgres/postgres:18.4-bookworm
[root@openeuler-server ~]# docker --version
Docker version 20.10.24, build 297e128
[root@openeuler-server ~]# docker-compose --version
Docker Compose version v2.20.0
[root@openeuler-server ~]#

1.png

1.1 🚨 先划重点:镜像标签致命大坑

很多人会直接执行下面这条命令,百分百报错:

# ❌ 错误写法,纯数字tag仓库不存在,而且路径也是错的少了postgres/postgres
docker pull registry.highgo.com/postgres:18.4
1.1.1 报错现场
[root@openeuler-server ~]# docker pull registry.highgo.com/postgres:18.4
Error response from daemon: unknown: bad request: invalid repository name: postgres
[root@openeuler-server ~]#

2.png

1.1.2 原因 & 正确指令

📌 根因:仓库内 PG 镜像必须携带系统发行后缀 -bookworm / -trixie,不能只写数字版本。

📌 正确:仓库内 PG 镜像的完整路径是 postgres/postgres,不是 postgres;且标签必须带 -bookworm 发行版后缀

✅ 正确拉取命令:

[root@openeuler-server ~]# docker pull registry.highgo.com/postgres/postgres:18.4-bookworm
18.4-bookworm: Pulling from postgres/postgres
dc4bf025fa70: Pull complete
07800c4658aa: Pull complete
d3b29a572ab1: Pull complete
9c32480c36e2: Pull complete
ab0222f6080d: Pull complete
26068876c106: Pull complete
204ea99b8184: Pull complete
b9b7e4c43bc2: Pull complete
d626a1ee2499: Pull complete
df093a451bde: Pull complete
4551c7621254: Pull complete
b7cc028a2062: Pull complete
4ea1c3550cc2: Pull complete
Digest: sha256:d323ae4f611b8c41e2488693785b770d2797c10e859b259e4e7706246debb069
Status: Downloaded newer image for registry.highgo.com/postgres/postgres:18.4-bookworm
registry.highgo.com/postgres/postgres:18.4-bookworm
[root@openeuler-server ~]#

3.png

二、⚡ 极速拉取:从 20 分钟到 30 秒

2.1 执行拉取

[root@openeuler-server ~]# docker pull registry.highgo.com/postgres/postgres:18.4-bookworm
18.4-bookworm: Pulling from postgres/postgres
67cf8384fcca: Pull complete
047252d203fc: Pull complete
285c515ff12e: Pull complete
c04bac481cf: Pull complete
4d2f8983bdeb: Pull complete
928cbc530e9b: Pull complete
b7d7c0b1553c: Pull complete
ef11daf91965: Pull complete
5dab6177213d: Pull complete
b73f5647695f: Pull complete
9c1186127d05: Pull complete
c73bb36f2399: Pull complete
142af709c9ab: Pull complete
Digest: sha256:1fa4bccc8246ee2ba9592895d804dcf767119e632999ef22d2b3355a93b627c3
Status: Downloaded newer image for registry.highgo.com/postgres/postgres:18.4-bookworm
registry.highgo.com/postgres/postgres:18.4-bookworm

💡 实测效果:从敲下回车到下载完毕,大概只用了 30 秒左右。之前在 Docker Hub 上龟速爬行的日子一去不复返,下载速度直接飙到几十 MB/s。这效率,简直是质的飞跃。

2.2 镜像完整性校验

拉完核对镜像 ID、文件大小,确认无损坏分层:

[root@openeuler-server ~]# docker images | grep postgres
registry.highgo.com/postgres/postgres               18.4-bookworm   dda003c01642   2 weeks ago    440MB
registry.highgo.com/postgres/postgres               18.3-bookworm   3c67953c3a90   7 weeks ago    440MB
[root@openeuler-server ~]#

4.png

三、🚀 启动容器:连环踩坑实录

镜像拉下来了,接下来就是启动。这里我要特别提醒一句:PostgreSQL 的 Docker 镜像和 MySQL / IvorySQL 有点不一样,它默认不会暴露 1521 端口,而且对环境变量的要求比较"倔强"。

3.1 坑 ①:Shell 历史扩展 !! 引发的"鬼畜"报错

我第一次启动时,习惯性地用了之前 IvorySQL 的命令风格,结果悲剧了:

[root@openeuler-server ~]# docker run --name pg184 -p 5432:5432 -e POSTGRES_PASSWORD=StrongPass456!! -v pgdata:/var/lib/postgresql/data -d registry.highgo.com/postgres/postgres:18.4-bookworm
Unable to find image 'run:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 202.160.130.66:443: connect: connection timed out.
See 'docker run --help'.
[root@openeuler-server ~]#

5.png

🔍 根因分析:你注意看密码:StrongPass456!!。在 Bash 等 Shell 中,!! 是一个特殊指令,意思是"重复执行上一条命令"。Shell 在执行前会把 !! 替换成上一条完整命令,结果就"展开"成了一条包含自身的超长命令,自然报错。

✅ 解决方案:用单引号或双引号把密码包起来:

[root@openeuler-server ~]# docker run --name pg184 -p 5432:5432 -e POSTGRES_PASSWORD='StrongPass456!!' -v pgdata:/var/lib/postgresql/data -d registry.highgo.com/postgres/postgres:18.4-bookworm
5867e8daa44e925e7818598013a1da62ad7dbdd685e6aa0fae68a94d590edbce
docker: Error response from daemon: driver failed programming external connectivity on endpoint pg184 (7e11a12a731fb44d5aea01d0363b015deadb223d87df0569a40c46a0698da70e): Bind for 0.0.0.0:5432 failed: port is already allocated.
[root@openeuler-server ~]#

6.png

3.2 坑 ②:端口 5432 已被 IvorySQL 占用

报错信息:Bind for 0.0.0.0:5432 failed: port is already allocated。

看一眼 docker ps -a 的结果,真相大白:

[root@openeuler-server ~]# docker ps -a
CONTAINER ID   IMAGE                                                      COMMAND                  CREATED          STATUS                   PORTS                                                                                            NAMES
5867e8daa44e   registry.highgo.com/postgres/postgres:18.4-bookworm        "docker-entrypoint.s…"   31 seconds ago   Created                                                                                                                   pg184
90f5945502a0   registry.highgo.com/ivorysql/ivorysql:5.3-ubi8             "docker-entrypoint.s…"   9 days ago       Up 9 days                0.0.0.0:1521->1521/tcp, :::1521->1521/tcp, 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp, 5866/tcp   ivorysql

7.png

那个叫 ivorysql 的容器已经占了 5432。一台服务器上,一个端口同一时间只能服务一个程序。

✅ 解决方案:换个端口映射。把宿主机的 5433 映射到容器的 5432:

[root@openeuler-server ~]# docker stop pg184
pg184
[root@openeuler-server ~]# docker rm pg184
pg184
[root@openeuler-server ~]# docker run --name pg184 -p 5433:5432 -e POSTGRES_PASSWORD='StrongPass456!!' -v pgdata:/var/lib/postgresql/data -d registry.highgo.com/postgres/postgres:18.4-bookworm
aa42ab39ec930934befb825efa15e7b646af0cd3b84560c3ff5aba73818af60b
[root@openeuler-server ~]#

8.png

3.3 坑 ③:PostgreSQL 18+ 数据路径 Breaking Change

端口解决了,但容器还是没起来:

[root@openeuler-server ~]# docker ps | grep pg18
[root@openeuler-server ~]#

查看日志:

[root@openeuler-server ~]# docker logs pg184
Error: in 18+, these Docker images are configured to store database data in a
       format which is compatible with "pg_ctlcluster" (specifically, using
       major-version-specific directory names).

       Counter to that, there appears to be PostgreSQL data in:
         /var/lib/postgresql/data (unused mount/volume)

       The suggested container configuration for 18+ is to place a single mount
       at /var/lib/postgresql which will then place PostgreSQL data in a
       subdirectory...

9.png

🔍 根因分析:从 PostgreSQL 18 开始,官方 Docker 镜像**不再把数据存在 **/var/lib/postgresql/data,而是放在带版本号的新路径 /var/lib/postgresql/18/docker。你的挂载点 /var/lib/postgresql/data 是旧路径,PG 18 启动时发现路径对不上,直接报错退出。

✅ 解决方案:把挂载点从 /var/lib/postgresql/data 改为 /var/lib/postgresql:

[root@openeuler-server ~]# docker stop pg184
pg184
[root@openeuler-server ~]# docker rm pg184
pg184
[root@openeuler-server ~]# docker run --name pg184 -p 5433:5432 -e POSTGRES_PASSWORD='StrongPass456!!' -v pgdata:/var/lib/postgresql -d registry.highgo.com/postgres/postgres:18.4-bookworm
0ea9e62cd3d0f19a6a791914f2b946ca417ba7247556a4b8f56b3c851118e2ba
[root@openeuler-server ~]#

10.png

3.4 ✅ 终于启动成功

[root@openeuler-server ~]# docker ps | grep pg18
0ea9e62cd3d0   registry.highgo.com/postgres/postgres:18.4-bookworm   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp                                                        pg184
[root@openeuler-server ~]#

11.png

查看日志确认就绪:

[root@openeuler-server ~]# docker logs pg184 | tail -10
2026-06-27 09:56:43.153 UTC [1] LOG:  starting PostgreSQL 18.4 (Debian 18.4-1.pgdg12+1) on x86_64-pc-linux-gnu
2026-06-27 09:56:43.153 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2026-06-27 09:56:43.153 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2026-06-27 09:56:43.155 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2026-06-27 09:56:43.161 UTC [73] LOG:  database system was shut down at 2026-06-27 09:56:43 UTC
2026-06-27 09:56:43.170 UTC [1] LOG:  database system is ready to accept connections

12.png

🎉 看到 ready to accept connections,成了!

四、📦 生产环境 Docker Compose 编排

单机 run 命令适合临时测试,长期测试、准生产环境统一使用 Compose 管理,配置集中、扩容迁移更便捷。

4.1 新建编排工作目录

[root@openeuler-server ~]# mkdir -p /data/pg-compose
[root@openeuler-server ~]# cd /data/pg-compose
[root@openeuler-server pg-compose]#

13.png

4.2 docker-compose.yml 完整配置(适配 PG18.4)

[root@openeuler-server pg-compose]# vim docker-compose.yml

version: '3.8'
services:
  pg18:
    image: registry.highgo.com/postgres/postgres:18.4-bookworm
    container_name: pg18
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: PGtest@2026
      POSTGRES_DB: testdb
    # ⚠️ PG18+挂载根目录 /var/lib/postgresql,非 /data 子目录
    volumes:
      - ./pgdata:/var/lib/postgresql
    networks:
      pg_net:
networks:
  pg_net:
    driver: bridge

14.png

4.3 ⚠️ 启动报错又一个端口冲突

[root@openeuler-server pg-compose]# docker-compose up -d
Error response from daemon: Bind for 0.0.0.0:5432 failed: port is already allocated
[root@openeuler-server pg-compose]#

15.png

🔍 根因:Compose 模板里写的是 "5432:5432",直接和 IvorySQL 的 5432 端口冲突。调整为 "5435:5432" 即可。

4.4 修改 docker-compose.yml 完整配置(适配 PG18.4)

[root@openeuler-server pg-compose]# vim docker-compose.yml

version: '3.8'
services:
  pg18:
    image: registry.highgo.com/postgres/postgres:18.4-bookworm
    container_name: pg18
    restart: always
    ports:
      - "5435:5432"          # 宿主机5435,避开5432/5433占用
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: PGtest@2026
      POSTGRES_DB: testdb
    # ⚠️ PG18+挂载根目录 /var/lib/postgresql,非 /data 子目录
    volumes:
      - ./pgdata:/var/lib/postgresql
    networks:
      pg_net:
networks:
  pg_net:
    driver: bridge

16.png

4.5 修正后重新启动

[root@openeuler-server pg-compose]# docker-compose down
[+] Running 2/2
 ✔ Container pg18             Removed                                                0.0s
 ✔ Network pg-compose_pg_net  Removed                                                0.2s
[root@openeuler-server pg-compose]# vim docker-compose.yml   # 端口改为5435
[root@openeuler-server pg-compose]# docker-compose up -d
[+] Running 2/2
 ✔ Network pg-compose_pg_net  Created                                                0.2s
 ✔ Container pg18             Started                                                0.4s
[root@openeuler-server pg-compose]#

17.png

查看日志确认成功:

[root@openeuler-server pg-compose]# docker logs pg18 | grep "ready to accept"
2026-06-27 10:31:46.188 UTC [1] LOG:  database system is ready to accept connections

4.6 验证容器运行状态

[root@openeuler-server pg-compose]# docker ps | grep pg18
1d53e4097a3d   registry.highgo.com/postgres/postgres:18.4-bookworm   "docker-entrypoint.s…"   30 seconds ago   Up 29 seconds   0.0.0.0:5435->5432/tcp, :::5435->5432/tcp                                                        pg18
0ea9e62cd3d0   registry.highgo.com/postgres/postgres:18.4-bookworm   "docker-entrypoint.s…"   35 minutes ago   Up 35 minutes   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp                                                        pg184
[root@openeuler-server pg-compose]#

18.png

五、🔍 PostgreSQL 18.4 基础 CRUD 实操验证

容器日志输出 database system is ready to accept connections 代表数据库完全初始化完毕,直接进入容器完成版本校验与增删改查全流程验证。

5.1 进入数据库终端 & 版本校验

[root@openeuler-server pg-compose]# docker exec -it pg18 psql -U postgres
psql (18.4 (Debian 18.4-1.pgdg12+1))
Type "help" for help.

postgres=# select version();
                                                                 version
------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 18.4 (Debian 18.4-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
(1 row)

19.png

5.2 完整 CRUD 示例

-- 1. 创建测试业务表
CREATE TABLE test_user (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    age INT,
    create_time TIMESTAMP DEFAULT now()
);
postgres=# CREATE TABLE test_user (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    age INT,
    create_time TIMESTAMP DEFAULT now()
);
CREATE TABLE
postgres=#

20.png

-- 2. 新增多条测试数据
INSERT INTO test_user (username,age) VALUES
('zhangsan',24),
('lisi',28),
('wangwu',32);
postgres=# INSERT INTO test_user (username,age) VALUES
('zhangsan',24),
('lisi',28),
('wangwu',32);
INSERT 0 3
postgres=#

21.png

-- 3. 全表查询
SELECT * FROM test_user;
postgres=# SELECT * FROM test_user;
 id | username | age |        create_time
----+----------+-----+----------------------------
  1 | zhangsan |  24 | 2026-06-27 12:29:53.710586
  2 | lisi     |  28 | 2026-06-27 12:29:53.710586
  3 | wangwu   |  32 | 2026-06-27 12:29:53.710586
(3 rows)

22.png

-- 4. 条件更新数据
UPDATE test_user SET age=29 WHERE username='lisi';
postgres=# UPDATE test_user SET age=29 WHERE username='lisi';
UPDATE 1
postgres=#

23.png

-- 5. 确认更新结果
SELECT * FROM test_user;
postgres=# SELECT * FROM test_user;
 id | username | age |        create_time
----+----------+-----+----------------------------
  1 | zhangsan |  24 | 2026-06-27 12:29:53.710586
  3 | wangwu   |  32 | 2026-06-27 12:29:53.710586
  2 | lisi     |  29 | 2026-06-27 12:29:53.710586
(3 rows)

24.png

-- 6. 删除指定行数据
DELETE FROM test_user WHERE username='wangwu';
postgres=# DELETE FROM test_user WHERE username='wangwu';
DELETE 1
postgres=#

25.png

-- 7. 最终结果验证
SELECT * FROM test_user;
postgres=# SELECT * FROM test_user;
 id | username | age |        create_time
----+----------+-----+----------------------------
  1 | zhangsan |  24 | 2026-06-27 12:29:53.710586
  2 | lisi     |  29 | 2026-06-27 12:29:53.710586
(2 rows)

postgres=# \q
[root@openeuler-server pg-compose]#

26.png

六、📊 连接端口区分说明

部署方式外部连接端口数据库类型
IvorySQL 容器5432 / 1521IvorySQL 5.3
单机 run 部署5433PostgreSQL 18.4
Compose 部署5435PostgreSQL 18.4
# Compose 容器内免密登录(不受宿主机端口影响)
[root@openeuler-server pg-compose]# docker exec -it pg18 psql -U postgres
psql (18.4 (Debian 18.4-1.pgdg12+1))
Type "help" for help.

postgres=#

27.png

七、🧾 实测高频踩坑汇总(翻车记录)

坑 1:简写 Tag 直接拉取,提示镜像不存在

  • 现象:postgres:18.4 拉取失败
  • 解决:仓库内 PG 镜像的完整路径是 postgres/postgres,不是 postgres;且标签必须带 -bookworm 发行版后缀

坑 2:Shell 历史扩展 !! 导致命令错乱

  • 现象:密码带 !! 后命令被"展开",报 Unable to find image 'run:latest'
  • 解决:密码用单引号包起来,或用不带 ! 的密码

坑 3:端口 5432 被 IvorySQL 占用

  • 现象:Bind for 0.0.0.0:5432 failed: port is already allocated
  • 解决:换端口映射,如 5433:5432 或 5435:5432

坑 4:PG18+ 挂载路径变更

  • 现象:容器启动失败,日志提示 unused mount/volume
  • 解决:挂载 /var/lib/postgresql,不是 /var/lib/postgresql/data

坑 5:宿主机无 psql 客户端

  • 现象:-bash: psql: 未找到命令
  • 解决:统一用 docker exec -it pg18 psql -U postgres 进入容器

八、💭 实测体验客观点评

很多人觉得国内镜像只是单纯提速工具,其实对 PG 迁移场景价值更大:

✅ 优势:

  1. 一套仓库同时拥有 IvorySQL + 原生 PG 镜像,做 Oracle 语法兼容对比、数据库迁移评估不用切换镜像源,环境搭建效率翻倍;
  2. PG 18.4 同步最新社区内核修复,同步速度和海外 Docker Hub 差距极小,中小企业不用搭建私有镜像仓库;
  3. 镜像完全官方原生无二次修改,信创、政企测试环境合规,规避第三方镜像篡改风险。

总结

这次完整实测 registry.highgo 仓库 PostgreSQL 18.4-bookworm 镜像,整套流程从拉取、单机部署、生产 Compose 编排到排坑全部落地。

核心优势总结: 国内节点高速拉取、原生官方镜像安全合规、搭配 IvorySQL 一站式完成迁移对比测试。

实操重点提醒: 拉取镜像务必携带 -bookworm 后缀,必须挂载宿主机数据目录防止磁盘爆满,复制命令优先单行避免参数错乱。

📋 作者注

本文所有操作及测试均基于 openEuler 操作系统环境完成,核心围绕 IvorySQL 社区镜像仓库 registry.highgo.com 内 PostgreSQL 18.4-bookworm 兼容性验证展开。

请注意 IvorySQL 社区 PostgreSQL 镜像迭代较快,文中配置参数、命令行输出可能随新版本更新调整。生产部署前,请以 IvorySQL 官方文档、registry.highgo 仓库最新 Tag 清单为准。

以上仅为个人实践总结,不代表社区官方观点,文中命令、密码仅作演示,线上环境请自定义高强度密码。

癌症免疫治疗预测神器TIDE:从原理到实战(避坑指南) 本文详细解析了癌症免疫治疗预测工具TIDE的核心原理及实战应用。TIDE算法通过模拟肿瘤免疫逃逸的两种核心机制(T细胞功能障碍和排除),为临床决策提供精准预测。文章涵盖数据准备、标准化流程、网页工具操作指南及结果解读,帮助科研人员和临床医生避开常见误区,优化免疫治疗策略。 阅读详情

相关推荐

INMP441麦克风与ESP32的I2S音频采集实战指南

本文提供了INMP441数字麦克风与ESP32开发板通过I2S接口进行高质量音频采集的完整实战指南。详细讲解了硬件连接、软件配置、数据读取及基础处理,并分享了常见的避坑技巧与性能优化建议,帮助开发者快速构建物联网音频应用。

weixin_28396629的博客 599

IvorySQL 5.4 发布:升级 PostgreSQL 18.4,强化 AI 能力与云原生生态

2026 年 6 月 17 日,IvorySQL 社区正式发布。作为兼容 Oracle 的开源 PostgreSQL 数据库,IvorySQL 5.4 基于构建,带来了多项内核更新、功能增强和生态扩展,并进一步完善 AI、云原生部署以及数据库管理能力。

IvorySQL的博客 375

2025.06.17【WGS】|多样品VCF文件中每个样品SNP数统计方法详解(含代码与注释)

摘要:本文介绍了一种从合并后的VCF文件中统计每个样品SNP数目的方法。通过解析VCF文件中的GT字段,排除纯合参考(0/0)和缺失(./.)的基因型,准确计算各样本的SNP位点数。文中提供了完整的Python脚本,利用bcftools工具高效处理大规模VCF文件,并支持输出SNP统计结果。该方法适用于群体遗传学和RAD-seq等高通量测序数据分析的质控环节,还可扩展为统计杂合/纯合SNP等进阶需求。脚本使用简单,只需输入VCF文件即可生成样本-SNP数目的统计报表。

1701

从 PostgreSQL 升级至 IvorySQL 4.0

本文介绍了从 PostgreSQL 12.22 升级到 IvorySQL 4.0 的主要步骤,包括在 Rocky Linux 9 上安装 IvorySQL 4.0,以及将 PostgreSQL 12.22 中的数据迁移到 IvorySQL 4.0 的过程,通过备份和恢复的方式,可以顺利完成数据库的升级和迁移工作。在实际生产环境中,升级和迁移数据库是一个非常复杂的过程,需要考虑的因素较多。

IvorySQL的博客 1047

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9620

正负数据如何归一化_生信干货 | LC-MS代谢组学QI软件下机数据代谢物筛选和归一化如何做?...

上海·2019第一届多层组学前言技术发展华东区客户研讨会倒计时1天LC-MS非靶向代谢组学数据下机啦~~拿到一堆数据怎么办?不会高端代码,也不会自己写脚本,我怎么处理数据?​本期小编带来了LC-MS非靶向代谢组学下机数据处理实用干货,包括:下机定性结果表格的解析、代谢物筛选如何做?以及定量数据如何做归一化?实用干货,赶紧来抢~~话不多说,赶紧来学习吧~~非靶向LC-MS代谢组学的分析流程LC-MS...

weixin_36441329的博客 2985

IvorySQL 多模融合实战:pgvector + AGE + pg_textsearch 在同一实例中的协同验证

维度结论向量数据✅完全支持。通过 pgvector 扩展,支持 16000 维向量、HNSW/IVFFLAT 索引、多种距离算法,Oracle 兼容模式下可用。知识图谱✅完全支持。通过 Apache AGE 扩展,支持 openCypher、属性图、SQL 混合查询。适合中等规模知识图谱,超大规模建议专用图数据库。全文检索✅完全支持。多扩展方案(pg_textsearch/pg_bigm/PGroonga),覆盖 BM25、中日韩分词、模糊检索、混合搜索等场景。⚠️本文聚焦功能可行性验证。

IvorySQL的博客 404

C#串口通信从入门到精通(7)——整数/浮点数与二进制、八进制、十六进制之间的转换与C#实现

本文详细介绍由博主开发的DataConvert串口通信帮助类的用法,该帮助类涵盖了串口通信领域所有的数据转换方法,帮助大家快速编写串口通信程序!

qq_34059233的博客 2881

IvorySQL 5.3正式发布:基于PG 18.3内核的Oracle兼容与原生PG双轨实践

在开源数据库生态中,PostgreSQL一直是企业级应用的可靠基础,而如何将Oracle存量业务平滑迁移到开放架构,是许多技术团队长期关注的痛点。IvorySQL 5.3的正式发布,给出了一个值得研究的答案:它紧跟PG 18.3内核,通过深度兼容Oracle语义与原生PostgreSQL能力共生的双轨设计,让同一实例既能运行传统Oracle风格的包、层次查询和数据类型,又能调用PG原生的扩展与并行计算能力。从高并发大事务处理到复杂存储过程改写,这一版本在实际迁移场景中显著降低了SQL改写成本,也为数据库国产

weixin_32612263的博客 245

1、符号回归:原理、应用与实践

本文全面介绍了符号回归(Symbolic Regression)的原理、发展历程、核心算法及其在科学与工程领域的广泛应用。文章从基本概念出发,详细阐述了基于遗传编程的符号回归机制,并探讨了其在游艇水动力学、化学过程、锂离子电池、生物医学等多个领域的实际应用。同时,博文还涵盖了高级技术如知识集成、系数优化、预测区间计算及微分方程发现等内容,对比了开源与商业软件工具,并展望了未来发展趋势,旨在为研究人员和从业者提供一本实用的符号回归指南。

ipfs8storage的博客 249

大疆RoboMaster嵌入式面试,电机FOC调不出来当场走人

摘要:大疆RoboMaster嵌入式工程师面试以实战能力著称,重点考察FreeRTOS任务调度、FOC电机控制和CAN总线三大核心技能。FreeRTOS部分涉及优先级调度、栈溢出排查及信号量与互斥锁的区别;FOC控制要求现场编写电流环代码,并解释Clarke/Park变换原理;CAN总线则关注仲裁机制、CANopen协议应用及错误帧排查方法。面试强调工程实践,需具备STM32开发经验,建议搭建实际环境进行练习。该岗位被誉为"硬件版修罗场",充分体现大疆对实际开发能力的严格要求。

郑伟强dev的专栏 154

IvorySQL 5.3深度解析:基于PG 18.3内核的Oracle兼容与全场景实践

数据库内核升级是提升系统性能和扩展功能边界的关键技术路径。其核心原理在于集成上游社区的最新优化,如查询执行器增强、并行处理改进以及更智能的维护机制,从而在事务处理效率、资源利用率和可观测性上获得显著提升。对于企业级应用而言,这种底层跃迁的技术价值在于能够更稳定地支持高并发OLTP场景,并为复杂分析查询(OLAP)和混合负载(HTAP)提供更好的基础。特别是在需要从传统商业数据库(如Oracle)向开源体系迁移或寻求更高可控性的场景中,一个兼具最新内核能力与深度生态适配的发行版显得尤为重要。本文聚焦的Ivor

weixin_30298497的博客 335

【考试大纲】中级多媒体应用设计师考试大纲

中级多媒体应用设计师考试大纲

邓邓子的博客 382

IvorySQL 5.3基于PG 18.3内核,升级兼容性与运维体验

数据库内核是存储引擎、事务管理、查询优化器等底层机制的总和,直接决定SQL执行效率与系统稳定性。PostgreSQL 18.3内核在并行查询、I/O路径、资源管理和安全加密上均有显著增强,为高并发交易与分析型负载提供了更扎实的底座。IvorySQL 5.3正是基于这一内核构建,并强化了Oracle兼容层、分区表管理和运维诊断能力,配合pg_upgrade工具可平滑完成从旧版本或PG生态的迁移。无论是新建应用、存量系统改造,还是容器化部署,该版本都提供了一个更稳、更易用的数据库选型方案。

weixin_32325225的博客 294

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IvorySQL 5.3实测:基于PG 18.3内核,Oracle兼容与迁移实战

数据库内核是数据库稳定运行的核心,直接决定上层功能的可靠性与性能表现。在从Oracle迁移至PostgreSQL生态的过程中,兼容层的覆盖深度和稳定性成为降低改造风险的关键。基于PG 18.3内核的IvorySQL 5.3,在事务处理、锁竞争、执行计划优化等方面进行了增强,同时细化了对Oracle类型系统、数据字典和系统包的兼容行为,使存量应用迁移更加平滑。文章结合实测环境,解析了内核升级带来的性能提升,并针对物理机、容器、高可用及国产化部署场景给出实践建议,为数据库选型与升级提供参考。

weixin_33552698的博客 357

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

两个月了,第一批IvorySQL布道者已出炉!

6 月末,IvorySQL 社区正式发起了。我们初衷很简单:不搞硬核门槛、不用全职投入,给所有热爱开源、喜欢折腾技术的小伙伴,一个业余参与社区、展示自己、收获专属福利的平台。该计划发布后,立刻吸引了三十多位小伙伴参与。转眼两个月过去了,成果如何呢?先公布结果:已经有 12 位小伙伴达到了 100 积分,迈过了布道者门槛,成为 IvorySQL 第一批官方认证布道者!他们分别是:尚雷,尹海文,杨向博,德哥,杨宇,付超,张晨,葛云杰,魏波,严少安,崔鹏,马顺华。

IvorySQL的博客 172

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IvorySQL 5.3发布:基于PostgreSQL 18.3内核的企业级增强与全场景适配

关系型数据库作为现代应用的核心数据存储引擎,其核心价值在于通过ACID事务、SQL标准接口和可扩展架构,为业务提供稳定、一致的数据服务。其工作原理围绕存储管理、查询优化和并发控制等模块协同,确保数据安全与高效访问。在技术价值层面,一个优秀的数据库系统能显著降低开发复杂度,提升应用性能与可靠性。随着云原生和国产化趋势的深入,数据库技术正朝着全场景适配、深度性能优化和增强安全合规的方向演进。IvorySQL 5.3正是这一趋势下的代表性产品,它基于PostgreSQL 18.3内核,在完全兼容原生生态的同时,针

weixin_30835649的博客 369

深度拆解 IvorySQL 去 O 核心解决方案

本文整理于 HOW 2026 矫顺田演讲内容。

IvorySQL的博客 362

fast-lio2复现跑avia数据集

本文详细介绍了在Windows WSL2中安装Ubuntu 22.04并配置ROS2 Humble环境的全过程,涵盖系统初始化、ROS2安装、Livox雷达驱动编译及FAST-LIO2 ROS2版本的构建与验证。通过完整数据集回放与建图测试,成功实现点云地图生成与轨迹记录,并利用evo工具完成轨迹分析与可视化。最终输出包括累积点云地图、位姿轨迹及实验配置文件,为后续精度评估与复现提供基准。

chase_my_dream的博客 369

linux学习

sudo make install:组装好的家具(编译好的库文件),原本放在你的临时工作区。坏处是,你的程序体积会变大。于是,他会根据你的计划书,结合你电脑的当前情况(比如装了什么编译器,库在哪),生成一本极度详细的《施工进度表》。很多大牌的第三方库(比如你刚装的 libevent)为了照顾不同的需求,会同时提供动态库(.so)和静态库(.a),但并不是所有库都这样。只有动态库:常见于系统的核心库(比如你系统的底层 C 库),或者一些商业闭源软件(厂商只给你一个黑盒子,不让你直接把代码打包进你的程序)。

d_mail的博客 194

ubuntu 偶发启动失败问题分析

ubuntu 系统启动偶发异常问题分析

平面到立体 193

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 477

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 432

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 250

C++算法(七)

C++ stack算法题和一些客观题

2503_94479566的博客 378

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 294
上一篇: PG 日报|新增 VFD 缓存监控视图,精细化数据库调优
下一篇: PG 日报|新增 VACUUM 全维度统计信息补丁迭代
IvorySQL
博客等级 码龄5年 745粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值