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

试用一个用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.xdnf.cn/news/17187.html

相关文章:

  • 计算机视觉--opencv(代码详细教程)
  • 投资股票心态
  • Swift 实战:高效设计 Tic-Tac-Toe 游戏逻辑(LeetCode 348)
  • 微算法科技(NASDAQ:MLGO)利用集成学习方法,实现更低成本、更稳健的区块链虚拟货币交易价格预测
  • 软件运行时 ffmpeg.dll 丢失怎么办?从原因排查到完美修复的完整方案
  • 开源大模型实战:GPT-OSS本地部署与全面测评
  • [失败记录] 使用HBuilderX创建的uniapp vue3项目添加tailwindcss3的完整过程
  • 前端三大核心要素以及前后端通讯
  • VBA之Word应用第四章第一节:段落集合Paragraphs对象(一)
  • 告别复杂配置!cpolar让Prometheus监控突破网络限制
  • 在新建word中使用以前文件中的列表样式
  • 使用nvm管理多个node版本(附安装教程)
  • Mac+Chrome滚动截图
  • windows内核研究(内存管理-线性地址的管理)
  • 前端百分比展示导致后端 BigDecimal 转换异常的排查与解决
  • 【数据库】如何从本地电脑连接服务器上的MySQL数据库?
  • 第二集 测试概念
  • 3a服务器的基本功能1之身份认证
  • 【ee类保研面试】数学类---概率论
  • 嵌入式硬件学习(十一)—— platform驱动框架
  • 基于 HT 引擎实现 3D 智慧物流转运中心一体化管控系统
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的用户留存策略研究
  • 计算机基础·linux系统
  • 解决Git提交人信息默认全局化问题:让提交人自动关联当前用户
  • 阿里云部署若依后,浏览器能正常访问,但是apifox和小程序访问后报错链接被重置
  • 【保姆级喂饭教程】python基于mysql-connector-python的数据库操作通用封装类(连接池版)
  • 动态代理常用的两种方式?
  • 大疆无人机使用eport连接Jetson主板实现目标检测
  • 异构系统数据集成之数据源管理:打通企业数据孤岛的关键一步
  • TDengine IDMP 背后的技术三问:目录、标准与情景