@farit82

Golang jetbrains не читает БД в sql?

Привет. Почему у меня в golang jetbrains не читается sql запрос например select * from "Groups" Ошибка в Groups. Чтоб исправить ошибку пришлось обернуть в кавычки.\"Groups"\. Кто нибудь знает решения или сталкивался с таким. Дальше будут сложнее запросы? и я не смогу уже решить всё ошибки так просто.
fora8284 на форуме Обратить внимание администрации на это сообщение
  • Вопрос задан
  • 155 просмотров
Пригласить эксперта
Ответы на вопрос 2
@deliro
1. Goland, а не Golang. Golang — это язык, а то, что от JetBrains — IDE с именем Goland
2. Изучать синтаксис SQL. Никакого отношения к Golan(d|g) "ошибка" не имеет
3.
Дальше будут сложнее запросы?
То, что ты написал — самый элементарный запрос. Проще только SELECT 1; Очевидно, будут сложнее
Ответ написан
Комментировать
@galaxy
Если я правильно понял вопрос (а это непросто), то потому что язык SQL - нечувствителен к регистру, т.е. следующие запросы эквивалентны:
select * from Groups;
select * from groups;
select * from GROUPS;
SELECT * FROM groups;
SeLeCt * FrOm GrOuPs;


Если вы берете название таблицы/колонки (или иного объекта БД) в кавычки, он становится (по крайней мере, согласно SQL стандарту) case-sensitive, т.е. "group"/"Groups"/"gRoUps" - будут разными идентификаторами (например, все три такие таблицы могут существовать в БД одновременно).
Если кавычек нет, идентификаторы по стандарту сравниваются после приведения к upper-case. В Postgres это немного не так: там идентификаторы без кавычек приводятся к lower-case.

Т.е. другими словами, запрос create table Groups ... создаст в Postgres таблицу с именем groups. Запрос select * from GrOupS; будет также искать таблицу с именем groups.
При использовании кавычек запрос create table "Groups" ... создаст таблицу с именем Groups. Запрос select * from "GrOupS"; будет также искать таблицу с именем GrOupS.
spoiler
Речь выше только про Postgresql. Другие СУБД могут вести (и ведут) себя по-другому. Так, в mysql поведение идентификаторов зависит от ОС (точнее, от того, case sensitive/insensitive ее файловая система) и от конфигурации БД.


Обычно это не вызывает проблем, пока вы не начинаете использовать закавыченные и незакавыченные идентификаторы одновременно. Например, что скорее всего имеет место в вашем случае, таблица создается запросом
create table Groups ...
-- реальное имя таблицы - groups

Когда же вы делаете запрос select * from "Groups", обращение идет к несуществующей таблице Groups.

В общем, разберитесь, какое название у таблицы в БД (в psql команда \dt, или смотрите свойства таблицы в своей среде). Если оно не lower-case, используйте кавычки с точным названием (например, select * from "GROUPS"), в противном случае лучше обходиться вообще без кавычек.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы