在我的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 []string
row.Scan(..., (*pq.StringArray)(&channel.OrganizationIds))
- 1 回答
- 0 關注
- 103 瀏覽
添加回答
舉報
0/150
提交
取消