Ошибка кода Datagrip с выделением некорректного поведения, но только в 1 БД

Я использую DataGrip для работы с кластером Redshift, который содержит множество баз данных, и подсветка ошибок выглядит немного странной. Предположим, у меня есть schema_1.table_a в базе данных dev и schema_2.table_b в базе данных test в том же кластере. Если я подключусь к dev и напишу запрос:

select * from schema_2.table_b ссылка на таблицу schema.table выделена (правильно) как ошибка, выходящая за рамки.

Однако, если я подключусь к базе данных test и напишу запрос:

select * from schema_1.table_a нет выделения ошибок, и DataGrip предлагает автозаполнение ссылки. Неудивительно, что во время выполнения запрос вызывает ошибку, поскольку test не содержит эту схему или таблицу.

Я нахожу это особенно странным, потому что это влияет только на одно соединение с базой данных. Расширяя этот пример, test ведет себя странно, но prod, scratch и т. Д. Все ведут себя так, как ожидалось, выделяя похожие ошибки вне области видимости.

Есть ли какие-то настройки области базы данных, которые я случайно изменил? Сводят меня с ума, пытаясь отладить код, когда я запускаю его в производство.

Удаление соединения Redshift и создание нового не влияет на поведение; возможно, это как-то связано с postgres / Redshift?


person jptk    schedule 21.05.2018    source источник
comment
Не могли бы вы поделиться снимком экрана с настройками вашего подключения? Какая база данных находится в поле «база данных»?   -  person moscas    schedule 21.05.2018
comment
Спасибо @moscas! Итак, в кластере есть несколько БД: - legacy с описанной выше проблемой - dev, test, prod, scratch и несколько других, у которых нет. Соединение устанавливается с помощью scratch в поле db - все остальное по умолчанию соответствует встроенному шаблону Redshift (и так же, как другие проекты Redshift, настроенные и работающие нормально). Стоит отметить, что это также изолировано для конкретного пользователя. Если вы вошли в систему как root в том же кластере, проблема исчезнет, ​​и legacy соединения будут вести себя так же, как и любые другие.   -  person jptk    schedule 21.05.2018


Ответы (1)


В настоящее время DataGrip выполняет более широкий поиск имен объектов в консоли. Он разрешает неквалифицированные имена как в базу данных / схему, которую вы настроили в настройках источника данных, так и в базу данных / схему, к которой вы подключились в консоли.

Причина проста: мы хотели, чтобы запросы к схеме по умолчанию, которые уже написаны, выделялись, даже когда вы переключаете схему (представьте, что весь ваш код сразу становится желтым). Но похоже, что это не подходит для баз данных PG.

Мы хотим сделать его настраиваемым. См. DBE-6456

person kassak    schedule 22.05.2018
comment
Почему бы вам не использовать show search_path для динамического получения путь поиска схемы - person a_horse_with_no_name; 22.05.2018
comment
Как я уже сказал, мы используем его, но также используем тот, который используется по умолчанию, чтобы продолжать выделять после переключения схемы. - person kassak; 22.05.2018
comment
Спасибо за понимание @kassak цените помощь! Несколько соображений: 1. Похоже, что на проблему не влияет изменение базы данных по умолчанию в настройках источника базы данных или даже настройка нового источника данных для того же пользователя. На данный момент (расширяя приведенный выше пример) настройки источника установлены на scratch, я подключен к legacy и получаю предложения от баз данных src и dev. 2. Как упоминалось выше, это только для одного пользователя - в том же кластере, использующем пользователя root, предложения остаются ограниченными БД, к которой, как и ожидалось, подключена консоль. - person jptk; 22.05.2018
comment
@jptk Есть ли у вас что-нибудь в области разрешения SQL в настройках? - person kassak; 23.05.2018
comment
@kassak нет, там вообще ничего нет - просто поведение по умолчанию - person jptk; 24.05.2018
comment
пожалуйста, создайте проблему со скриншотами настроек источника данных и консоли с неработающим завершением. я взгляну - person kassak; 24.05.2018