gds (gds) wrote,
gds
gds

postgresql

Постгрес удивляет, особенно по сравнению с ораклом.
1. Если есть таблица и функция, её использующая, то таблицу можно удалить, только заранее/одновременно удаляя функцию. В оракле удалить таблицу можно независимо от функций -- они просто пометятся как инвалидные, и перекомпиляция (при пересоздании таблицы) всё исправит.
2. Нет named arguments, которые позволили бы функцию вида myfunc(a varchar, b integer, c boolean) запускать как myfunc('asd', c => true, b => 123), и из-за попытки обойти это ограничение -- имеем п.3.
3. Не получилось prepare'ить оператор, содержащий честный pl/pgsql-блок вида:
declare
  r test_sp%rowtype;
begin
  r.the_num := 123;
  r.the_str := 'asd';
  test_sp(r);
end;

4. Удивительна логика исполнителя команд внутри pl/pgsql. Если функция имеет параметр с именем name (допустим, первый), и в функции есть оператор insert into table(id, name) values (123, 'asd'), то токен name заменится на $1 (и к нему будет привязано актуальное значение параметра при вызове функции). Налицо работа халявщиков, не понимающих, где токен является действительно токеном (именем столбца, например), а где является отсылкой к переменной.
5. Нет пакетов (то есть, нет инкапсуляции кода хранимых процедур). Вместо этого предлагают создавать схему, а вместо переменных пакета предлагают использовать временные таблицы. Элегантность на высшем уровне.
Замечу ещё раз: в оракле ничего из этой кривизны нет.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 15 comments