Golang如何连接Postgres数据库

Golang如何连接Postgres数据库 我想创建一个使用PostgreSQL数据库的简单API。但我很难找到足够的资源来实现这一点。有人能帮我吗?

3 回复

尝试这个:https://github.com/abhayanoop/pgConnect

它使用了 @lutzhorn 提到的 pq 库,并带有配置文件。

更多关于Golang如何连接Postgres数据库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我推荐 pq 库。文档可以在 pkg.go.dev 找到。

试试看,它很容易使用!如果你有任何问题,随时回来提问。

在Go中连接PostgreSQL数据库,推荐使用pgx库,它是目前性能最好且功能完整的PostgreSQL驱动。以下是完整的示例代码:

package main

import (
    "context"
    "fmt"
    "log"
    "time"

    "github.com/jackc/pgx/v5"
    "github.com/jackc/pgx/v5/pgxpool"
)

// 使用连接池的示例
func connectWithPool() {
    connString := "postgres://username:password@localhost:5432/dbname?sslmode=disable"
    
    config, err := pgxpool.ParseConfig(connString)
    if err != nil {
        log.Fatal(err)
    }

    config.MaxConns = 10
    config.MinConns = 2
    config.MaxConnLifetime = time.Hour
    config.MaxConnIdleTime = time.Minute * 30

    pool, err := pgxpool.NewWithConfig(context.Background(), config)
    if err != nil {
        log.Fatal(err)
    }
    defer pool.Close()

    // 测试连接
    err = pool.Ping(context.Background())
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("成功连接到PostgreSQL数据库")
}

// 简单连接的示例
func connectSimple() {
    connString := "postgres://username:password@localhost:5432/dbname?sslmode=disable"
    
    conn, err := pgx.Connect(context.Background(), connString)
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close(context.Background())

    // 执行查询
    var version string
    err = conn.QueryRow(context.Background(), "SELECT version()").Scan(&version)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("PostgreSQL版本: %s\n", version)
}

// 完整的API示例结构
type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

func main() {
    connectSimple()
    connectWithPool()
}

首先安装依赖:

go get github.com/jackc/pgx/v5

连接字符串格式说明:

  • postgres:// - 协议
  • username:password - 数据库凭据
  • localhost:5432 - 主机和端口
  • dbname - 数据库名称
  • sslmode=disable - 开发环境禁用SSL

对于API开发,建议使用连接池(pgxpool)以获得更好的性能。连接池会自动管理连接的创建和复用,避免频繁建立连接的开销。

回到顶部