Go编译usql连接达梦
根据项目现场用户需求,需要在无法连接外网的服务器上面使用usql(universal command-line interface for SQL databases)。usql提供了一种使用SQL和NoSQL数据库的简单方法,灵感来自PostgreSQL的psql。Usql支持大多数核心PSQL功能,如变量、反引号、和命令,并具有PSQL不具备的其他特性,例如语法高亮显示、基于上下文完成,并支持多个数据库。但是从github下载已编译好的usql-0.19.19-linux-amd64.tar.bz2,在解压后获取到的usql对于GLIBC版本要求较高,经常无法直接使用,而使用源码编译时也会报错缺少较多依赖。因此考虑在可以联网的环境中,使用go install自动下载需要的依赖并完成编译,之后再将编译好的usql拷贝到对应内网环境使用,较为方便。
分别访问https://github.com/xo/usql/releases和https://golang.google.cn/dl/,确认想要安装的usql及Go版本信息,便于后续联网安装部署。
先确认需要安装的usql版本后,再根据源码下的go.mod文件确认所需要的Go版本。
本次安装部署的版本为usql v0.19.19、go1.24。
[dmdba@dw02~]$ wget https://golang.google.cn/dl/go1.24.1.linux-amd64.tar.gz
--解压到当前路径的go目录下
[dmdba@dw02 ~]$ tar -zxvf go1.24.1.linux-amd64.tar.gz
--配置环境变量,建议将go的bin路径放在原先环境变量的第一位,避免已有的go版本影响后续使用
[dmdba@dw02 ~]$ vi ~/.bash_profile
[dmdba@dw02 ~]$ cat ~/.bash_profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dmdba/dmdbms_4_48/bin
export PATH=/home/dmdba/go/bin:/home/dmdba/dmdbms_4_48/bin:$PATH
默认存放在$HOME/go/bin目录下,也可以通过export GOBIN=/dmdata指定usql存放路径。
[dmdba@dw02 ~]$ go install github.com/xo/usql@v0.19.19
由于usql当前未直接支持连接达梦,需要通过ODBC的方式配置连接。
Linux环境安装UNIXODBC,并配置odbcinst.ini文件,增加dm8驱动。
[dmdba@dw02 /dmdata]$ odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/dmdba/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[dmdba@dw02 /dmdata]$ tail -3 /etc/odbcinst.ini
[DM8]
Description = ODBC DRIVER FOR DM8
Driver = /home/dmdba/dmdbms_4_48/bin/libdodbc.so
若存在not found的dm依赖文件,需要配置path和ld_library_path环境变量。
[dmdba@dw02 /dmdata]$ ldd /home/dmdba/dmdbms_4_48/bin/libdodbc.so
linux-vdso.so.1 => (0x00007fff54d46000)
libdmdpi.so => /home/dmdba/dmdbms_4_48/bin/libdmdpi.so (0x00007ff5520eb000)
libdmfldr.so => /home/dmdba/dmdbms_4_48/bin/libdmfldr.so (0x00007ff551d8b000)
librt.so.1 => /lib64/librt.so.1 (0x00007ff551b83000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff551967000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ff551763000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007ff55145b000)
libm.so.6 => /lib64/libm.so.6 (0x00007ff551159000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff550d8b000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ff550b75000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff553218000)
通过usql -c '\drivers' 查看当前usql所支持连接的数据库类型
如果未支持ODBC,则需要重新构建usql以支持,否则会报错。
如下几个标签用于构建时代表不同的含义,标签和描述如下:
标签 描述
no_base 没有基本驱动,主要用于开发
most 所有稳定的驱动
all 所有可用的驱动
bad 不能用的驱动
no_
[dmdba@dw02~/dmdbms_4_48/bin]$go install -tags 'odbc' github.com/xo/usql@v0.19.19
warning: both GOPATH and GOROOT are the same directory (/home/dmdba/go); see https://go.dev/wiki/InstallTroubleshooting
go: downloading github.com/alexbrainman/odbc v0.0.0-20250224181725-329517659778
[dmdba@dw02 ~/dmdbms_4_48/bin]$ usql -c '\drivers'
Available Drivers:
clickhouse [ch]
cockroachdb (postgres) [cr, cdb, crdb, cockroach]
csvq [cs, csv, tsv, json]
memsql (mysql) [me]
mysql [my, maria, aurora, mariadb, percona]
odbc [od]
oracle [or, ora, oci, oci8, odpi, odpi-c]
postgres [pg, pgsql, postgresql]
redshift (postgres) [rs]
sqlite3 [sq, sqlite]
sqlserver [ms, mssql, azuresql]
tidb (mysql) [ti]
vitess (mysql) [vt]
[dmdba@dw02 ~]$ usql odbc+DM8://SYSDBA:Hust4400DM@localhost:5236
Connected with driver odbc (<unknown>)
Type "help" for help.
od:SYSDBA@localhost=> select id_code,build_version from v$instance;
ID_CODE | BUILD_VERSION
-------------------------------------+-----------------------------------
--03134284336-20250117-257733-20132 | 03134284336-20250117-257733-20132
(1 row)
od:SYSDBA@localhost=>
文章
阅读量
获赞