生命不止,继续 Go go go !!!

之前关于golang操作数据库的博客:

今天跟大家分享golang中使用PostgreSQL数据库。

何为PostgreSQL

PostgreSQL is a powerful, open source object-relational database system.

PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS)。 用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们。

特点

PostgreSQL可在所有主要操作系统(即Linux,UNIX(AIX,BSD,HP-UX,SGI IRIX,Mac OS X,Solaris,Tru64)和Windows等)上运行

PostgreSQL支持文本,图像,声音和视频,并包括用于C/C++,Java,Perl,Python,Ruby,Tcl和开放数据库连接(ODBC)的编程接口

PostgreSQL支持SQL的许多功能,例如复杂SQL查询,SQL子选择,外键,触发器,视图,事务,多进程并发控制(MVCC),流式复制(9.0),热备(9.0))

在PostgreSQL中,表可以设置为从“父”表继承其特征

可以安装多个扩展以向PostgreSQL添加附加功能

PostgreSQL 与 MySQL 相比,优势何在?

知乎上有大神们的讨论,可以看一看:https://www.zhihu.com/question/20010554

Windows下安装PostgreSQL

下载速度不是很快,稍安勿躁。

安装

下一步,选择安装文件夹,选择数据所在位置,填写密码,端口号,选择运行时语言环境等。

默默等待安装。

使用pgAdmin

打开pgAdmin,要输入之前设置的密码

创建数据库

在Databases(1)上右键,Create, Database

删除数据库

创建表

插入数据

使用SQL Shell(psql)

创建数据库

create database name;

删除数据库

drop database name;

如果出现错误的话,请先断开其他对该数据库的连接。

创建表

CREATE TABLE public.student ( id integer, name character(1)[] COLLATE pg_catalog."default" ) WITH ( OIDS = FALSE ) TABLESPACE pg_default;

ALTER TABLE public.student OWNER to postgres;

插入数据

INSERT INTO public.teacher(

id, age)

VALUES (2, 34);

查询

SELECT * FROM public.teacher;

Go中使用PostgreSQL

github.com/lib/pq

Pure Go Postgres driver for database/sql

连接

package main

import (

"database/sql"

"fmt"

_ "github.com/lib/pq"

)

const (

host = "localhost"

port = 5432

user = "postgres"

password = "your_password"

dbname = "test"

)

func main() {

psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+

"password=%s dbname=%s sslmode=disable",

host, port, user, password, dbname)

db, err := sql.Open("postgres", psqlInfo)

if err != nil {

panic(err)

}

defer db.Close()

err = db.Ping()

if err != nil {

panic(err)

}

fmt.Println("Successfully connected!")

}

插入

package main

import (

"database/sql"

"fmt"

_ "github.com/lib/pq"

)

const (

host = "localhost"

port = 5432

user = "postgres"

password = "wangshubo123"

dbname = "test"

)

type Teacher struct {

ID int

Age int

}

func main() {

psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+

"password=%s dbname=%s sslmode=disable",

host, port, user, password, dbname)

db, err := sql.Open("postgres", psqlInfo)

if err != nil {

panic(err)

}

defer db.Close()

err = db.Ping()

if err != nil {

panic(err)

}

fmt.Println("Successfully connected!")

sqlStatement := ` INSERT INTO teacher (id, age) VALUES ($1, $2) RETURNING id`

id := 3

err = db.QueryRow(sqlStatement, 3, 19).Scan(&id)

if err != nil {

panic(err)

}

fmt.Println("New record ID is:", id)

}

再运行一次,错误:panic: pq: 重复键违反唯一约束”teacher_pkey”

查询

package main

import (

"database/sql"

"fmt"

_ "github.com/lib/pq"

)

const (

host = "localhost"

port = 5432

user = "postgres"

password = "wangshubo123"

dbname = "test"

)

type Teacher struct {

ID int

Age int

}

func main() {

psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+

"password=%s dbname=%s sslmode=disable",

host, port, user, password, dbname)

db, err := sql.Open("postgres", psqlInfo)

if err != nil {

panic(err)

}

defer db.Close()

err = db.Ping()

if err != nil {

panic(err)

}

fmt.Println("Successfully connected!")

sqlStatement := `SELECT * FROM teacher WHERE id=$1;`

var teacher Teacher

row := db.QueryRow(sqlStatement, 1)

err = row.Scan(&teacher.ID, &teacher.Age)

switch err {

case sql.ErrNoRows:

fmt.Println("No rows were returned!")

return

case nil:

fmt.Println(teacher)

default:

panic(err)

}

}

