在网上看到韩国公司开发的一款GooseDB,

官方网站对它的介绍是DuckDB™ 的功能扩展分支,具有服务器/客户端、多会话和并发写入支持,使用 PostgreSQL 有线协议(DuckDB™是 DuckDB 基金会的商标)

使用也很简单,从下载网页下载相应平台二进制文件启动服务端,

C:\d\goosedb>goosedb start
{"level":"info","msg":"===== GooseDB Freeware(For Non-Commercial Use Only) [read_write] ===== valid until: 2027-06-24 08:00:00 +0800 CST, owner: AnyBody =====","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"MaxConnections = 10","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"DuckDB !!read_write!! Mode)","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"SET ieee_floating_point_ops = false","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"SET autoload_known_extensions=1","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"SET preserve_insertion_order = false","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"ATTACH ':memory:' as memdb","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"LOAD parquet","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"LOAD json","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"GooseDB v1.3.1.1 (DuckDB v1.3.1) build_date:2025-06-22","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"goosedb listening on 0.0.0.0:1234","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"restapi listening on 0.0.0.0:5678","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"db-file: data\\goosedb.ddb, cfg-file: conf\\goosedb.cfg","time":"2025-09-13T18:30:10+08:00"}
{"level":"info","msg":"SET ieee_floating_point_ops = false","time":"2025-09-13T18:40:47+08:00"}
{"level":"info","msg":"SET autoload_known_extensions=1","time":"2025-09-13T18:40:47+08:00"}
{"level":"info","msg":"SET preserve_insertion_order = false","time":"2025-09-13T18:40:47+08:00"}

从启动日志能看出它的默认数据文件和配置文件,可以参考文档修改。
用psql客户端连接即可。

\d\pg18\bin\psql -h 127.0.0.1 -U gooseadmin -d goosedb -p 1234
用户 gooseadmin 的口令:psql (18beta1, 服务器 16.9)
输入 "help" 来获取帮助信息.goosedb=> select version();version                                                      
-----------------------------------------------------------------------------------------------------------------------------PostgreSQL 16.9 - (GooseDB 1.3.1.1) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-22), 64-bit
(1 行记录)goosedb=> create table t as select * from generate_series(1,10000000)t(i);
CREATE
goosedb=> \timing on
启用计时功能.
goosedb=> select count(*) from t group by round(log(i));count_star()
--------------28528466837723284605328460502846028
(8 行记录)时间:32.029 ms

从1000万数据的分组性能来看,和DuckDB没有区别。
打开另一个客户端

\d\pg18\bin\psql -h 127.0.0.1 -U gooseadmin -d goosedb -p 1234
用户 gooseadmin 的口令:psql (18beta1, 服务器 16.9)
输入 "help" 来获取帮助信息.goosedb=> select count(*) from t;count_star()
--------------10000000
(1 行记录)goosedb=> select count(*) from '\d\yellow_tripdata_2021-01.parquet';count_star()
--------------1369769
(1 行记录)

确实能访问前一个会话的内容,也能访问客户端本地的文件。

事务处理
在第一个客户端建立一个带有默认时间戳列的表,在另一个客户端分别启用和不用事务操作它。
客户端1

C:\d>\d\pg18\bin\psql -h 127.0.0.1 -U gooseadmin -d goosedb -p 1234
用户 gooseadmin 的口令:psql (18beta1, 服务器 16.9)
输入 "help" 来获取帮助信息.goosedb=> create table t2 (ts timestamp default current_localtimestamp(), a int);
CREATE
goosedb=> insert into t2(a) values(1);
INSERT 0 1
goosedb=> from t2;ts            | a
-------------------------+---2025-09-14 08:18:39.386 | 1
(1 行记录)goosedb=> select *,current_localtimestamp() c from t2;ts            | a |            c
-------------------------+---+-------------------------2025-09-14 08:18:39.386 | 1 | 2025-09-14 08:20:42.7042025-09-14 08:20:17.458 | 2 | 2025-09-14 08:20:42.704
(2 行记录)goosedb=> select *,current_localtimestamp() c from t2;ts            | a |            c
-------------------------+---+-------------------------2025-09-14 08:18:39.386 | 1 | 2025-09-14 08:22:00.0492025-09-14 08:20:17.458 | 2 | 2025-09-14 08:22:00.049
(2 行记录)goosedb=> select *,current_localtimestamp() c from t2;ts            | a |            c
-------------------------+---+-------------------------2025-09-14 08:18:39.386 | 1 | 2025-09-14 08:25:37.7862025-09-14 08:20:17.458 | 2 | 2025-09-14 08:25:37.7862025-09-14 08:21:37.85  | 3 | 2025-09-14 08:25:37.7862025-09-14 08:21:37.85  | 4 | 2025-09-14 08:25:37.786
(4 行记录)

