Greenplum 作为一款强大的 HTAP 数据库,针对大多数流行语言都有相应的连接库。大部分均是与 PostgreSQL 采用相同的接口,但是也有部分接口是 Greenplum 专门优化后用于自身使用的。今天开始,给大家分享一系列语言接口的连接库及使用方式。

Golang 作为 Google 开源的一款编译型开发语言,经过多年发展,在开发界占据了很大的份额,市面上针对 Greenplum 的 Golang 连接库也有很多,但是最著名的还是 github.com/lib/pq。

Golang 为连接数据库专门提供了一个公共包叫 database/sql,在进行数据库连接时,只需要遵循该库的注册方式将 lib/pq(https://github.com/lib/pq) 注册为 postgres 驱动即可。

支持列表

目前该包支持全系列 Greenplum 产品,提供的一些功能如下:

  • 支持数据库增删改查
  • 支持在数据库中直接执行DDL或维护语句(VACUUM等)
  • 支持所有普通数据类型
  • 支持 bytea
  • 支持 hstore
  • 支持 SSL
  • 支持 COPY FROM
  • 支持 pgpass

安装方法

与其他的 Go 包安装方式一样,只需要在 go/src 目录下执行 go get 命令即可将需要的包下载。

go get github.com/lib/pq

如果网络条件有限,不能直接 go get 联网下载,也可以直接在外网机器上用 go get 或者 git 下载好,然后将代码复制到对应格式的目录下(放到 go 文件夹下的 src 文件夹下的 github.com 文件夹下的 lib 文件夹下的 pq 下)。

使用方法

下面展示一段 Golang 连接数据库查询的代码,进行简单分析。

package mainimport ("database/sql""fmt"_ "github.com/lib/pq""log")func main() {db, err := sql.Open("postgres", "user=chris password=123 dbname=postgres host=127.0.0.1 port=5432 sslmode=disable")if err != nil {log.Fatal(err)}defer db.Close()//查询数据rows, err := db.Query("select version()")for rows.Next() {var version stringrows.Scan(&version)fmt.Println(version)}}

从上面代码可以看到,我们需要首先导入 database/sql 和 lib/pq 两个包。

import ("database/sql""fmt"_ "github.com/lib/pq""log")

注意这里在导入 lib/pq 时,前面加了下划线(_),因为通常来说,不直接使用驱动所提供的方法,而是应该使用 database 中的 sql.DB,因此在导入 lib/pq 驱动时,这里使用了匿名导入的方式(在包路径前添加 _),当导入了一个数据库驱动后,此驱动会自行初始化并注册自己到 Golang 的 database/sql 上下文中,因此我们就可以通过 database/sql 包提供的方法访问数据库了。

database/sql 默认提供了 MySQL、PostgreSQL 和 SQLite 的支持,不需要手工注册。

接下来就是在函数中构造连接 url 然后进行查询了

以下就是具体的连接使用逻辑,通常的逻辑一般为:

  • 打开数据库连接
  • 执行增删改查操作
  • 扫描结果集然后处理(查询操作)
  • 错误处理
  • 关闭数据库连接

数据源的连接字符串通常拼接成“user=chris password=123 dbname=postgres host=127.0.0.1 port=5432 sslmode=disable”的形式,字符串中分别对应了 Greenplum 数据库的用户名、密码、数据库名、主机ip、Greenplum 端口号和 sslmode。

db, err := sql.Open("postgres", "user=chris password=123 dbname=postgres host=127.0.0.1 port=5432 sslmode=disable")

除了上面的数据源连接串形式,也可以下面这种方式连接(不太常用,作用是一样的):“postgres://chris:password@127.0.0.1:5432/postgres?sslmode=verify-full”。

数据库的操作支持开发语言中常见的两种处理方式:

  1. 直接查询
  2. prepare statement

下面给大家展示所有可能涉及的增删改查操作的语法,可以直接在数据库中测试使用。

package mainimport ("database/sql""fmt"_ "github.com/lib/pq""time")var db *sql.DBfunc sqlOpen() {var err errordb, err = sql.Open("postgres", "user=gpadmin password=123 dbname=postgres host=172.16.142.191 port=5432 sslmode=disable")//port是数据库的端口号,默认是5432,如果改了,这里一定要自定义;//user就是你数据库的登录帐号;//dbname就是你在数据库里面建立的数据库的名字;//sslmode就是安全验证模式;checkErr(err)}func sqlCreate() {//创建表_, err := db.Exec("drop table t_user")checkErr(err)_, err1 := db.Exec("create table t_user(uname text,dptname text,create_time timestamp)")checkErr(err1)}func sqlInsert() {//插入数据stmt, err := db.Prepare("INSERT INTO t_user(uname,dptname,create_time) VALUES($1,$2,$3)")checkErr(err)_, err = stmt.Exec("chris", "软件1部", "2020-01-08")//这里的三个参数就是对应上面的$1,$2,$3了checkErr(err)}func sqlDelete() {//删除数据stmt, err := db.Prepare("delete from t_user where uname=$1")checkErr(err)res, err := stmt.Exec("chris")checkErr(err)affect, err := res.RowsAffected()checkErr(err)fmt.Println("rows affect:", affect)}func sqlSelect() {//查询数据rows, err := db.Query("SELECT * FROM t_user")checkErr(err)println("-----------")for rows.Next() {var uname stringvar dptname stringvar create_time stringerr = rows.Scan(&uname, &dptname, &create_time)checkErr(err)fmt.Println( "name = ", uname, "dep = ", dptname, "created = ", create_time, "")}}func sqlUpdate() {//更新数据stmt, err := db.Prepare("update t_user set dptname=$1 where uname=$2")checkErr(err)res, err := stmt.Exec("软件1部","jenny")checkErr(err)affect, err := res.RowsAffected()checkErr(err)fmt.Println("rows affect:", affect)}func sqlClose() {db.Close()}func checkErr(err error) {if err != nil {panic(err)}}func main() {sep := "----------"sqlOpen()println(sep, "*sqlOpen")sqlCreate()println(sep, "*sqlCreate")time.Sleep(time.Second*2)sqlSelect()println(sep, "*sqlSelect")time.Sleep(time.Second*2)sqlInsert()sqlSelect()println(sep, "*sqlInsert")time.Sleep(time.Second*5)sqlUpdate()sqlSelect()println(sep, "*sqlUpdate")time.Sleep(time.Second*2)sqlDelete()sqlSelect()println(sep, "*sqlDelete")time.Sleep(time.Second*2)sqlClose()println(sep, "*sqlClose")}

End~

golang 接口_「实战」助力数据库开发之接口篇 - Golang 连接 Greenplum相关推荐

  1. docker 容器运行 golang程序_「Docker」 - 运行 amp; 管理容器

    容器是基于容器技术所建立和运行的轻量级应用运行环境,它是Docker封装和管理应用程序或微服务的「集装箱」,在Docker中,容器是最核心的部分. 一.容器的创建和启动 Docker容器的生命周期里分 ...

  2. python接口自动化测试框架实战从设计到开发_Python接口自动化测试框架实战 从设计到开发...

    第1章 课程介绍(不要错过) 本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用 本章重点讲解如何抓app\web的h ...

  3. ospf多区域配置为什么ping不通_「实战」动态路由多区域 OSPF 基本配置,一分钟了解下...

    1.实战目的 (1)在路由器上启动 OSPF 路由进程 (2)启用参与路由协议的接口,并且通告网络及所在的区域 (3)LSA 的类型和特征 (4)不同路由器类型的功能 (5)OSPF 拓扑结构数据库的 ...

  4. mariadb导入sql数据_「译」关系型数据库介绍

    原文来自MariaDB官网的基础知识储备库中关系型数据库的介绍,原文链接:https://mariadb.com/kb/en/library/introduction-to-relational-da ...

  5. oracle获取去年年份_「实战」中文检错纠错之语料获取与处理

    来源 | AI实战派 作者 | AI实战派 在自然语言处理领域中,语料是非常关键的一个部分.然而,中文的自然语言处理领域在大的通用型语料上虽然不少,但在特定方向上的语料仍然匮乏. 在要进行拼音型文本纠 ...

  6. scip指令集_「欧盟」SCIP数据库提交专题问答 QA

    ECHA近日发表新闻称:自2021年1月5日起,物品供应商需要向ECHA提交其物品中所含SVHC的相关信息至SCIP数据库, 以实现当欧盟市场中被投放的物品其SVHC含量超过1000 ppm时,该物品 ...

  7. 「实战」南京房价的秘密——小区价格篇「2」

    「实战」南京房价的秘密--准备篇 「实战」南京房价的秘密--小区价格篇「1」 案例二:南京历年小区建成情况-折线图 # 计算南京历年的小区建成数量 Jianzhu_tmp = Xiaoqu[" ...

  8. 「实战」谷歌广告账户可以退款吗?怎么退款?

    「实战」谷歌广告账户可以退款吗?怎么退款? https://baijiahao.baidu.com/s?id=1655623045768743633&wfr=spider&for=pc

  9. 直接请求接口_「软件测试教程」基于postman进行接口测试实战

    一:接口测试前准备 接口测试是基于协议的功能黑盒测试,在进行接口测试之前,我们要了解接口的信息,然后才知道怎么来测试一个接口,如何完整的校验接口的响应值. 那么问题来了,那接口信息从哪里获取呢?常用的 ...

最新文章

  1. Myeclipse 10.5 下载地址
  2. swoole redis mysql_教你使用swoole监听redis数据
  3. 提交git push 的时候报错,Please make sure you have the correct access rights
  4. 写给程序员的秘籍:你跟优秀程序员的差距,其实就在这几个方面!
  5. 如何查看系统启动时间-转
  6. dedecms mysql使用中_dedecms织梦数据库类使用方法$dsql
  7. Android NDK开发之 NDK 局部 全局引用
  8. NSString Unicode
  9. 高德地图提示com.autonavi.amap.mapcore.MapCore.nativeNewInstance问题
  10. 状态压缩dp(状压dp)
  11. 计算机原理74181芯片,计算机组成原理
  12. 微信公众平台的开发流程及其要点
  13. 高一下学期计算机考试知识点,高一年级信息技术期末考试复习题
  14. 八泉峡明星旅游目的地系列推介会即将举行 蒋大为将现身助阵
  15. 32位16进制转换为10进制数
  16. ElementUI el-table合并单元格
  17. 【分享】请回答1988(一)
  18. java和python工资-Java和Python哪个薪资更高?
  19. CSS 选择器 CSS3选择器
  20. 现在自学Java可以找到工作吗?

热门文章

  1. 实现DUBBO服务环境隔离
  2. 计算分数加减表达式的值
  3. 美国旧金山之行第一天
  4. 云计算&大数据 “下一幕”智能变革之力
  5. iOS之UI--涂鸦画板实例
  6. python 获取 程序运行时间
  7. webservice 简介 跨编程语言 跨操作系统 远程调用技术
  8. npm install 因网络链接慢 卡住解决方法
  9. python3 导入自定义函数
  10. linux wifi 报错 siocsifflags: operation not possible due to rf-kill