日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

生命不止,繼續 Go go go !!!

之前關于golang操作數據庫的博客:

Go實戰–Go語言操作MySQL數據庫(go-sql-driver/mysql)

Go實戰–go語言操作sqlite數據庫(The way to go)

Go實戰–golang中使用MongoDB(mgo)

Go實戰–golang中使用redis(redigo和go-redis/redis)

今天跟大家分享golang中使用PostgreSQL數據庫。

Go實戰——go語言操作PostgreSQL數據庫

 

何為PostgreSQL

官網
https://www.postgresql.org/

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

下載
https://www.postgresql.org/download/windows/

跳轉到https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows
根據自己的操作系統下載,例如我選擇:
PostgreSQL 9.6.4
Windows x86-64

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

安裝
下一步,選擇安裝文件夾,選擇數據所在位置,填寫密碼,端口號,選擇運行時語言環境等。
默默等待安裝。

使用pgAdmin

打開pgAdmin,要輸入之前設置的密碼

Go實戰——go語言操作PostgreSQL數據庫

 

創建數據庫
在Databases(1)上右鍵,Create, Database

Go實戰——go語言操作PostgreSQL數據庫

 

刪除數據庫

Go實戰——go語言操作PostgreSQL數據庫

 

創建表

Go實戰——go語言操作PostgreSQL數據庫

 


Go實戰——go語言操作PostgreSQL數據庫

 

插入數據

Go實戰——go語言操作PostgreSQL數據庫

 


Go實戰——go語言操作PostgreSQL數據庫

 

使用SQL Shell(psql)

創建數據庫

create database name;
Go實戰——go語言操作PostgreSQL數據庫

 

刪除數據庫

drop database name;

如果出現錯誤的話,請先斷開其他對該數據庫的連接。

Go實戰——go語言操作PostgreSQL數據庫

 

創建表


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)
    }
}

分享到:
標簽:PostgreSQL
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定