客户端2

C:\Users\lt>\d\pg18\bin\psql -h 127.0.0.1 -U gooseadmin -d goosedb -p 1234
用户 gooseadmin 的口令:psql (18beta1, 服务器 16.9)
输入 "help" 来获取帮助信息.goosedb=> from t2;ts            | a
-------------------------+---2025-09-14 08:18:39.386 | 1
(1 行记录)goosedb=> insert into t2(a) select 2;
INSERT 0 1
goosedb=> BEGIN TRANSACTION;
BEGIN
goosedb=*> insert into t2(a) select 3;
INSERT 0 1
goosedb=*> from t2;ts            | a
-------------------------+---2025-09-14 08:18:39.386 | 12025-09-14 08:20:17.458 | 22025-09-14 08:21:37.85  | 3
(3 行记录)goosedb=*> select current_localtimestamp() c;c
------------------------2025-09-14 08:21:37.85
(1 行记录)goosedb=*> insert into t2(a) select 4;
INSERT 0 1
goosedb=*> from t2;ts            | a
-------------------------+---2025-09-14 08:18:39.386 | 12025-09-14 08:20:17.458 | 22025-09-14 08:21:37.85  | 32025-09-14 08:21:37.85  | 4
(4 行记录)goosedb=*> commit;
COMMIT
goosedb=>

可见默认不启用事务,插入数据即提交,一个客户端的修改立刻被另一个看到,而启用事务后,在显式提交前,其他客户端看不到修改。
有一点不太明白,启用事务后,时间仿佛停止了,插入第一条后又过了若干时间,select current_localtimestamp() c;的值和插入第一条的时间一模一样。查看DuckDB文档知道,

current_localtimestamp()
Description Returns the current timestamp with time zone (at the start of the transaction).

它返回的是事务开始时间。

在psql客户端上,在事务中,提示符前有一个*符号提示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/98224.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/98224.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/98224.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lesson62:JavaScript对象进化:ES2025新特性深度解析与实战指南

目录 一、迭代器辅助方法:对象数据处理的优雅革命 1.1 核心方法与语法 1.2 对象属性处理实战 1.3 性能与兼容性考量 二、JSON模块原生支持:对象加载的范式转变 2.1 静态与动态导入语法 2.2 与传统方案的对比优势 2.3 典型应用场景 三、Set集合增…

设计模式学习笔记(一)

设计模式学习笔记(一) 一般说设计模式都是指面向对象的设计模式,因为面向对象语言可以借助封装、继承、多态等特性更好的达到复用性、可拓展性、可维护性。 面向对象一般指以类、对象为组织代码的基本单元,并将封装、继承、多态、…

【CSS】一个自适应大小的父元素,如何让子元素的宽高比一直是2:1

父元素是自适应大小的容器(比如 width:100%),我们希望子元素 始终保持 2:1 宽高比(比如宽 200px → 高 100px,宽 300px → 高 150px)。 有几种常见解法:✅ 方法一:CSS aspect-ratio&…

如何搭建redis集群(docker方式非哨兵)

1、redis的配置文件这里要注意,主从的ip不需要我们去设置,只需要设置主从的密码就可以,然后就是protect-mode,我设置的是no,一定注意不能设置主从。客户端要访问,一定要加# 每个节点的 redis.conf 中 clust…

如何学习VBA_3.3.9:利用“搭积木”思想,快速有效地完成你的代码

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。如果您…

JSP程序设计之输入/输出对象 — response对象

response对象1.概述2.实例:response对象方法运用(1)实例一:页面自动刷新(2)实例二:实现页面重定向,具体的代码(3)综合实例:实现登录并记录用户名1…

Redis 事件驱动框架(ae.c_ae.h)深度解析

Redis 事件驱动框架(ae.c/ae.h)深度解析 之前咱们用 “超市收银员” 的例子,简单看懂了 ae 模块是 Redis 的 “多任务神器”。现在咱们再往深走一层,不用复杂代码,只拆它的 “核心运作逻辑”—— 搞懂它怎么做到 “一个…

[能源化工] 面向锂电池RUL预测的开源项目全景速览

锂离子电池是新能源汽车、储能系统及便携式电子设备的核心能源部件,其剩余使用寿命(Remaining Useful Life,RUL)的准确预测直接关系到设备运行安全、维护成本优化和能源效率提升。RUL预测算法能够提前量化电池剩余可用时间&#x…

PEFT QLora Deepspeed Zero Stage 3 Offload Trainning

