usql, uSQL是SQL数据库的通用 命令行 接口

分享于 

17分钟阅读

GitHub

  繁體 雙語
usql is a universal command-line interface for SQL databases
  • 源代码名称:usql
  • 源代码网址:http://www.github.com/xo/usql
  • usql源代码文档
  • usql源代码下载
  • Git URL:
    git://www.github.com/xo/usql.git
    Git Clone代码到本地:
    git clone http://www.github.com/xo/usql
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/xo/usql
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    uSQL

    通用命令行接口为 PostgreSQL。MySQL。Oracle数据库。SQLite3。微软 SQL Server。和其他SQL数据库接口。

    使用/构建/构建|数据库数据库支持

    概述

    usql 提供了一种通过命令行使用SQL数据库来处理SQL数据库的简单方法,并有一些附加功能,比如语法高亮和基于上下文的完成。

    更倾向于使用 psql。和等非sql数据库的数据库管理员可以找到 usql 直观。easy-to-use和可以用于其他数据库的命令行客户端/工具。

    安装

    通过 Release Release,,或者通过 Homebrew,可以通过安装 usql

    通过发行版安装

    • 下载你的平台版本的发行版。
    • .tar.bz2 或者 .zip 文件中提取 usql 或者 usql.exe 文件
    • 将可执行文件移到 $PATH ( linux/osx ) 或者 %PATH% ( Windows ) 上的某个位置

    通过Go安装

    usql 可以按常规的方式安装:

    # install usql with basic database support (includes PosgreSQL, MySQL, SQLite3, and MS SQL drivers)$ go get -u github.com/xo/usql

    可以使用构建标记来指定附加数据库支持:

    # install usql with most drivers (excludes drivers requiring CGO)$ go get -u -tags most github.com/xo/usql# install usql with all drivers (includes drivers requiring CGO, namely Oracle and ODBC drivers)$ go get -u -tags all github.com/xo/usql

    通过( OSX ) 安装的

    xo/xo 中可用,并且可以用 brew 命令的常规方式进行安装:

    # add tap$ brew tap xo/xo# install usql with"most" drivers$ brew install usql

    在安装过程中通过传递 --with-* 参数可以安装对 Oracle和ODBC数据库的附加支持:

    # install usql with oracle and odbc support$ brew install --with-oracle --with-odbc usql

    请注意,Oracle支持需要使用 tap instantclient-sdk 公式的xo/xo。 任何其他的instantclient-sdk 公式或者 Oracle Instant Client SDK 的旧版本都应该在尝试上述之前卸载:

    # uninstall the instantclient-sdk formula$ brew uninstall InstantClientTap/instantclient/instantclient-sdk# remove conflicting tap$ brew untap InstantClientTap/instantclient

    使用

    在安装后,可以类似于下面的代码使用 usql:

    # connect to a postgres database$ usql postgres://booktest@localhost/booktest# connect to an oracle database$ usql oracle://user:pass@host/oracle.sid# connect to a postgres database and run script.sql$ usql pg://localhost/-f script.sql

    连接到数据库

    usql 通过解析 URL 并将生成的连接字符串传递到数据库驱动器打开数据库连接。 数据库连接字符串( aka"数据源名称"或者 dsn ) 与url具有相同的解析规则,可以通过命令行传递到 usql,也可以通过命令行或者 c命令传递。

    usql 连接字符串如下所示:

    
     driver+transport://user:pass@host/dbname?opt1=a&opt2=b
    
    
     driver:/path/to/file
    
    
    /path/to/file
    
    
    
    

    上是:

    组件描述
    驱动程序驱动程序名称或者别名
    传输tcpudpunix 或者驱动程序名称( 用于ODBC和 ADODB )
    用户用户名
    通过密码
    主机主机名
    dbname*数据库名称。实例或者服务名称/id
    opt1=a&。数据库驱动程序选项( 请参见相应的SQL驱动程序以获取可用选项)
    /path/to/file磁盘上的路径

    * SQL Server,提供实例和数据库名称的语法是 /instance/dbname,其中 /instance 是可选的。 对于Oracle数据库,/dbname 是唯一的数据库 ID ( SID )。

    驱动程序别名

    usql 支持来自 dburl 包的相同驱动程序名和别名。 大多数数据库至少有一个或者多个别名- 请参考 dburl 文档所有受支持的别名。

    短别名

    所有数据库驱动程序都有两个字符缩写形式,通常是数据库驱动程序的前两个字母。 例如 pgpostgresmymysqlmsmssqlororacle,或者 sqsqlite3

    传递驱动程序选项

    驱动程序选项被指定为 ?opt1=a&obt2=b 格式的标准URL查询选项。 请参考相关的驱动程序文档,以获得可用的选项。

    在磁盘上的路径

    如果URL没有 driver: 方案,usql 将检查它是否是磁盘上的路径。 如果路径存在,usql 将尝试使用适当的数据库驱动程序来打开路径。

    如果指定的路径是一个Unix域套接字,usql 将尝试使用MySQL驱动程序打开它。 如果路径是一个目录,usql 将尝试使用PostgreSQL驱动程序打开它。 如果路径是常规文件,usql 将尝试使用SQLite3驱动程序打开该文件。

    连接字符串示例

    以下是连接字符串和使用 usql 连接到数据库的其他方法:

    # connect to a postgres database$ usql pg://user:pass@localhost/dbname
    $ usql pgsql://user:pass@localhost/dbname
    $ usql postgres://user:pass@localhost:port/dbname
    $ psql/var/run/postgresql# connect to a mysql database$ usql my://user:pass@localhost/dbname
    $ usql mysql://user:pass@localhost:port/dbname
    $ usql/var/run/mysqld/mysqld.sock# connect to a mssql (Microsoft SQL) database$ usql ms://user:pass@localhost/dbname
    $ usql mssql://user:pass@localhost:port/dbname# connect to a mssql (Microsoft SQL) database using Windows domain authentication$ runas/user:ACMEwiley/netonly "usql mssql://host/dbname/"# connect to a oracle database$ usql or://user:pass@localhost/dbname
    $ usql oracle://user:pass@localhost:port/dbname# connect to a sqlite database that exists on disk$ usql dbname.sqlite3# NOTE: when the"<driver>://" or"<driver>:" scheme is omitted, the file must# already exist on disk.## if the file does not yet exist, the URL must incorporate file:, sq:, sqlite3:,# or any other recognized sqlite3 driver alias to force usql to create a new,# empty database at the specified path:$ usql sq://path/to/dbname.sqlite3
    $ usql sqlite3://path/to/dbname.sqlite3
    $ usql file:/path/to/dbname.sqlite3# connect to a adodb ole resource (windows only)$ usql adodb://Microsoft.Jet.OLEDB.4.0/myfile.mdb
    $ usql "adodb://Microsoft.ACE.OLEDB.12.0/?Extended+Properties="Text;HDR=NO;FMT=Delimited""

    执行查询和命令

    usql 提供一个命令 intrepreter,intreprets 命令,并将SQL查询发送到类似于 psql的数据库:

    $ usql sqlite://example.sqlite3
    Connected with driver sqlite3 (SQLite3 3.17.0)
    Type "help"for help.
    sq:example.sqlite3=> create table test (test_id int, name string);CREATE TABLE
    sq:example.sqlite3=> insert into test (test_id, name) values (1, 'hello');INSERT 1
    sq:example.sqlite3=>select* from test; test_id | name
    +---------+-------+
     1 | hello
    (1 rows)
    sq:example.sqlite3=>select* from testsq:example.sqlite3->pselect* from testsq:example.sqlite3->g test_id | name
    +---------+-------+
     1 | hello
    (1 rows)
    sq:example.sqlite3=>c postgres://booktest@localhost
    error: pq: 28P01: password authentication failed for user "booktest"Enter password:
    Connected with driver postgres (PostgreSQL 9.6.6)
    pg:booktest@localhost=>select* from authors; author_id | name
    +-----------+----------------+
     1 | Unknown Master
     2 | blah
     3 | aoeu
    (3 rows)
    pg:booktest@localhost=>

    命令

    usql 识别与 psql 类似的反斜杠( ) 命令。 当前可用的命令:

    $ usql
    Type "help"for help.
    (not connected)=>?General
     q quit usql
     copyright show usql usage and distribution terms
     drivers display information about available database drivers
     g [FILE] or ; execute query (and send results to file or |pipe)
     gexec execute query and execute each value of the result
     gset [PREFIX] execute query and store results in usql variables
    Help
     ? [commands] show help on backslash commands
     ? options show help on usql command-line options
     ? variables show help on special variables
    Query Buffer
     e [FILE] [LINE] edit the query buffer (or file) with external editor
     p show the contents of the query buffer
     r reset (clear) the query buffer
     w FILE write query buffer to file
    Input/Output
     echo [STRING] write string to standard output
     i FILE execute commands from file
     ir FILE as i, but relative to location of current script
    Transaction
     begin begin a transaction
     commit commit current transaction
     rollback rollback (abort) current transaction
    Connection
     c URL connect to database with url
     c DRIVER PARAMS... connect to database with SQL driver and parameters
     Z close database connection
     password [USERNAME] change the password for a user
     conninfo display information about the current database connection
    Operating System
     cd [DIR] change the current working directory
     setenv NAME [VALUE] set or unset environment variable
     ! [COMMAND] execute commandin shell or start interactive shell
    Variables
     prompt [TEXT] NAME prompt user to set internal variable
     set [NAME [VALUE]] set internal variable, or list all if no parameters
     unset NAME unset (delete) internal variable

    项目的usql 目标是支持所有标准 psql 命令。 请求请求将受到极大的赞赏 !

    建筑

    使用构建 usql 时,默认情况下,只有 PostgreSQL。MySQL。sql和 Microsoft SQL Server的驱动程序才会启用。 可以通过为它的数据库驱动程序指定构建标记来启用其他数据库。 此外,mostall 生成标记分别包含大多数,以及所有SQL驱动程序:

    # install all drivers$ go get -u -tags all github.com/xo/usql# install with most drivers (same as all but excludes Oracle/ODBC)$ go get -u -tags most github.com/xo/usql# install with base drivers and Oracle/ODBC support$ go get -u -tags 'oracle odbc' github.com/xo/usql

    对于每个构建标记 <driver>,也有 no_<driver> 构建标记禁用驱动程序:

    # install all drivers excluding avatica and couchbase$ go get -u -tags 'all no_avatica no_couchbase' github.com/xo/usql

    插件发布版本

    版本构建使用 most 构建标记构建。 此外,还为版本指定了附加的SQLite3构建标记

    用作软件包

    尽量保持 usql 包的模块化,并且由希望利用 usql 代码库的它的他开发人员重用。 因此,可以使用核心 usql 源代码树构建SQL命令行接口( 比如,供其他一些项目用作"官方"客户端)。

    请参考 main.go 了解 usql 如何组合它的包。 usql 代码的文档也很好,请参考GoDoc清单查看可用的api。

    数据库支持

    usql 与所有兼容的标准库兼容,支持 github.com/xo/dburl 支持的SQL驱动程序。

    支持的数据库,相应的生成标记以及 usql 使用的驱动程序包括:

    使用的驱动程序生成标记驱动程序
    .用户界面服务器ms sqlgithub.com/denisenkom/go-mssqldb
    MySQLMySQLgithub.com/go-sql-driver/mysql
    PostgreSQLpostgresgithub.com/lib/pq
    询价单询价单github.com/mattn/go-sqlite3
    Oracleoraclegopkg.in/rana/ora.v4
    MySQLmymysqlgithub.com/ziutek/mymysql/godrv
    PostgreSQLpgxgithub.com/jackc/pgx/stdlib
    Avaticaavaticagithub.com/Boostport/avatica
    Cassandracassandragithub.com/MichaelS11/go-cql-driver
    ClickHouseclickhousegithub.com/kshvakov/clickhouse
    Couchbasecouchbasegithub.com/couchbase/go_n1ql
    Cznic QLqlgithub.com/cznic/ql
    firebird SQLfirebirdgithub.com/nakagami/firebirdsql
    微软 ADODBadodbgithub.com/mattn/go-adodb
    ODBCodbcgithub.com/alexbrainman/odbc
    快速快速github.com/prestodb/presto-go-client/presto
    SAP HANAhdbgithub.com/SAP/go-hdb/driver
    VoltDBvoltdbgithub.com/VoltDB/voltdb-client-go/voltdbclient
    Google扳手扳手github.com/xo/spanner ( 还没有 public )
    最多驱动程序最多数除Oracle和ODBC以外的所有驱动程序( 需要CGO和附加依赖项)
    所有驱动程序全部所有驱动程序

    相关项目

    待办事项

    usql 旨在最终为postgresql命令的psql 提供一个替代。 我们一直致力于为中最常用的方面/特性提供支持,这是going的。 psql 兼容( 在可能的地方),采用常规开发优先级。

    常规
    • 修正多行行为( 在arrow向上/向下 history psql )
    • 寻呼机
    • 支持 qecho + o
    • 修复表格输出/格式
    • 基于上下文的完成( WIP )
    • 编码和环境/命令行 选项设置输入( 在向SQL驱动程序提供前转换为 UTF-8 ) 编码( 这是多么重要。 )
    • 更好的--help支持/输出 cli,手册页
    • 命令处理+ psql 兼容性
    • j*命令( WIP )
    • errverbose
    • 设置设置( pset,a 等)
    • 来自 psql的所有d*命令( 需要完成工作,需要完成从 xo 提取自省代码的工作)
    • 剩余 psql cli参数
    • 不重要/"了"/极低优先级:
    • 交错 -f/-c命令的正确操作,IE: -f 1 -c 1 -c 2 -f 2 -f 3 -c 3按指定顺序运行
    • 测试
    • 数据库测试套件,执行最小的选择,插入,更新,删除
    • 未来的数据库支持
    • InfluxDB
    • CSV通过 sql SQLite3 vtable
    • 通过 SQLite3 vtable的Google工作表
    • Atlassian JQL ( 为什么不? lol )
    • Google扳手

    COM  数据  INT  COMM  Comma  接口