psql+加载mysql数据库_Go实战--go语言操作PostgreSQL数据库(github.com/lib/pq)相关推荐

  1. pq和mysql_Go实战--go语言操作PostgreSQL数据库(github.com/lib/pq)

    生命不止,继续 Go go go !!! 之前关于golang操作数据库的博客: 今天跟大家分享golang中使用PostgreSQL数据库. 何为PostgreSQL PostgreSQL is a ...

  2. [Golang数据库专题4]Golang语言操作PostgreSQL进行增删改查

    目录 一. 引言 1.1 PostgreSQL与MYSQL 1.2 Golang支持PostgreSQl驱动 二.编码实践 2.1 建表语句 2.2 CRUD代码 2.3 验证结果 三.结语 一. 引 ...

  3. 安卓加载mysql数据到列表里_Android如何从数据库中加载海量数据

    在Android3.0之前,很多应用程序响应性能方面有缺陷,其中比较典型的错误行为是在UI线程中执行了查询数据操作,尤其是一次性从database查出大量数据并加载到ListView里,用这种方式载入 ...

  4. spark1.4加载mysql数据 创建Dataframe及join操作连接方法问题

    首先我们使用新的API方法连接mysql加载数据 创建DF import org.apache.spark.sql.DataFrame import org.apache.spark.{SparkCo ...

  5. go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go)

    生命不止,继续 go go go !!! 继续与大家分享,go语言的实战,今天介绍的是如何操作sqlite数据库. 何为sqlite3? SQLite is a self-contained, hig ...

  6. IDEA加载mysql 报:java.sql.SQLException: Unknown system variable ‘query_cache_size‘

    IDEA在加载mysql数据库时 报如下错误: java.sql.SQLException: Unknown system variable 'query_cache_size' 翻译:java.sq ...

  7. 正确加载MySQL驱动的语句_正确加载MySQL驱动的语句_____________________;_学小易找答案...

    [多选题]电子图书的特点是 [简答题] [单选题]为了准备病理学考试,王同学想在图书馆借一本人民卫生出版社出版的熊小亮编写的<病理学试题库>,经过检索发现该书都被借出去了 , 最方便快捷的 ...

  8. sparksql加载mysql表中的数据

    sparksql加载mysql表中的数据 <dependency><groupId>mysql</groupId><artifactId>mysql-c ...

  9. Apache+PHP 无法加载 MySql 模块的问题

    症状 1. php中无法使用  mysql_connect() 函数 2. phpinfo() 无法看到 mysql 模块 原因 在apache安装目录里查看错误日志文件,会看到这样的信息: PHP ...

最新文章

  1. 栈与队列5——汉诺塔问题
  2. python 子图_python 实现在一张图中绘制一个小的子图方法
  3. 中国联通与阿里宣布相互开放云计算资源
  4. 从玉农业谋定塞外-丰收节交易会·林裕豪:巴彦淖尔深圳签约
  5. python的pip换源_浅析Python3 pip换源问题
  6. oneproxy检测主从复制同步延迟
  7. visio图标_弱电间机柜原型图整理,可编辑!(Excel,visio,CAD)
  8. 【一类题】二维数点的几个做法
  9. MongoDB (六) MongoDB 集合操作
  10. python 逻辑运算的短路问题
  11. android仿IOS,滑动隐藏底部ScrollView
  12. 计算机显卡模式,电脑bios设置显卡图解
  13. 安卓手机修改ntp服务器,修改安卓手机ntp服务器地址
  14. 经典英文linux书籍,Linux内核编程必读(英文版),丛书名: 经典原版书库
  15. 华三交换机配置access命令_华三交换机查看配置命令是什么
  16. Serial Scope——基于QCustomPlot的串口虚拟示波器开发过程
  17. 面试——路径、转发与重定向的区别
  18. Crack:GrapeCity Documents for Excel 6.0.1
  19. cloud-utils
  20. 读取xlsx的sheet

热门文章

  1. JavaScript禁用鼠标右键菜单
  2. 编写你的第一个 Django 应用,第 5 部分
  3. 2018年第九届蓝桥杯C/C++ C组国赛 —— 第四题:约瑟夫环
  4. 征战蓝桥 —— 2016年第七届 —— C/C++A组第2题——生日蜡烛
  5. rosdep update 报错: File “/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py“, line 829
  6. 【STM32】随机数发生器相关函数和类型
  7. 【C++】 C++标准模板库(九) Bitsets
  8. [Qt教程] 第28篇 XML(二)使用DOM创建和操作XML文档
  9. openssh升级sftp_Centos7 升级 openSSH 到7.9p1的详细步骤
  10. LeetCode 190. Reverse Bits (算32次即可)