L'éditeur PHP Youzi est là pour vous présenter une question sur la configuration de sqlc.yaml. Lors de l'utilisation de postgresql, nous devons souvent utiliser un intervalle de temps (time.Duration) pour représenter une période de temps. Cependant, nous constatons parfois que la configuration de l'intervalle de temps dans le fichier de configuration sqlc.yaml ne prend pas effet, mais est remplacée par la configuration par défaut. Comment résoudre ce problème? Veuillez continuer à lire cet article et nous vous donnerons des réponses détaillées.
J'ai trouvé un problème avec l'application sqlc codegen. Juste au cas où, quand j'en aurais besoin 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 );
Modèle généré :
type Windowrange struct { ID int32 Open time.Time Duration int64 CreatedAt sql.NullTime UpdatedAt sql.NullTime RaffleID int32 }
Le problème a été rapidement résolu en définissant ce champ sur type time.duration. durée et le code commence à fonctionner, mais ce code est généré et ressemble à une mauvaise décision.
Lorsque j'essaie de remplacer le type via la configuration sqlc.yaml, je n'obtiens rien, l'objet est toujours en cours de création de type int64. Où ai-je commis une erreur et comment puis-je résoudre ce problème ?
Sous Types pris en charge , vous verrez pg_catalog.interval
也是 postgres 中 interval
l'une des valeurs prises en charge.
Donc, si vous souhaitez simplement utiliser la partie time.duration
而不是 int64
,则需要将 overrides
, changez pour :
overrides: go: overrides: - db_type: "pg_catalog.interval" engine: "postgresql" go_type: import: "time" type: "Duration"
Conseil : Si cela ne fonctionne pas pour le type de données le plus évident, vous pouvez en essayer un autre.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!