GoとpgxでsqlcをUse
注意: pgx/v5
はv1.18.0からサポートされています。
pgxは、PostgreSQL用の純粋なGoドライバーおよびツールキットです。lib/pqがメンテナンスモードに入ってから、多くのGophersのデフォルトのPostgreSQLパッケージになっています。
はじめに
pgxを使用するコードの生成を開始するには、sqlc.yaml
設定ファイルのsql_package
フィールドを設定します。有効なオプションはpgx/v4
またはpgx/v5
です。
version: "2"
sql:
- engine: "postgresql"
queries: "query.sql"
schema: "query.sql"
gen:
go:
package: "db"
sql_package: "pgx/v5"
out: "db"
既存のsqlcプロジェクトがない場合は、上記の設定ファイルと以下のquery.sql
ファイルでディレクトリを作成してください。
CREATE TABLE authors (
id BIGSERIAL PRIMARY KEY,
name text NOT NULL,
bio text
);
-- name: GetAuthor :one
SELECT * FROM authors
WHERE id = $1 LIMIT 1;
-- name: ListAuthors :many
SELECT * FROM authors
ORDER BY name;
-- name: CreateAuthor :one
INSERT INTO authors (
name, bio
) VALUES (
$1, $2
)
RETURNING *;
-- name: DeleteAuthor :exec
DELETE FROM authors
WHERE id = $1;
コードを生成すると、pgx互換のデータベースアクセスメソッドが得られます。
sqlc generate
生成されたコードのウォークスルー
生成されたコードは、lib/pq
を使用する際に生成されるコードと非常に似ています。ただし、database/sql
を使用する代わりに、コードはpgxタイプを直接使用します。
package main
import (
"context"
"fmt"
"os"
"github.com/jackc/pgx/v5"
"example.com/sqlc-tutorial/db"
)
func main() {
// urlExample := "postgres://username:password@localhost:5432/database_name"
conn, err := pgx.Connect(context.Background(), os.Getenv("DATABASE_URL"))
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
os.Exit(1)
}
defer conn.Close(context.Background())
q := db.New(conn)
author, err := q.GetAuthor(context.Background(), 1)
if err != nil {
fmt.Fprintf(os.Stderr, "GetAuthor failed: %v\n", err)
os.Exit(1)
}
fmt.Println(author.Name)
}
原文:https://docs.sqlc.dev/en/latest/guides/using-go-and-pgx.html