PostgreSQLを使い始める
このチュートリアルでは、PostgreSQLでsqlcを使用する方法の基本を説明します。sqlcの最新バージョンとGoツールチェインが必要です。このチュートリアルではGoを使用しますが、他の言語プラグインも利用可能です。
セットアップ
新しいディレクトリを作成し、Goモジュールを初期化します。
go mod init tutorial.sqlc.dev/app
設定
sqlc.yaml
ファイルを作成し、PostgreSQLエンジンを使用するようsqlcを設定します。
version: "2"
sql:
- engine: "postgresql"
queries: "query.sql"
schema: "schema.sql"
gen:
go:
package: "tutorial"
out: "tutorial"
sql_package: "pgx/v5"
スキーマ
schema.sql
でデータベーススキーマを作成します。
CREATE TABLE authors (
id BIGSERIAL PRIMARY KEY,
name text NOT NULL,
bio text
);
クエリ
query.sql
で実行したいクエリを作成します。
-- 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: UpdateAuthor :exec
UPDATE authors
set name = $2,
bio = $3
WHERE id = $1;
-- name: DeleteAuthor :exec
DELETE FROM authors
WHERE id = $1;
コード生成
sqlc generate
を実行してコードを生成します。
sqlc generate
tutorial
サブディレクトリにdb.go
、models.go
、query.sql.go
が作成されます。
使用方法
依存関係を取得してプロジェクトをビルドします。
go get github.com/jackc/pgx/v5
go build ./...
生成されたコードは次のように使用できます。
package main
import (
"context"
"log"
"reflect"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgtype"
"tutorial.sqlc.dev/app/tutorial"
)
func run() error {
ctx := context.Background()
conn, err := pgx.Connect(ctx, "user=pqgotest dbname=pqgotest sslmode=verify-full")
if err != nil {
return err
}
defer conn.Close(ctx)
queries := tutorial.New(conn)
// 全著者をリスト
authors, err := queries.ListAuthors(ctx)
if err != nil {
return err
}
log.Println(authors)
// 著者を作成
insertedAuthor, err := queries.CreateAuthor(ctx, tutorial.CreateAuthorParams{
Name: "Brian Kernighan",
Bio: pgtype.Text{String: "Co-author of The C Programming Language and The Go Programming Language", Valid: true},
})
if err != nil {
return err
}
log.Println(insertedAuthor)
// 作成した著者を取得
fetchedAuthor, err := queries.GetAuthor(ctx, insertedAuthor.ID)
if err != nil {
return err
}
// trueを表示
log.Println(reflect.DeepEqual(insertedAuthor, fetchedAuthor))
return nil
}
func main() {
if err := run(); err != nil {
log.Fatal(err)
}
}
sqlc Cloud(オプション)
sqlc Cloudを使用してクエリを検証することができます。sqlc CloudダッシュボードでプロジェクトIDを作成します。
sqlc.yaml
にcloud
ブロックを追加します:
version: "2"
cloud:
# sqlc Cloudダッシュボードで取得したプロジェクトIDに置き換える
project: "<PROJECT_ID>"
sql:
- engine: "postgresql"
queries: "query.sql"
schema: "schema.sql"
gen:
go:
package: "tutorial"
out: "tutorial"
sql_package: "pgx/v5"
認証トークンを設定します:
export SQLC_AUTH_TOKEN="<your sqlc auth token>"
クエリをプッシュします:
sqlc push --tag tutorial
後でクエリを検証できます:
sqlc verify --against tutorial
原文:https://docs.sqlc.dev/en/latest/tutorials/getting-started-postgresql.html