PostgreSQL で sqlc を使うときは、最初から `sql_package: pgx/v5` を指定しよう
sqlc+PostgreSQL では COPY Protocol を使って複数行のインサートをする機能が提供されている。
これはめちゃくちゃ便利で,例えば以下のようなクエリがあったとする。
-- name: CreateAuthors :copyfrom
INSERT INTO authors (name, bio) VALUES ($1, $2);
そうすると以下のようなメソッドが生成される。これで、効率よく複数行のインサートが実施できて便利。
type CreateAuthorsParams struct {
Name string
Bio string
}
func (q *Queries) CreateAuthors(ctx context.Context, arg []CreateAuthorsParams) (int64, error) {
...
}
しかしこれは、pgx/v5 でしかサポートされていない。
:copyfrom
を使うには sql_package
に pgx/v5
を指定する必要があるのだ。
さてここで、 https://github.com/sqlc-dev/sqlc/blob/main/internal/codegen/golang/postgresql_type.go#L12 を見ると、
pgx/v5 の場合には、pgtype などを積極的に使うようになるため、sql_package
を指定していない sqlc.yaml を後から指定すると、めっちゃ生成される型が変わる。
overrides しまくればまぁ元通りにできるのだがめっちゃめんどくさい。
というわけで、最初から sql_package: pgx/v5
を指定しておくのが吉、だと思う。
(:copyfrom
以外にも、pgx/v5 じゃないと使えない機能がチラホラあるっぽい)
Published: 2025-06-26(Thu) 11:48