LINUX.ORG.RU

Как проверить все SQL запросы разом?

 ,


0

1

Здравствуйте

Есть папочка директория sql/, c файлами *.sql. В каждом файле одно или несколько SQL-выражений, с вкраплениями параметров ($1, $2, ..). (Эти файлы затем подгружаются в програму)

Подскажите, как бы перед компиляцией програмы проверить все файлы на синтаксическую корректрость? Т.е. скормить каждый из них постгресу и посмотреть выдаст ли ошибку. Или как-то иначе проверить

Deleted

Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

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

А это зависит от состояния базы в том числе. Соответственно, нужно иметь набор дампов с известным состоянием и подсовывать их перед запуском запросов. А это, ну, тесты, только через задницу сделанные.

Deleted
()

вдруг у консольного клиента постгреса есть опция командной строки для проверки синтаксиса

Harald ★★★★★
()

Никак. Ты же не знаешь что вместо параметров подставить.

urxvt ★★★★★
()
Ответ на: комментарий от anonymous

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

Harald ★★★★★
()
Ответ на: комментарий от Deleted

А это зависит от состояния базы в том числе

Выполнение запросов в любом случае от состояния базы зависит.

WitcherGeralt ★★
()
Ответ на: комментарий от Wizard_

Но это же почти без толку. В запросе могут быть опечатки в названиях таблиц или колонок, запрос в принципе может быть некорректным. И даже если он однажды был проверен, это не спасёт от деградаций, структура БД может меняться.

WitcherGeralt ★★
()

Ненеужно.

Раз в SQL запросах есть параметры, значит наверно автор программы сначала составил запросы без параметров и проверил их, а потом добавил параметры. Тогда проверка запросов - дело автора программы.

Хотя бывает, что параметры добавляются без программирования - например, если SQL запрос в отчёте, то параметр добавляется в генераторе отчётов. В этом случае также сначала автор отчёта проверяет запрос без параметров, а потом добавляет параметры. Можно и самому проверить в этом же генераторе отчётов, но тогда это дело автора отчётов - проверить правильность.

В общем, кто составил SQL запросы, с того и спрашивать.

Partisan ★★★★★
()
Ответ на: комментарий от Partisan

наверно автор программы сначала составил запросы без параметров и проверил их, а потом добавил параметры. Тогда проверка запросов - дело автора программы.

Ха-ха.

В общем, кто составил SQL запросы, с того и спрашивать.

Ещё раз ха-ха.

Legioner ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Мир несовершенен, серебряной пули нет, а простой синтаксический анализатор запросов может спасти от некоторых опечаток и глупых ошибок при их составлении.

Wizard_ ★★★★★
()
Ответ на: комментарий от Wizard_

Если ТС нужно притвориться, что есть тестирование, то сойдёт, но если ему действительно нужно тестирование, то это курам на смех.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

С другой стороны, запускать тесты перед каждой компиляцией слишком накладно. А постгре-специфичный синтаксис наверное никакой редактор не проверит. Только сам постгре

Deleted
()
Ответ на: комментарий от Wizard_

Похоже действительно то что надо. Спасибо

Deleted
()
Ответ на: комментарий от Deleted

тесты перед каждой компиляцией слишком накладно

Тестируй при пуше в хотя бы, не так уж и накладно.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

всегда применимо, всегда удобнее, но не серебряная пуля - всё равно код хранимых процедур должен кто-то проверять

next_time ★★★★★
()
Ответ на: комментарий от RazrFalcon

ORM не даст сам по себе статических гарантий, вот если писать хранимки на вменяемых языках, а не на самом SQL, благо любая БД это умеет - тогда эти гарантии будут сами по себе

но так писать все боятся - я хз, почему

next_time ★★★★★
()
Ответ на: комментарий от next_time

Откровенный тупой бред порешь. Если у тебя не совсем прибито воображение, попробуй всё же маленько подумать почему не всегда применимо. Если не придумаешь, дам пример из личной практики.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Ага, от того, что в последней миграции была дропнута колонка, которая есть в запросе. Магия-то какая, чего только раст животворящий ни умеет!

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от next_time

ORM не даст сам по себе статических гарантий

Нормальная - даст. См. rust diesel.

RazrFalcon ★★★★★
()
Ответ на: комментарий от Deleted

Действительно, забыл. Она слишком мерзкая, я всегда стороной обходил.

WitcherGeralt ★★
()
Ответ на: комментарий от Deleted

Мне больше всего нравилась такая тема: на прошлой работе главный инженер запилил библиотеку для диффов эталонной схемы из репозитория и схемы в живой БД (MySQL) и генерации альтеров для неё. Я, в свою очередь спроектировал утилиту на её основе, для просмотра диффов, обновления, включая пре/пост-апдейт сценарии, с версионированием, накатыванием статики, короче, полный фарш. Правда, отдал я это под реализацию джуну, и мы потом ещё долго это расхлёбывали.

Удобно было нереально. Не без проблем, конечно, но очень круто иметь большую сложную схему в репозитоии as is, а не в виде классов в ORM или чёрт знает насколько актуальной диаграммы.

WitcherGeralt ★★
()
Ответ на: комментарий от Deleted

Чего? В репе свежак, а прод ещё только предстоит обновить. Либо ты меня не понял, либо я не понял твой вопрос.

WitcherGeralt ★★
()
Ответ на: комментарий от Deleted

А, тебя смутило слово «эталонная»?

Всё началось с того, что никакой схемы в репах не было вовсе. Когда я туда пришел, БД ручками раскатывали и потом так же правили. Так что да, в БД на всех установках действительно было рандомное не пойми что. Когда отровняли, это просто стало инструментом для обновлений.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

БД ручками раскатывали и потом так же правили

Вспомнилась история, как переезжали на новую версию одного российского ПО для СКУД. Менеджер заявил «Сотрудников можете экспортировать в CSV. А если нужно всю информацию сохранить, то за $500 наш програмист подключится по тимвьюверу и обновит базу»

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Да, у меня примерно та и было. Админы ходили по тимвьюеру на чью-то машину и ручками копировали туда пакеты (в которых даже нормально зависимости не были прописаны), оттуда уже на сервер через putty, а там абы как за полдня умудрялись что-нибудь обновить.

Разгребание этих конюшен — пока самое увлекательное с чем я сталкивался.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от next_time

Ванга из тебя так себе. Я пилил генератор отчётов, где одним из источников данных была БД. Шаблоны и запросы писались и поставлялись отдельно от программы.

WitcherGeralt ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.