powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Определить типа сервера БД запросом(ами)
25 сообщений из 27, страница 1 из 2
Определить типа сервера БД запросом(ами)
    #37990577
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтина должна работать на зоопарке СУБД, так как логика там простая, скорее её даже нет вовсе, только тупо insert update delete select и иногда create table.

Раньше всегда в случае необходимости поддержки зоопарка "пропихивал" типа сервера из параметров подключения.
А вот на этот раз задумался, может можно этого избежать, и если да - то какой ценой.

Идея заключается в возможности парой запросов после подключения (ну скажем подключение через ODBC или DBX - так что большой разницы в параметрах нет) определить, что за зверя подсунули. Основывается идея на возможности придушить исключение после select @@version или select from dual или других подобных характерых запросах. Если это реально за пару запросов определить СУБД (и в идеале ещё и версию) - я тогда не буду пропихивать типа сервера, а определю это самостоятельно SQL-запросами.

Решение ищется для "большой пятёрки" + огнептица + мускуль + постгреса. Если будет работать для извратов типа мимера - тем лучше ))))

зы. Понимаю что брежу, но давайте назовём это спортивным интересом ))).
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990614
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецовну скажем подключение через ODBC или DBX - так что большой разницы в
параметрах нет
Ага. А та самая "маленькая разница в параметрах" и есть указание используемого драйвера,
то бишь СУБД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990617
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецовпосле подключения (ну скажем подключение через ODBC...

Интересно, как можно подключиться к чему-то через ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?!

ЗЫ. IMHO, в общем случае задача решения не имеет, если только тупо не пытаться перебирать драйвера "большой пятёрки" и производить попытку установить коннект с учетом необходимых параметров строки подключения для каждой из СУБД. Т.е. без диалога с пользователем не обойтись.
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990639
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin, из постановки задачи следует, чтодрайвер уже указан и настроен. А тут программисту захотелось узнать, что за БД ему подсунули, чтобы что-то простенькое в create/insert/update/delete/select подкрутить...
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990653
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinИнтересно, как можно подключиться к чему-то через ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?!
Ну конкретно тупо по настроенному системному алиасу. Надо лишь алиас, логин и пароль ))).
Да и хотелось бы попробовать без привязки к типу драйвера. Понятно что можно и параметры подключения понюхать, и класс объекта драйвера dbx поглядеть. Но, скажем так, спортивный интерес в голом SQL и реакции на его результат выполнения или факт невыполнения по ошибке.

pkarklinи производить попытку установить коннект
Давай допустим, что коннект уже есть. Поэтому задача по определнию имеет решение, и число запросов не более чем 8 в самом худшем случае (по числу проверяемых СУБД). С учётом select @@version и других, работающих более чем на одной СУБД, оно очевидно уменьшается. Вопрос в конкретных магических командах и результирующем минимуме числа таковых.

АнатоЛойчтобы что-то простенькое в create/insert/update/delete/select подкрутить...
Ну в общем да. Я конечно могу и тупо к системным таблицам попробовать обратиться, но хотелось бы решения проще, интуитивно кажется, что оно должно существовать и быть достаточно простым.

Если кому-то не нравится постановка про "спортивный интерес" - давайте модифицируем это как возможный вопрос на собеседовании ))))))))))))))))
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990655
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinчерез ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?!
Вот так на перле:
Код: php
1.
$dbh = DBI->connect('dbi:ODBC:GIS', 'sa', '', {AutoCommit => 1}) || die "Can't connect to server";
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990664
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовДавай допустим, что коннект уже есть.
В этом случае SQLGetInfo(), например, выдаст названия драйвера, СУБД и даже её версию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990683
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойиз постановки задачи следует, чтодрайвер уже указан и настроен. А тут программисту захотелось узнать, что за БД ему подсунули, чтобы что-то простенькое в create/insert/update/delete/select подкрутить...

Первое, что я бы спросил у программиста на собеседовании: "Если коннект установлен и драйвер уже указан, то как тебе могло придти в голову узнать, что за СУБД с помощью create/insert/update/delete/select".

Сергей Васкецов Если кому-то не нравится постановка про "спортивный интерес" - давайте модифицируем это как возможный вопрос на собеседовании ))))))))))))))))

