亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何在Golang中正確掃描array_agg函數的結果?

如何在Golang中正確掃描array_agg函數的結果?

Go
白板的微信 2022-08-24 15:43:38
在我的Golang(1.15)應用程序中,我使用sqlx包來處理PostgreSQL數據庫(PostgreSQL 12.5)。我的 SQL 請求有一個函數,該函數返回字符串數組,如果該數組為空,則返回 null。array_agg我正在嘗試此SQL請求的結果,但它在我的程序中引發了下一個錯誤:Scansql:列索引 3 上的掃描錯誤,名稱“organization_ids”:不支持的掃描,存儲驅動程序。將值類型字符串轉換為類型 *[]字符串代碼片段:type Channel struct {    ChannelId           *string   `db:"channel_id" json:"channelId"`    ChannelName         *string   `db:"channel_name" json:"channelName"`    OrganizationsIds    *[]string `db:"organizations_ids" json:"organizationsIds"`}var channel Channelrow := db.QueryRow(`    select        channels.channel_id::text,        channels.channel_name::text,        array_agg(distinct channels_organizations_relationship.organization_id)::text[] organizations_ids    from        channels    left join channels_organizations_relationship on        channels.channel_id = channels_organizations_relationship.channel_id    where        channels.channel_id = $1    group by        channels.channel_id    limit 1;`, *channelId)if err := row.Scan(&channel.ChannelId, &channel.ChannelName, &channel.OrganizationsIds); err != nil {    fmt.Println(err)}return &channel我還嘗試將結構中字段的數據類型更改為 github.com/lib/pq 包。在這種情況下,當我,我在我的程序中得到以下錯誤:OrganizationsIdsChannel*pg.StringArrayScansql:列索引 3 上的掃描錯誤,名稱“organizations_ids”:不支持的掃描,存儲驅動程序。將值字符串鍵入類型為 *[]pq。StringArray我的任務是向客戶端返回此列的字符串列表或 null/nil。有人可以解釋如何解決這種奇怪的行為嗎?
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

好吧,最后我找到了解決問題的方法。

我注意到該函數返回.我對SQL請求進行了一些更改,以返回而不是.我通過此更改進行:array_agg[null]null[null]

array_agg(distinct channels_organizations_relationship.organization_id) filter (where channels_organizations_relationship.organization_id is not null)

在本文中(Postgres返回[null]而不是[]表示連接表array_agg),您可以找到此問題的許多不同的解決方案。

然后,您可以使用以下解決方案之一:

1 個選項

我們可以在結構中使用,然后在掃描時執行此操作。OrganizationsIds pq.StringArray row.Scan(..., &channel.OrganizationIds

2 選項

我們可以在結構中使用,然后在掃描時執行此操作。OrganizationsIds []stringrow.Scan(..., (*pq.StringArray)(&channel.OrganizationIds))


查看完整回答
反對 回復 2022-08-24
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號