簡體   English   中英

如何在 Node / pg-pool 中參數化 Postgres 數組值

[英]How do I parameterize a Postgres array value in Node / pg-pool

我正在使用包含運算符@>查詢數組列( style text[] )。 我的原始查詢是:

SELECT * FROM songs WHERE style @> '{Acoustic}'

當我將它放入節點(使用pg-pool )並嘗試對其進行參數化時,值引用周圍的大括號似乎阻止它正常工作。 請注意以下示例:

const style = 'Acoustic';

// this works, but I don't want to in-line like this:
const { rows } = await pool.query(`SELECT * FROM songs WHERE style @> '{` + style + `}'`);

// this fails with 'error: bind message supplies 1 parameters, but prepared statement "" requires 0'
const { rows } = await pool.query(`SELECT * FROM songs WHERE style @> '{$1}'`, [style]);

參數化這個的正確方法是什么?

const { rows } = await pool.query(`SELECT * FROM songs WHERE style @> '{$1}'`, [style]);

此處的 $1 用引號引起來,僅被視為字符串的一部分,而不是可替換的變量。 如果您希望傳入一個標量並將其視為一個數組,您應該可以這樣做:

const { rows } = await pool.query(`SELECT * FROM songs WHERE style @> ARRAY[$1]`, [style]);

另一種方法可能是讓 node.js 直接綁定一個數組(未測試):

const { rows } = await pool.query(`SELECT * FROM songs WHERE style @> $1`, [[style]]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM