Странная ошибка при приведении значений с использованием pg-обещания - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь выполнить этот запрос с помощью pg-обещания версии 9.2.1, связываясь с Postgres 9.5

Все следующие запросы работают, когда я запускаю его через psql CLI или Postico,только когда я запускаю его из pg-обещания.

Я начал с этого запроса (я знаю, использование ключевых слов 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-обещание.

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-обещания?

1 Ответ

1 голос
/ 27 сентября 2019

Оказывается, у меня в запросе были недопустимые символы, что приводило к очень странным выводам, таким как:

23:17:31 error: relation "schema-d123.modules where parent_id is null" does not exist 
query: SELECT version FROM "schema-d123".modules WHERE parent_id IS NULL

(обратите внимание, как предложение where по какой-то причине было включено в имя отношения, несмотря на то, чтозапрос отображается правильно)

Оказывается, у меня в запросе как-то были неразрывные пробелы, которые я обнаружил, перемещая курсор по запросу по слову (опция + влево / вправо в VSCode).Я установил расширение Gremlins и обнаружил, что в запросе действительно были недопустимые символы:

gremlins

После повторного вводазапрос, все работало, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...