metaclass: (Default)
[personal profile] metaclass
Вот всю жизнь делаешь что-то, думаешь, что это очевидно, а потом берешь другую СУБД и оказывается, что там все сделано по другому.
Вот, например Postgresql vs Firebird:
1) В первом запросы отсылаются на сервер плейнтекстом, даже отпрепаренные с переменными. Во втором - сначала prepare, потом вызов полученного хендла с массивом параметров(бинарным) сколько надо раз. Впрочем, это может быть и особенность либы для доступа к Postgresql.
2) В первом транзакция одна на коннект, во втором - несколько на коннект.
3) В первом единственная ошибка в запросе в транзакции автоматом делает эту транзакцию невалидной целиком, и не дает ничего сделать до rollback. Во втором - транзакцию можно завершить, можно откатить, можно обработать ошибку и продолжить работать дальше. Не выполнится ровно один запрос. Чтобы имитировать такое в postgresql - нужно делать SAVEPOINT перед каждой query и откатываться на нее при ошибке.

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

Date: 2011-12-27 11:37 am (UTC)
From: [identity profile] gds.livejournal.com
1 -- в постгресе реально конченые prepared-операторы, в плохом смысле слова. но prepare там есть, и типа-хендлы тоже есть. но даже лучше бы не было, чтобы общность не нарушать.

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

3 -- уёбищно, факт.

Про дотнет-драйвера -- а что, до сих пор работаете с БД не через итераты и аппликативные функторы?

Date: 2011-12-27 11:42 am (UTC)
From: [identity profile] w00dy.livejournal.com
насчёт обработки ошибок - там жеж есть аналог try/catch

Date: 2011-12-27 11:44 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да нету там ничего подходящего.
Задача тупо "выполнить запрос, если он свалился - выполнить другой, который не свалится". Без всякого серверного кода, тупо из клиента. Хрен там.

Date: 2011-12-27 12:07 pm (UTC)
From: [identity profile] plumqqz.livejournal.com
"И в третий раз закинул он невод..."
$dbh->do(<<'EOL'
do $CODE$
begin
 select 1/0;
 raise notice 'Oops... 8-0';
 exception
  when division_by_zero then
    raise notice 'got exception';
  end;
$CODE$
EOL
);


Date: 2011-12-27 12:10 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А, оно умеет psql в запросах с клиента выполнять?

Date: 2011-12-27 12:13 pm (UTC)
From: [identity profile] plumqqz.livejournal.com
psql - это консольный клиент такой. Не, его не умеет.
А вот plpgsql умеет. В общем должно и всякое остальное уметь, но я не пробовал. Да, и я не знаю, как во всяком основном с транзакциями.

Date: 2011-12-27 12:14 pm (UTC)
From: [identity profile] plumqqz.livejournal.com
Тьфу. s/основном/остальном/;

Date: 2011-12-27 12:09 pm (UTC)
From: [identity profile] jakobz.livejournal.com
А вообще firebird - ок база? Как там перформанс и все такое? Просто ее как-то не особо юзают, при этом у нее вроде отличный набор фичей, и вообще она няшная. Почему так?

Date: 2011-12-27 12:10 pm (UTC)
From: [identity profile] plumqqz.livejournal.com
Попробуйте insert into tbl select * from tbl

Date: 2011-12-27 12:28 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, да, cursor stability вроде пока так и не пофиксили.

Date: 2011-12-27 12:18 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Перформанс чуть меньше среднего по больнице.
Фичей некоторых полезных нет - типа partitioning, репликации нормальной, итд итп. Из фич уровня языка разве что window functions не хватает, остальное весьма хорошо.
Со служебными средствами (человеческие логи, средства мониторинга, утилиты, текстовый бэкап) - печально, разработчики считают что это не нужно и занимаются больше внутренностями БД.
С документацией не очень хорошо. Комьюнити немного самоогороженное, нервничают когда про них пишут.

Очень удобна для мелких-средних проектов, с точки зрения программирования. Серверный код (императивное расширение sql) достаточно логично устроен, компонент доступа чуть более чем дохрена. Средств разработки под нее как бы не больше чем средств эксплуатации.

Date: 2011-12-27 12:45 pm (UTC)
From: [identity profile] j-sheridan.livejournal.com
На "человеческие логи" несколько завис, ибо воображение шустро нарисовало рубленных человеков, сложенных в штабеля ))

Date: 2011-12-29 01:54 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
Текстовый бэкап нормально получается с помощью IBExpert. Постоянно это дело не юзаю но использовал при переходе с версии на версию, и даже был удивлен скоростью заливки данных из скрипта. Я ожидал что будет намного медленнее.
Однако если сырцы триггеров и процедур из базы удалены - то конечно в таком случае текстовый бэкап не проканает.

Date: 2011-12-27 03:20 pm (UTC)
From: [identity profile] theiced.livejournal.com
firebird - вообще не база а кривая поделка насранная рукожопыми рашкиноидами. говнокод, отстуствие док, отсуттсвие саппорта, детские болезни.

Date: 2011-12-27 03:26 pm (UTC)
From: [identity profile] jakobz.livejournal.com
рашкиноидами?

Date: 2011-12-27 04:24 pm (UTC)
From: [identity profile] theiced.livejournal.com
да. чуть более чем все девелоперы - рашкиноиды.

Date: 2011-12-27 01:13 pm (UTC)
From: [identity profile] stdray.livejournal.com
А вы без всяких ОРМ справляетесь?

Date: 2011-12-27 02:39 pm (UTC)
From: [identity profile] w00dy.livejournal.com
Вменяемая кодогенерация? Чистый sql где-то пользуется в коде?

Date: 2011-12-27 03:59 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Раньше sql, счас кодогенерация.

Date: 2011-12-27 03:07 pm (UTC)
From: [identity profile] filonenko-mikhail.blogspot.com (from livejournal.com)
Судя по api libpq отсыл подготовленных данных имеет две версии текстовую и бинарную. Использование текстовой версии является предпочтительным, так как для нее гарантируется совместимость с другими версиями. Наверно это также стратегическое решение для упрощения написания драйверов на хост-языках без внешних зависимостей.

Возможно некоторые из ваших желаний могут быть реализованы на plpgsql. Функции на данном языке могу возвращать множество столбцов и строк. В 9-ой версии появились анонимные процедуры, возвращающие void (как в оракле). http://www.postgresql.org/docs/9.0/static/sql-do.html

Есть exceptions, которые можно использовать в plpgsql. http://www.postgresql.org/docs/9.1/interactive/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING

А кроссплатформенность - это да, миф.

Date: 2011-12-27 08:15 pm (UTC)
From: [identity profile] sorhed.livejournal.com
Учитывая количество червей в голове у Firebird (хотя мне нравилось ещё когда оно было Interbase), я даже как-то не представляю с чем собственно жить.

Пункты 1/2/3 везде так, или только под дотнетом?

Date: 2011-12-27 08:17 pm (UTC)
From: [identity profile] sorhed.livejournal.com
Бяда, конечно.

Date: 2011-12-27 11:07 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
1) Да, особенность либы. И по-моему, в ODBC это где-то настраивалось (типа крыжыков версия такая-то).
2) Да, TCP делает это лучшэ.

В первом запрос-внутри-запроса делается ровно как во всём остальном SQL:

делаешь JOIN (лучшэ OUTER, можно SUB-SELECT), order by ШАПКА, и складываешь всё до изменения этой шапки в её строки.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 23rd, 2025 12:00 pm
Powered by Dreamwidth Studios