Editor PHP Youzi di sini untuk memperkenalkan kepada anda soalan tentang konfigurasi sqlc.yaml. Apabila menggunakan postgresql, kita selalunya perlu menggunakan selang masa (time.Duration) untuk mewakili tempoh masa. Walau bagaimanapun, kadangkala kami mendapati bahawa konfigurasi selang masa dalam fail konfigurasi sqlc.yaml tidak berkuat kuasa, tetapi ditindih oleh konfigurasi lalai. Bagaimana untuk menyelesaikan masalah ini? Sila teruskan membaca artikel ini dan kami akan memberikan jawapan terperinci.
Saya mendapati masalah dengan aplikasi codegen sqlc. Untuk berjaga-jaga, apabila saya memerlukan interval
(postgresql) 字段时,sqlc 会生成一个带有 int64
字段的对象。此解决方案看起来已损坏,并在扫描行时产生错误: errorf("cannot conversion %v to interval", value)
sqlc.yaml:
version: "2" overrides: go: overrides: - db_type: "interval" engine: "postgresql" go_type: import: "time" package: "time" type: "https://pkg.go.dev/time#duration" sql: - queries: "./sql_queries/raffle.query.sql" schema: "./migrations/001-init.sql" engine: "postgresql" gen: go: package: "raffle_repo" out: "../repo/sql/raffle_repo" sql_package: "pgx/v4"
schema.sql:
create table windowrange ( id serial primary key, open timestamp not null , duration interval not null, created_at timestamp default now(), updated_at timestamp default now(), raffle_id integer not null constraint raffle_id references raffle on delete cascade );
Model yang dihasilkan:
type Windowrange struct { ID int32 Open time.Time Duration int64 CreatedAt sql.NullTime UpdatedAt sql.NullTime RaffleID int32 }
Masalah itu telah diselesaikan dengan cepat dengan menetapkan medan ini untuk menaip masa.duration. tempoh dan kod mula berfungsi, tetapi kod ini dijana dan kelihatan seperti keputusan yang tidak baik.
Apabila cuba mengatasi jenis melalui konfigurasi sqlc.yaml saya tidak mendapat apa-apa, objek itu masih dicipta daripada jenis int64. Di manakah silap saya dan bagaimana saya boleh membetulkannya?
Di bawah Jenis yang Disokong anda akan melihat pg_catalog.interval
也是 postgres 中 interval
salah satu nilai yang disokong.
Jadi kalau baru nak guna bahagian time.duration
而不是 int64
,则需要将 overrides
tukar kepada:
overrides: go: overrides: - db_type: "pg_catalog.interval" engine: "postgresql" go_type: import: "time" type: "Duration"
Petua: Jika ia tidak berfungsi untuk jenis data yang paling jelas, anda boleh mencuba yang lain.
Atas ialah kandungan terperinci konfigurasi sqlc.yaml tidak mengatasi selang postgresql ke masa. Tempoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!