Нет, уж, пусть вопрос останется спортивным.
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990685
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSQLGetInfo()
Нет привязки к ODBC API
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990687
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinЕсли коннект установлен и драйвер уже указан, то как тебе могло придти в голову узнать, что за СУБД с помощью create/insert/update/delete/select
Выше пример коннекта на перле. Догадаешься к какому серверу? )))
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990691
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовНет привязки к ODBC API
Ага, а запрос ты собрался отправлять телепатически, без API?.. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990696
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовВыше пример коннекта на перле. Догадаешься к какому серверу? )))

Учетная запись sa есть у MS SQL и у Sybase. Не догадываюсь...
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990697
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovзапрос ты собрался отправлять телепатически, без API?
Выше пример коннекта на перле.

зы. Я выше написал, что спортивный интерес в реализации проверки на голом SQL. Чтобы не зависеть ни от драйверов, ни от прочих транспортов и языка.
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990699
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinУчетная запись sa есть у MS SQL и у Sybase
А у каких-то других СУБД есть запрет на создание такого логина? )))
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990706
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовА у каких-то других СУБД есть запрет на создание такого логина? )))

Спасибо, кэп, нет.
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990711
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовВыше пример коннекта на перле.
И что? Тебе тупо лень поискать в документации по DBI аналогичную функцию?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990718
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТебе тупо лень поискать в документации по DBI аналогичную функцию?..
Не-а, задача немного другая )))
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990724
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовТебе тупо лень поискать в документации по DBI аналогичную функцию?..
Не-а, задача немного другая )))[/quot]

Тогда только запросы, котоые гарантированно выполняться только на одной из СУБД, которые бы возвращали для "правильной" СУБД всю необходимую информацию.
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990743
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinТогда только запросы, котоые гарантированно выполняться только на одной из СУБД
Кэп подказывает про select @@version )))
И я даже ещё не уверен, что у каких-нить постгресов или DB2 нет своего дополнительного формата комментариев. На этом тоже можно было бы попробовать сыграть. Я ж не со всеми работал, ща вот маны штудирую под пиво ))
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990746
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовКэп подказывает про select @@version )))
И я даже ещё не уверен, что у каких-нить постгресов или DB2 нет своего дополнительного формата комментариев. На этом тоже можно было бы попробовать сыграть. Я ж не со всеми работал, ща вот маны штудирую под пиво ))

Я тоже не совсеми. select @@version прокатит точно на MS SQL и Sybase.
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990751
Gallagher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для этого нужно знать/выбрать несколько специфичных фич, которые работают по разному в разных субд.
Первое что приходит на ум, проверить как работает MVCC, установив пару сессий. Можно определить поддерживаемые режимы изоляции транзакций (скорее всего один, дефолтовый, который будет выставлен на сессию через ODBC драйвер, если не указано иного). Но многое из этого, насколько мне известно, будет варьировать даже в пределах одной СУБД в зависимости от выбранного storage backend'а.
Второе, что приходит - покрутить запросики, но опять таки, ODBC драйвер скорее всего будет работать в режиме совместимости ANSI XY и зарезать любой SQL выпадающий из него. Если же ODBC драйвер тупо проксирует текст запроса без синтаксических проверок, то можно погонять какой-нибудь database-specific sql, как например select без from для mySQL или наличие dual для Oracle.
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990755
Gallagher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самым типичным мерилом будут различия в наличии/поведении скалярных функций. Для этого нужно создать табличку, опционально налить данных и погонять простой запрос с разными специфичными функциями
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990758
Gallagher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще, зная физические ограничения (если не жалко времени сразу после установления соединения) можно посоздавать структуры критических размеров (кол-во полей, типы данных) и тп . Но это уже за гранью DML.
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990771
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallagher, нужно что-то сильно проще.
Как вариант до которого допетрил - это при генерации скриптов из модели сделать что-то типа
Код: sql
1.
2.
select @@version as v
into DUAL


ну обломается - и хрен бы с ним.
Зато будет реальная польза от SELECT * FROM DUAL
...
Рейтинг: 0 / 0
Определить типа сервера БД запросом(ами)
    #37990808
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для MySQL раскопал вот что, типа код внутри /*!1 */ отработает начиная с версии 1:
Код: sql
1.
SELECT /*!1 'mysql' as f, */ * from DUAL


зы. есичо - не проверял )))
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Определить типа сервера БД запросом(ами)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]