如何在Postgres的预处理语句中选择UUID?

4

我正在尝试基于UUID选择用户:

const client = await this.pg.connect()
const { rowsAct } = await client.query(`SELECT * FROM users WHERE uid=$1`, [
  userUUID
])

我也尝试过不使用变量:

const client = await this.pg.connect()
const { rowsAct } = await client.query(`SELECT * FROM users WHERE uid=$1`, [
  '4fcf0ca3-4e26-40a9-bbe5-78ff8fdb6e0f'
])

我尝试使用 ::uuid 转换,但可能做错了。返回的 rowsAct 总是未定义。
我验证了 userUUID 变量已被填充,并且是一个有效的 uuid: console.log(typeof userUUID) // 字符串
我做错了什么?如何正确地从 UUID 选择一行?
谢谢!
1个回答

2
在应用::uuid类型转换之前,您需要将参数括在括号中,以便准备好的语句可以正确地插入参数。
SELECT * FROM users WHERE uid = ($1)::uuid

您也可以将列本身转换为text,但性能较差,因为查询将不得不转换每一行。
SELECT * FROM users WHERE uid::text = $1

第一个更好,因为它可以利用uid上的索引。 - user330315
哦,谢谢,我还在为那个问题苦恼呢!:D - HypeWolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接