使用pg-promise转换值时出现奇怪的错误

问题描述 投票:0回答:1

我正在尝试使用pg-promise版本9.2.1执行此查询,并与Postgres 9.5进行通信

当我通过psql CLI或Postico运行它时,以下所有查询均有效,而当我从pg-promise运行它时则无效。

我从此查询开始(我知道,对字段使用pg关键字是不好的,但对于旧版本来说是这样:]

await db.many(
`SELECT * FROM "${schemaName}".versions
  UNION
  SELECT * FROM "${schemaName}".z_transfer_metadata
  UNION
  SELECT 'version' AS key, "version"::varchar AS value FROM "${schemaName}".modules WHERE parent_id IS NULL`)

我将从节点收到此错误:

error: syntax error at or near "      SELECT"
 at Connection.parseE (/app/node_modules/pg/lib/connection.js:604:11)
 at Connection.parseMessage (/app/node_modules/pg/lib/connection.js:401:19)

和这从PG:

ERROR:  UNION types character varying and bigint cannot be matched at character 133
STATEMENT:  SELECT * FROM "the_schema".versions 
           UNION 
           SELECT * FROM "the_schema".z_transfer_metadata
           UNION
           SELECT "version" as key, version::varchar as value FROM "the_schema".modules WHERE parent_id IS NULL

在添加第三个联合选择之前,该查询已开始工作,因此我将其简化为该查询:

`SELECT 'version' AS key, "version"::varchar AS value FROM "${schemaName}".modules WHERE parent_id IS NULL`

但随后PG给了我这个错误:

ERROR:  syntax error at or near "::" at character 35
STATEMENT:  SELECT 'version' AS key, "version"::varchar AS value FROM "the_schema".modules WHERE parent_id IS NULL

我已经尝试了多种变体形式,包括使用CAST并转义了'version'周围的引号,并且大多数转义变体都是本机工作的,而并非通过pg-promise。

ERROR:  syntax error at or near "AS" at character 41
STATEMENT:  SELECT 'version' AS key, CAST("version" AS TEXT) AS value FROM "the_schema".modules WHERE parent_id IS NULL

如何从pg-promise运行此查询?

postgresql postgresql-9.5 pg-promise
1个回答
1
投票

原来我在查询中有无效字符,这导致了非常奇怪的输出,如:

© www.soinside.com 2019 - 2024. All rights reserved.