我正在尝试使用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运行此查询?
原来我在查询中有无效字符,这导致了非常奇怪的输出,如: