Go语言 sql:转换参数$1类型:不支持的类型[]uuid.UUID,数组的切片

eagi6jfj  于 2023-04-09  发布在  Go
关注(0)|答案(1)|浏览(183)

在postgresql中进行一些插入,其中表结构是

CREATE TABLE user_subservices(
    user_id        uuid,
    subservice_id  uuid
);

我正在传递一个user_id数组和一个subservice_id
q:=INSERT INTO user_subservices (user_id,subservice_id) VALUES (unnest(Array[$1]::uuid[]),$2)
$1传递[]uuid.UUID,为$2传递单个uuid
我用gorm来运行那些查询

err := db.dbConn.DB.Debug().Exec(q, users, Id).Error

在debug中我得到:

INSERT INTO user_subservices (user_id,subservice_id) VALUES  (unnest(Array['[8bf23c03-4112-4097-a352-b567d5a00052 9epolf4b-ff4a-49ef-bojd-2890ff3a7yhf]']::uuid[]),'00uj9000-0100-0120-0000-034000000068')

它没有作为一个合适的数组来插入
有任何解决方案可以插入??

njthzxwz

njthzxwz1#

在调试日志中,这是操作中使用的SQL查询:

INSERT INTO user_subservices (user_id, subservice_id)
VALUES (
    unnest(Array('[8bf23c03-4112-4097-a352-b567d5a00052 9epolf4b-ff4a-49ef-bojd-2890ff3a7yhf]')::uuid[]),
    '00uj9000-0100-0120-0000-034000000068'
)

这是一个不正确的查询,正确的查询应该是:

INSERT INTO user_subservices (user_id, subservice_id) 
VALUES (
    unnest(Array['8bf23c03-4112-4097-a352-b567d5a00052', '9epolf4b-ff4a-49ef-bojd-2890ff3a7yhf']::uuid[]),
    '00uj9000-0100-0120-0000-034000000068'
)

请看引号(')和逗号(,)的位置,还有Array()的语法不正确,应该是Array[]
除此之外,我还看到了您的查询的另一个问题。两个UUID无效:

  • 9epolf4b-ff4a-49ef-bojd-2890ff3a7yhf
  • 00uj9000-0100-0120-0000-034000000068

即使在修复查询之后,您也可能得到错误SQL Error [22P02]: ERROR: invalid input syntax for type uuid: "00uj9000-0100-0120-0000-034000000068"

相关问题