Rumah > pembangunan bahagian belakang > Golang > konfigurasi sqlc.yaml tidak mengatasi selang postgresql ke masa. Tempoh

konfigurasi sqlc.yaml tidak mengatasi selang postgresql ke masa. Tempoh

WBOY
Lepaskan: 2024-02-09 20:09:18
ke hadapan
1259 orang telah melayarinya

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

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.

Kandungan soalan

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"
Salin selepas log masuk

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
);
Salin selepas log masuk

Model yang dihasilkan:

type Windowrange struct {
    ID        int32
    Open      time.Time
    Duration  int64
    CreatedAt sql.NullTime
    UpdatedAt sql.NullTime
    RaffleID  int32
}
Salin selepas log masuk

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?

Penyelesaian

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"
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan