[Golang] PostgreSQL 다루기

Golang은 다양한 데이터베이스를 다룰 수 있는데요. Oracle, MySQL, MSSQL Server, DB2 그리고 PostgreSQL 등에 대한 DB 드라이버 라이브러리를 제공합니다. 각 드라이버는 github를 통해 소스코드와 함께 제공되며 드라이버에 대한 라이브러리 소스코드는 go get {URL}처럼 Command Line을 통해 설치하여 사용할 수 있습니다.

이 글은 Local PC에 설치된 PostgreSQL에 연결하여, 이미 존재하는 postgres 데이터베이스의 test 테이블에 데이터를 추가(INSERT)하고 쿼리(SELECT)하는 코드를 설명합니다.

먼저 postgreSQL에 연결하는 코드는 아래와 같습니다.

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/lib/pq"
)

const (
    DB_USER     = "postgres"
    DB_PASSWORD = "ILOVEU"
    DB_NAME     = "postgres"
)

func main() {
    dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable",
        DB_USER, DB_PASSWORD, DB_NAME)

    db, err := sql.Open("postgres", dbinfo)
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // ... 계속

다음 코드는 연결된 DB에 데이터를 추가(INSERT)하는 코드입니다.

    result, err := db.Exec("INSERT INTO test (name, age) VALUES('Jackass', 19)")
    if err != nil {
        panic(err)
    }

    cntAffected, err := result.RowsAffected()
    if err != nil {
        panic(err)
    }

    fmt.Println("Affected Rows:", cntAffected)

    // ... 계속

위의 코드 중 11번은 INSERT 된 데이터의 개수를 나타내며, 여기서는 1개를 추가했으므로 1이 됩니다. 다음 코드는 저장된 데이터를 조회(SELECT)하는 코드입니다.

    rows, err := db.Query("SELECT name, age FROM test")
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    var name string
    var age int
    for rows.Next() {
        err := rows.Scan(&name, &age)
        if err != nil {
            panic(err)
        }

        fmt.Println(name, age)
    }
}	

실행 결과는 다음과 같습니다.

Affected Rows: 1
Dip2K                            40
Dip2K                            40
Jackass                          19
Jackass                          19
Jackass                          19
Jackass                          19
Jackass                          19
Jackass                          19
Jackass                          19

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다