У меня был проект, который я отложил на некоторое время, но недавно я стряхнул с него пыль и обновил все пакеты NPM. Теперь, когда я пытаюсь сделать что-либо, связанное с базой данных (используя Knex/Postgresql), я получаю сообщение об ошибке:
error: column "*" does not exist
Это произойдет с, казалось бы, безобидным запросом, например:
select "*" from "some_table" where "id" = $1
Если я запускаю этот запрос непосредственно к БД:
select * from "some_table" where "id" = 1;
это работает нормально. Но независимо от того, что я пытаюсь сделать с knex, запускаю ли он обычный запрос или пытаюсь сбросить всю мою базу данных, я продолжаю получать эту, казалось бы, бессмысленную ошибку.
Кто-нибудь может объяснить, что это значит?
"*" отличается от *Скажите также, какой код вы пишете для knex для генерации этого запроса. Иначе нельзя сказать, почему происходит генерация такого запроса.
Часть проблемы заключается в том, что я не знаю, какой именно код является проблемой: все строки в stacktrace являются node_modules или системными вызовами, и снова я получаю сообщение об ошибке как при попытке запустить сайт, так и при попытке запустить миграцию (и на моем сайте есть много запросов, связанных с этой таблицей). Но благодаря ответу теперь я могу, по крайней мере, начать его отслеживать.





Двойные кавычки вокруг * заставляют интерпретировать его не как «все столбцы», а как столбец с таким же именем.
Я не совсем понимаю, почему мой код перешел от выбора * к выбору "*", просто из обновления npm, но, видимо, это то, что произошло, и я могу работать оттуда. Спасибо!
Просто дополнение для тех, кто читает это позже: я понял, что проблема заключалась в том, что Knex перешел от использования синтаксиса .select('*') для создания предложения SELECT * FROM ... к синтаксису просто .select(). Внесение этого изменения в код должно решить проблему.
knex.select().table('books') приведет к
select *- хотя это был не ваш вопрос, ;]