数据库ddl
CREATE TABLE "public"."menu" (
"id" int4 NOT NULL GENERATED ALWAYS AS IDENTITY (
INCREMENT 1
MINVALUE 1
MAXVALUE 2147483647
START 1
),
"title" varchar(255) COLLATE "pg_catalog"."default",
"router" varchar(255) COLLATE "pg_catalog"."default",
"state" varchar(255) COLLATE "pg_catalog"."default",
"sort" int4,
"icon" varchar(255) COLLATE "pg_catalog"."default",
"created_at" timestamp(6),
"updated_at" timestamp(6),
"sid" int4 NOT NULL DEFAULT 0
)
;
ALTER TABLE "public"."menu"
OWNER TO "postgres";
COMMENT ON COLUMN "public"."menu"."title" IS '标题';
COMMENT ON COLUMN "public"."menu"."router" IS '路由';
COMMENT ON COLUMN "public"."menu"."state" IS '状态';
COMMENT ON COLUMN "public"."menu"."sort" IS '排序';
COMMENT ON COLUMN "public"."menu"."icon" IS '图标';
COMMENT ON TABLE "public"."menu" IS '菜单表';
数据库链接
dsn := "host=xxxx user=postgres password=xxxxx dbname=xxxx port=5432 sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err == nil {
Db = db
}
struct
type MenuModel struct {
Id int `gorm:"column:id" json:"id"`
Title string `gorm:"column:title" json:"title"`
Router string `gorm:"column:router" json:"router"`
Sid int `gorm:"column:sid" json:"sid"`
State int `gorm:"column:state" json:"state"`
Sort int `gorm:"column:sort" json:"sort"`
Icon string `gorm:"column:icon" json:"icon"`
Created_at time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"`
Updated_at time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"`
}
插入操作
InitDb()
menu := MenuModel{
Title: "1",
Router: "1",
Sid: 1,
State: 1,
Sort: 1,
Icon: "1",
}
Db.Create(&menu)
fmt.Println(menu.Id)
报错
failed to encode args[3]: unable to encode 1 into text format for varchar (OID 1043): cannot find encode plan
[rows:0] INSERT INTO "menu" ("title","router","sid","state","sort","icon","created_at","updated_at") VALUES ('1','1',1,1,1,'1','2023-01-29 19:37:38.34','2023-01-29 19:37:38.34') RETURNING "id"
以上报错,只会在gorm 插入的时候报错,报错的sql,是可以正常插入到数据库,gorm 也能正常读取!
请问这个问题是哪里的问题?怎么处理?
报错信息很清晰,第三个字段编码时出错,为什么出错,无法将数字
1
编码为varchar
。检查为什么会出现数字
1
。Ops,你把结构体的
State
定义成int
了,换成string
试试看。以及你这个
gorm
的column
标签也有点多余,gorm
会自动生成列名: