首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >准备好的语句不识别Postgres JS绑定的任何参数

准备好的语句不识别Postgres JS绑定的任何参数
EN

Stack Overflow用户
提问于 2018-04-30 16:55:20
回答 1查看 216关注 0票数 0

我正在尝试一次更新多个行。为此,我要做一份事先准备好的声明:

代码语言:javascript
运行
复制
WITH new_values (id, data, email) AS (
  VALUES ($1, $2, $3), ($4, $5, $6), ($7, $8, $9), ($10, $11, $12)
)
UPDATE prospects
  SET 
    data = new_values.data,
    email = new_values.email
  FROM new_values
  WHERE
    prospects.id = new_values.id
  RETURNING *

但我得到了以下错误:

代码语言:javascript
运行
复制
error: bind message supplies 12 parameters, but prepared statement "prospects-multi-update" requires 0
api-prospects_1       |     at Connection.parseE (/usr/src/app/node_modules/pg/lib/connection.js:546:11)
api-prospects_1       |     at Connection.parseMessage (/usr/src/app/node_modules/pg/lib/connection.js:371:19)
api-prospects_1       |     at Socket.<anonymous> (/usr/src/app/node_modules/pg/lib/connection.js:114:22)
api-prospects_1       |     at Socket.emit (events.js:180:13)
api-prospects_1       |     at addChunk (_stream_readable.js:274:12)
api-prospects_1       |     at readableAddChunk (_stream_readable.js:261:11)
api-prospects_1       |     at Socket.Readable.push (_stream_readable.js:218:10)
api-prospects_1       |     at TCP.onread (net.js:581:20)

我尝试过不同的查询(使用INSERT ... ON CONFLICT DO UPDATE),但它也是这样做的。

它只适用于直接的INSERT INTO查询。

编辑

下面是调用这个查询的代码:(我已经删除了字符串生成函数,因为它不是很有用)

代码语言:javascript
运行
复制
const upsertValues = async (entities) => {
  if (entities.length === 0) return []

  const client = pool.connect()

  const values = [...]
  const variables = [...]
  const setStatements = [...]

  const res = await client.query({
    name: `${resourceName}-multi-update`,
    test: `
      WITH new_values (id, ${columns}) AS (
        VALUES ${variables}
      )
      UPDATE prospects
        SET ${setStatements}
        FROM new_values
        WHERE
          prospects.id = new_values.id
        RETURNING *
    `,
    values: flatten(values),
  })

  return res.row || []
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 12:57:24

错误是由于准备语句的属性text被错误命名为test,因此引擎甚至找不到查询字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50104937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档