Maison > développement back-end > Golang > La configuration de sqlc.yaml ne remplace pas l'intervalle postgresql par time.Duration

La configuration de sqlc.yaml ne remplace pas l'intervalle postgresql par time.Duration

WBOY
Libérer: 2024-02-09 20:09:18
avant
1250 Les gens l'ont consulté

sqlc.yaml 配置不会覆盖 postgresql 时间间隔到 time.Duration

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.

Contenu de la question

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"
Copier après la connexion

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
);
Copier après la connexion

Modèle généré :

type Windowrange struct {
    ID        int32
    Open      time.Time
    Duration  int64
    CreatedAt sql.NullTime
    UpdatedAt sql.NullTime
    RaffleID  int32
}
Copier après la connexion

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 ?

Solution de contournement

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"
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal