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

试用一个用v语言编写的单文件数据库vsql

这是从v语言官网https://vlang.io/看到的,觉得好奇,拿来用用。
1.安装
两种方式,一种下载二进制文件。下载页面:https://github.com/elliotchance/vsql/releases。
另一种是从源代码编译,既可以从上述页面下载源代码压缩包,也可以用git命令获取,
用Git获取并编译的步骤

mkdir vsql
cd vsql
git clone --depth=1 https://gitclone.com/github.com/elliotchance/vsql
Cloning into 'vsql'...
remote: 对象计数中: 366, 完成.
remote: 压缩对象中: 100% (328/328), 完成.
remote: Total 366 (delta 32), reused 366 (delta 32)
Receiving objects: 100% (366/366), 1.36 MiB | 124.00 KiB/s, done.
Resolving deltas: 100% (32/32), done.
#把v软件的安装目录加入路径
export PATH=$PATH:/par/v
#直接用make会出错
make
rm -f vsql/y.v vsql/y.y
./scripts/generate-grammar.vsh
v run scripts/vyacc.v -o vsql/y.v vsql/y.y./scripts/generate-v-client-library-docs.vsh > docs/v-client-library-docs.rst
scripts/generate-v-client-library-docs.vsh:8:1: builder error: cannot import module "v.doc" (not found)6 | // Run from the repo root: $ ./scripts/generate-v-client-library-docs.vsh7 | //8 | import v.doc| ~~~~~~~~~~~~9 |10 | fn get_sym_name(dn doc.DocNode) string {
make: *** [Makefile:48: snippets] Error 1
#按照文档说明,用下列命令行编译成功
root@6ae32a5ffcde:/par/vsql/vsql# make bin/vsql
mkdir -p bin
v  -prod cmd/vsql -o bin/vsql

其实官方还提供第三种安装方式,docker, 不过我没有试验成功。

#拉取镜像没有问题
docker pull docker.1ms.run/elliotchance/vsql:latest
Trying to pull docker.1ms.run/elliotchance/vsql:latest...
Getting image source signatures
Copying blob f7dab3ab2d6e done
Copying blob 3f49170c93cc done
Copying blob 2572326293b5 done
Copying config acdd00709b done
Writing manifest to image destination
Storing signatures
acdd00709b59885c090a82eaf2d27b7914cedcb887ae53b32605dd4477fd475e#运行报错
docker run -it docker.1ms.run/elliotchance/vsql:latest cli mydb.vsql
GC Warning: getcontext failed: using another register retrieval method...

2.运行
(1)CLI方式
和sqlite等单机数据库类似,可以看到,对SQL语法要求比较严格。varchar必须指定长度,insert表必须写明列名。

./vsql cli test.vsql
no version information availablevsql> select * from foo;
Error 42P01: no such table: "test".PUBLIC.FOOvsql> create table foo(a int,b varchar);
Error 42601: syntax error: unexpected ")", expecting "("vsql> create table foo(a int,b varchar(10));
msg: CREATE TABLE 1
1 row (5 ms)vsql> insert into foo select 1,'abc';
Error 42601: syntax error: unexpected SELECT, expecting "("vsql> insert into foo values(1,'abc');
Error 42601: syntax error: unexpected VALUES, expecting "("vsql> insert into foo(a,b) values(1,'abc');
msg: INSERT 1
1 row (7 ms)vsql> select * from foo;
A: 1 B: abc
1 row (5 ms)

奇怪的是,在Windows上,同样的命令失败了

C:\d>vsql cli test.vsql
no version information availablevsql> create table foo(a int,b varchar(10));
ERROR: cannot acquire lock: cannot create lock file test.vsql.lock

(2)服务器方式
虽然vsql可执行文件很小,它却能当服务器,就成了C/S架构的数据库。

#直接按文档写是不行的./vsql server
Command `server` needs at least 1 argument#必须指定一个数据库名
./vsql server test.vsql
no version information available
ready on 127.0.0.1:3210

可以另开一个终端,用postgresql的命令行客户端psql来连接, 可以查到刚才插入的数据。

psql -h 127.0.0.1 -p 3210
psql (15.13 (Debian 15.13-0+deb12u1), server 0.0.0)
WARNING: psql major version 15, server major version 0.0.Some psql features might not work.
Type "help" for help.root=> select * from foo;A |  B
---+-----1 | abc
(1 row)

同时服务器端会显示日志, 这是超时退出了。

v hash:| 0x4e2732 | ./vsql()| 0x43ca6c | ./vsql()| 0x43c608 | ./vsql()
:?:                                                     | 0x4d402e | ./vsql()| 0x403946 | ./vsql()| 0x7fef6f25824a | /lib/x86_64-linux-gnu/libc.so.6(+0x2724a)| 0x7fef6f258305 | /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x85)| 0x403981 | ./vsql()

这个功能在windows上也不能用

C:\d>vsql server -v test.vsql
no version information available
V panic: cannot acquire lock: cannot create lock file test.vsql.lock
v hash: 7b9b3dd
print_backtrace_skipping_top_frames is not implemented

简单测试,只能说是个数据库原型而已。

http://www.dtcms.com/a/319645.html

相关文章:

  • RepoCoder:仓库级代码补全的迭代检索生成框架解析与应用前沿
  • 【FreeRTOS】(号外)任务间通讯2: 信号量- Counting Semaphore
  • NFS 服务器与iSCSI 服务器
  • USB枚举介绍 以及linux USBFFS应用demo
  • centos安装python、uv
  • Python包与虚拟环境工具全景对比:从virtualenv到uv的演进
  • python中用xlrd、xlwt读取和写入Excel中的日期值
  • python 常用条件判断语句用法
  • day44 力扣1143.最长公共子序列 力扣1035.不相交的线 力扣53. 最大子序和 力扣392.判断子序列
  • 关于时钟门控ICG的一切(与门及或门门控)
  • [论文阅读] 人工智能 + 软件工程 | 大型语言模型与静态代码分析工具:漏洞检测能力大比拼
  • 分布式事务与分布式锁
  • PCB布线
  • 大队列CT胰腺癌PANDA 模型 医生结合AI后,病灶检测灵敏度提升 8.5%,胰腺癌识别灵敏度提升 20.5%,住院医师性能接近专家水平
  • 补充一种激活函数:GeGLU
  • 关于AI应用案例计算机视觉、自然语言处理、推荐系统和生成式AI四大领域的详细技术分析。
  • 数学建模——粒子群算法
  • Gradle 全解析:Android 构建系统的核心力量
  • JavaScript构建工具
  • CSS overscroll-behavior:解决滚动穿透的 “边界控制” 专家
  • 《Day3-PyTorch 自动微分入门:从计算图到梯度下降的实践指南》
  • Redis中间件(三):Redis存储原理与数据模型
  • Dokcer创建中间件环境
  • LeetCode:347.前K个高频元素
  • 手写数字识别实战 - 从传统机器学习到深度学习
  • 13-netty基础-手写rpc-消费方生成代理-05
  • Qt——入门
  • 数据赋能(386)——数据挖掘——迭代过程
  • Spring、Spring MVC、MyBatis 和 Spring Boot的关系
  • Ethereum:如何优雅部署 NPM 包中的第三方智能合约?