Redshift - выбор имени таблицы запросов в двойных кавычках не работает - PullRequest
0 голосов
/ 12 декабря 2018

Я пишу модульные тесты, где я использую H2 DB в памяти для проверки логики.Фактический код выполняется с помощью красного смещения, так как красный смещение использует драйвер psql JDBC. Я выбрал H2 в качестве обходного пути.

Но в моем имени таблицы красного смещения есть оператор точки (".").пример:

select * from emp.vikas;

В модульном тесте запрос не выполняется с сообщением "схема 'emp' не найдена".В качестве обходного пути я добавил двойные кавычки к имени таблицы в запросе.

Но теперь запрос на красное смещение завершается неудачно при выполнении реального кода.(Не модульный тест), говоря, что "отношение" emp.vikas "не существует"

У меня вопрос, как у нас может быть запущен контрольный пример для запросов красного смещения?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

как у нас может быть запущен тестовый пример для запросов красного смещения?

у вас есть как минимум следующие опции:

  1. запустить ваши тестына красное смещение.никакой другой продукт не даст вам такой же API.настроить такую ​​среду немного сложнее, может быть, это будет стоить денег, но это единственный способ получить действительно надежные тесты

  2. найти продукт, разработанный для имитации красного смещения.некоторые продукты имеют локальные версии.как локальный DynamoDB, moto , localalstack .уровень доверия будет зависеть от этого решения, но этого может быть достаточно для многих случаев использования

  3. сделает ваш код достаточно умным для адаптации к различным хранилищам.Если вы знаете, что разница между API и запросами тривиальна, не задавайте жестко свои запросы, а используйте какой-нибудь конструктор / переводчик запросов, который обнаружит хранилище и преобразует запрос, используя правильный диалект (например, добавление кавычек).эта часть кода не будет тестироваться в вашем производственном хранилище, но, возможно, она достаточно мала и изменяется настолько редко, что не стоит тратить деньги на правильные тесты реального хранилища

  4. не тестироватьЭто.возможно, этот код никогда не изменится, может быть, ручных тестов, проведенных один раз, будет достаточно и дешевле, может быть, этого достаточно, чтобы проверить, содержат ли все строки запроса кавычки, может быть, эта конкретная часть этого конкретного приложения не настолько важна, чтобы тратить столько времени напри написании этих довольно дорогих тестов

  5. используйте некоторую смесь всех вышеперечисленных методов

0 голосов
/ 12 декабря 2018

В Redshift вы используете " для цитирования имен отношений (таблиц / представлений и т. Д.) - это полезно, если ваше отношение содержит специальные символы (например, .) или сталкивается с ключевыми словами (group, table).

Также в Redshift вы можете ссылаться на отношение, используя обозначение schema.relation_name или database.schema.relation_name.Вы также можете использовать только relation_name, если ваши отношения находятся в схеме public или когда вам нужно правильно установить путь поиска , чтобы Redshift знал, на что вы ссылаетесь.

Например, если ваша база данных Redshift my_db, а схема my_schema и таблица my_table fou может ссылаться на нее следующим образом:

  • my_db.my_schema.my_table или
  • my_schema.my_table или
  • "my_db"."my_schema"."my_table" или
  • "my_schema"."my_table"

если ваше имя таблицы my.table the you должен процитировать его:

  • my_db.my_schema."my.table" или
  • my_schema."my.table" или
  • "my_db"."my_schema"."my.table" или
  • "my_schema"."my.table"

, если вы используете схему public и имя вашей таблицы emp.vikas, тогда вы ссылаетесь на нее:

  • my_db.public."emp.vikas" или
  • public."emp.vikas" или
  • "emp.vikas"

Если имя вашей схемы emp, а имя таблицы vikas и вы используете базу данных my_db, вы можете обратиться кВаш стол как:

  • my_db.emp.vikas или
  • emp.vikas или
  • "my_db"."emp"."vikas" или
  • "emp"."vikas"

надеюсь, что поможет

...