在node-postgres中如何正确转义JSONB深度查询的参数
当绕过ORM直接向node-postgres发起查询时,有大量特殊边界问题需要注意。例如你可能已经遇到过小驼峰列(camelCaseColumns)必须放在双引号中,以及参数化类型转换的问题,相关示例代码如下:
client.query(`SELECT id, "authorFirstName", "authorLastName" FROM books WHERE isbn = $1::int`, [1444723448]) client.query(`SELECT id FROM books WHERE "authorLastName" = $1::string`, ['King'])
JSON和JSONB类型带来了另一类特殊问题。需要牢记的核心要点是:$1不只是变量占位符,它是独立信息单元的标识。
假设某张表中characters是JSONB类型的列,以下写法无法正常运行:
client.query( `SELECT id FROM books WHERE characters @> ([ {'name': $1::string} ])`, ['Roland Deschain'] )
该写法执行失败的原因是,此处的信息单元是JSON对象本身,而不是插入到文本块中的字符串。
内容的提问来源于stack exchange,提问作者Eric_WVGG
相关产品推荐
相关产品推荐

