第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我們?nèi)绾卧?sqlx 中為 postgres 實(shí)現(xiàn)批量 upsert?

我們?nèi)绾卧?sqlx 中為 postgres 實(shí)現(xiàn)批量 upsert?

Go
慕少森 2022-08-24 10:31:13
所以我一直在嘗試批量更新。Postgres開箱即用地支持它。示例查詢INSERT INTO table(col1, col2, col3, eligible ,created_at, updated_at)                    VALUES (:col1, :col2, :col3 :eligible ,now(), now())                      ON CONFLICT (col1, col2)                     DO UPDATE SET col2 = excluded.col2,eligible = excluded.eligible, updated_at = now() RETURNING *我希望能夠做的是使用jmoiron/sqlx庫使用命名功能創(chuàng)建批量更新插入。正如這里提到的Github問題,我無法這樣做。
查看完整描述

2 回答

?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個贊

我想自己回答這個問題,作為一個開發(fā)人員,我的第一個本能是查看堆棧溢出并將其傳達(dá)給人們

我相信sqlx中的批量upsert是最近在1.3.0中引入的。它在README中有詳細(xì)說明,但作為一個ORM,它是一堆PR已經(jīng)轉(zhuǎn)發(fā)并還原了更改以支持多種SQL風(fēng)格。

識別查詢是否是批量查詢的當(dāng)前正則表達(dá)式期望查詢以空格或括號結(jié)尾,基本上是占位符。

在此處查看提交。

為了解決這個問題,我能夠使用內(nèi)部函數(shù)和一些旁路來使postgres提供的批量upsert工作。

這是相同的代碼。為方便起見,請在此處重新注冊:

 sliceOfStructs := []model.Gamer{

        {

        UserID:   "123",

        Name: "aarengee",

        Address: "xd",

        Eligible: true,

        },

        {

            UserID:   "1234",

            Name: "aarengeeAgain",

            Address: "xd",

            Eligible: false,

        },

    }

    upsertQuery := "INSERT INTO gamer_details (user_id, name, address, eligible,updated_at) VALUES (:user_id,:name,:address,:eligible,now())"

    onConflictStatement := " ON CONFLICT (user_id, name) DO UPDATE SET address = excluded.address,eligible = excluded.eligible, updated_at = now() RETURNING *"

    query, queryArgs, _ := db.BindNamed(upsertQuery, sliceOfStructs)

    query = db.Rebind(query)

    query = query + onConflictStatement

    rows, err := db.Queryx(query, queryArgs...)


查看完整回答
反對 回復(fù) 2022-08-24
?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個贊

在使用ON CONFLICT進(jìn)行批量插入時,我仍然遇到錯誤,因此在朋友的幫助下找到了一個對我有用的解決方案。這很難找到,但你可以在這里看到更多信息。https://www.prisma.io/dataguide/postgresql/inserting-and-modifying-data/insert-on-conflict#using-the-do-update-action

...DO UPDATE SET (var1, var2, var3, var4) = (excluded.var1, excluded.var2, excluded.var3, excluded.var4)

那么你應(yīng)該能夠做到這一點(diǎn)

_, err := db.NamedExecContext(ctx, query, sliceObj)

當(dāng)然,如果您不想,則不需要使用上下文


查看完整回答
反對 回復(fù) 2022-08-24
  • 2 回答
  • 0 關(guān)注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號