【问题标题】:go-pg - reading the ID returned after the upsertgo-pg - 读取 upsert 后返回的 ID
【发布时间】:2020-09-15 05:08:04
【问题描述】:

我在 go-pg 中创建了一个这样的 upsert:

db.Model(myModel).Returning("id").
OnConflict("(fieldA) DO UPDATE set fieldB=EXCLUDED.fieldB").Insert()

现在我想读取返回的 id。我该怎么做?我见过的所有示例都忽略了插入/更新查询返回的结果。

【问题讨论】:

    标签: postgresql go upsert go-pg


    【解决方案1】:

    example来看,ID在myModel

    myModel := &MyModel{
        FieldA: `Something something something`
    }
    
    _, err := db.Model(myModel).
        OnConflict("(fieldA) DO UPDATE").
        Set("fieldB = EXCLUDED.fieldB").
        Insert()
    if err != nil {
        panic(err)
    }
    
    fmt.Println(myModel.Id)
    

    查看 Postgres 日志,它正在做insert into ... returning "id" 获取ID。

    【讨论】:

    • 不,ID 不会出现在模型中。无论如何,它怎么知道它需要更新 ID,而不是其他字段?
    • @kozyr 也许是因为它是主键。为我工作™。你试过了吗?
    • @kozyr 查看 Postgres 日志,它正在运行 INSERT INTO ... RETURNING "id"
    • 我的错,这里的 UUID 有另一个问题,但现在它也适用于它们。
    • 如果你对你的答案进行任何编辑,我将能够投票 - 否则 Stackoverflow 会锁定它。
    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 2017-12-24
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多