使用 accelerate deepspeed zero stage 3 offload 进行 sft trainning 的自动设备映射: GPU 训练计算 CPU 存储 run_peft_qlora_deepspeed_stage3.sh #!/bin/bashexport MAX_JOBS4 export OMP_NUM_THREADS4 export disable_exllamaTrue export CUDA_VISIBLE_DEVICES0,1 expor…

JAVA上门家政维修服务系统源码微信小程序+微信公众号+APP+H5

一、功能介绍用户端:精准分类、支持家政、维修、万能服务、一口价、报价、线上、各类家政服务、优惠专区、师傅入驻、商家入驻、我的需求、补费明细、我的投诉;师傅端:接单池、消息通知、接单管理、今日订单、师傅入驻、我的钱包、实名认证&a…

GCKontrol对嵌入式设备FPGA设计流程的高效优化

1 前言FPGA(Field-Programmable Gate Array,现场可编程逻辑门阵列)是一种可编程的半导体器件,因其硬件可重构性、硬件并行计算能力、低延迟和实时性的优势,广泛应用于数字电路设计、原型验证和系统加速等领域。但开发…

DBAPI免费版对比apiSQL免费版

DBAPI简介 零代码开发api服务,只需编写sql,就可以生成http api服务。支持api动态创建,兼容多种数据库。 适用于BI报表、数据可视化大屏的后端接口快速开发。 旨在为企业数据服务的发布提供完整解决方案 一、DBAPI免费版本支持1个数据源连接支…

CTFHub SSRF通关笔记8:数字IP Bypass 原理详解与渗透实战

目录 一、SSRF 二、数字IP原理 1、IP多进制 (1)十进制整数格式 (Dword / 长整数格式) (2)八进制格式 (Octal IP) (3)十六进制格式 (Hex IP) 2、SSRF绕过 三、渗透实战 1、打开靶场 2、尝试127.0.…

C++中双引号和单引号的区别(全面分析)

我在刷算法题的时候经常遇到,用了 出现警告或者使用" "直接报错,尤其是在字符串部分(py玩家后遗症/(ㄒoㄒ)/~~)在详细了解后总结一下加强记忆。 总的来说在 C 中,双引号 "" 和单引号 是完全不同…

Ubuntu20.04仿真 |iris四旋翼添加云台相机详述

申明: 1、本人使用的是Ubuntu20.04ros1gazeboxtdronepx4的仿真组合 2、为了使传感器模型和飞机模型解耦合,实现不同平台对传感器可直接调用,本系列博文涉及的所有传感器均不直接添加在相应平台的sdf当中,而是通过编写xxx_joint.…

《人工智能AI之机器学习基石》系列 第 16 篇:关联规则与数据挖掘——“啤酒与尿布”传奇背后的增长秘密

《人工智能AI之机器学习基石》⑯ 专栏核心理念: 用通俗语言讲清楚机器学习的核心原理,强调“洞察+ 技术理解 + 应用连接”,构建一个完整的、富有启发性的知识体系。 引言:藏在购物车里的“读心术” 朋友们,欢迎回到我们的AI基石之旅。 在过去的两次探索中,我们深入…

Spring Boot 的自动配置原理

Spring Boot 的自动配置是其 "约定大于配置" 理念的核心实现,它能自动配置 Spring 应用所需的各种组件,大幅减少手动配置。下面从核心注解、加载流程、条件过滤等方面详细讲解其原理,并结合关键源码说明。一、自动配置的入口&#…

谷歌云平台(Google Cloud Platform, GCP)介绍(全球领先的云计算服务平台,为企业和开发者提供包括计算、存储、数据分析、人工智能、机器学习、网络和安全等在内的全面云服务)

文章目录**1. GCP的核心优势****1.1 全球领先的基础设施****1.2 强大的数据分析和人工智能能力****1.3 卓越的安全性和合规性****1.4 灵活的定价模式****2. GCP的主要服务****2.1 计算服务****2.2 存储和数据库****2.3 网络服务****2.4 人工智能与大数据****2.5 安全与管理工具…

RISC-V异常机制和异常定位

不少人在调试RISC-V core时,面对异常的出现不知所措,不知道如何定位代码问题。这里将从RISC-V异常机制以及几个异常实例学习下。 1 异常机制 1.1 什么是异常 异常是软件程序员不得不要深入了解的,首先在学习异常机制前,对异常要…

c++中导出函数调用约定为__stdcall类型函数并指定导出函数名称

开发环境在Visual studio 2022版本下,为防止编译器重命名函数名称(会加上8等等乱七八糟的东西),我们对函数名称进行指定:一、新建.def文件,名称须与dll名称相同,并放在与cpp文件相同文件夹下&am…