试用支持postgresql wire协议的duckdb服务器duckgres

存储库地址 https://github.com/PostHog/duckgres/

  1. 下载二进制文件

    wget https://github.com/PostHog/duckgres/releases/download/build-0043e82/duckgres-linux-arm64 -c

在kylin v10中执行报错

复制代码
chmod +x duckgres-linux-arm64
./duckgres-linux-arm64
./duckgres-linux-arm64: /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by ./duckgres-linux-arm64)
./duckgres-linux-arm64: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by ./duckgres-linux-arm64)
./duckgres-linux-arm64: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ./duckgres-linux-arm64)
./duckgres-linux-arm64: /lib/aarch64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.13' not found (required by ./duckgres-linux-arm64)
./duckgres-linux-arm64: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./duckgres-linux-arm64)
./duckgres-linux-arm64: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./duckgres-linux-arm64)

系统libc等动态库版本太低。

用gcc 14.2 的docker容器来执行。

复制代码
sudo docker start gcc142

sudo docker exec -it gcc142 bash
cd /par
./duckgres-linux-arm64
./duckgres-linux-arm64: /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by ./duckgres-linux-arm64)

libm动态库版本还是不够高。

再用gcc 15.2的docker容器来执行。

复制代码
sudo docker run -itd -v /home/par:/par --network host --name gcc152 docker.1ms.run/gcc:15.2
afb66b3c7b8e92c47cf2d60a96a34e9fb4ac6147dd0ef054f4f18e7971b4452a
sudo docker exec -it gcc152 bash
cd /par
./duckgres-linux-arm64
PostHog logging disabled (POSTHOG_API_KEY not set)
time=2026-04-23T01:07:34.358Z level=INFO msg="Starting metrics server" addr=:9090
time=2026-04-23T01:07:34.362Z level=INFO msg="Using TLS certificates" cert_file=./certs/server.crt key_file=./certs/server.key
time=2026-04-23T01:07:34.362Z level=INFO msg="TLS enabled." cert_file=./certs/server.crt
time=2026-04-23T01:07:34.362Z level=INFO msg="Rate limiting enabled." max_failed_attempts=5 window=5m0s ban_duration=15m0s
time=2026-04-23T01:07:34.362Z level=INFO msg="Idle timeout enabled." timeout=24h0m0s
time=2026-04-23T01:07:34.363Z level=INFO msg="Starting Duckgres server (TLS required)" version=build-0043e82 host=0.0.0.0 port=5432

可以启动服务端了。但是用DBeaver 的postgresql驱动去连接,报如下错误

复制代码
The server requested password-based authentication, but no password was provided by plugin null

没法登录。

在存储库的"packages"中找到了官方的docker镜像,

  1. 拉取镜像, 打上简单的标签

    docker pull ghcr.io/posthog/duckgres:f9f5f0a30fd801cae7b4198b3276636e870a6a42

    docker tag ghcr.io/posthog/duckgres:f9f5f0a30fd801cae7b4198b3276636e870a6a42 duckgres:dev

  2. 运行容器

    docker run -itd -v /mnt/c/d:/par --network host --name duckgres duckgres:dev
    eb3b126f6fc12942147826398cf087c1853f5b0af0d0afb5729a546ee0601b3c

容器中也没有psql客户端,只有duckdb的插件。

复制代码
docker exec -it duckgres bash
duckgres@DESKTOP-59T6U68:~$ psql
bash: psql: command not found


duckgres@DESKTOP-59T6U68:~$ ls
certs  data  duckgres  extensions
duckgres@DESKTOP-59T6U68:~$ ls -l
total 187192
drwxr-xr-x 1 duckgres duckgres      4096 Apr 23 11:17 certs
drwxr-xr-x 1 duckgres duckgres      4096 Apr 23 11:17 data
-rwxr-xr-x 1 duckgres duckgres 191666944 Apr 22 21:25 duckgres
drwxr-xr-x 1 duckgres duckgres      4096 Apr 22 21:25 extensions
duckgres@DESKTOP-59T6U68:~$ cd extensions
duckgres@DESKTOP-59T6U68:~/extensions$ ls
v1.5.2
duckgres@DESKTOP-59T6U68:~/extensions$ cd v1.5.2
duckgres@DESKTOP-59T6U68:~/extensions/v1.5.2$ ls
linux_amd64
duckgres@DESKTOP-59T6U68:~/extensions/v1.5.2$ cd linux_amd64
duckgres@DESKTOP-59T6U68:~/extensions/v1.5.2/linux_amd64$ ls
ducklake.duckdb_extension  httpfs.duckdb_extension  json.duckdb_extension  postgres_scanner.duckdb_extension
duckgres@DESKTOP-59T6U68:~/extensions/v1.5.2/linux_amd64$

启动duckgres服务器,发现已经启动了。

利用宿主机上的psql连接,指定localhost,成功了。

复制代码
psql -U postgres -d postgres -h localhost
Password for user postgres:
psql (14.22 (Ubuntu 14.22-0ubuntu0.22.04.1), server 15.0 (Duckgres))
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, bits: 128, compression: off)
Type "help" for help.

postgres=>
postgres=> \timing on
Timing is on.
postgres=> select * from range(1,4);
 range
-------
     1
     2
     3
(3 rows)

Time: 32.571 ms


postgres=> select sum(i) from generate_series(1,100000000)t(i);
      sum(i)
------------------
 5000000050000000
(1 row)

Time: 114.346 ms

用duckdb独有的range函数试验,没问题。

再用1亿行generate_series测试,很快。

相关推荐
莽撞的大地瓜4 分钟前
政企舆情大数据服务平台:新浪舆情通以技术赋能全流程管理
大数据·数据库·数据分析
weixin_459753949 分钟前
c++如何利用filesystem--relative计算两个文件之间的相对路径【详解】
jvm·数据库·python
fpcc11 分钟前
Linux命令——lsof分析说明
linux·服务器
阿福聊编程16 分钟前
Data-Analysis-Agent:用自然语言查数据库的开源 AI 数据分析工具
数据库·人工智能
行业研究员21 分钟前
2026 Agent Memory主流方案能力解析与落地选型
大数据·数据库·agent记忆
m0_5967490923 分钟前
Golang怎么实现队列数据结构_Golang如何用切片实现先进先出的队列【方法】
jvm·数据库·python
qq_2975746728 分钟前
MySQL核心技术实战系列(第二篇):MySQL核心基础:库与表的增删改查(CRUD)实战
数据库·mysql
m0_5913647330 分钟前
如何编写带默认值的SQL存储过程_简化前端调用接口设计
jvm·数据库·python
iAm_Ike31 分钟前
如何处理SQL存储过程存储过程循环陷阱_优化逻辑结构
jvm·数据库·python
Jetev33 分钟前
MySQL实现跨库在线迁移的方法_利用Binlog实时数据同步工具
jvm·数据库·python