Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизЛучшая СУБД для научных проектов. Найти похожие ветки
← →
Anatoly Podgoretsky © (2010-03-24 09:15) [40]> PEAKTOP (24.03.2010 04:47:39) [39]
Которое лежит рядом с программой? Или как?
← →
pasha_golub © (2010-03-24 09:49) [41]
> Паш, я знаю, что ты по Снонопотаму "зажигаешь", поэтому
> холиварить не будем :)
Да я ж никогда! :) Мир, дружба, жвачка!
> Но зато мы более лояльно относимся к "слабому" железу, я
> имею в виду производительность в целом, а не просто "взлетит-
> не взлетит".
На слабом железе можно собрать слона с нужными настройками. Но смысл?
> И Embedded у нас тоже есть - а значит можно не озадачивать
> юзера вопросом "что такое установка SQL-сервера".
Embedded"a не будет у слонов. Сей вопрос периодически всплывает, и вопрошающему тут же суют под нос тезис, что Слон - это для того. С одной стороны жаль, с другой разрываться на несколько направлений смысла действительно нет.
> В общем, давайте жить дружно =)
Давайте! :)
← →
pasha_golub © (2010-03-24 09:51) [42]
> tesseract © (23.03.10 21:57) [38]
>
> И interbase может. А есть ли СМЫСЛ? Если нужны подобные
> расчеты - не проще ли не конопатиться и написать адекватную
> и намного более логичную двухзвенку ?
Тут вопрос как бы немного в другом. Например, триггеры на С явно быстрее, чем на хранимых языках. А триггер это часть серверной логики, как ни крути.
Аггрегатные функции тоже часть серверной логики. Всё упирается в планирование.
← →
tesseract © (2010-03-24 18:42) [43]
> Например, триггеры на С явно быстрее, чем на хранимых языках.
На С скомпилированных, или на С-Script? В принципе триггеры должны компилироваться и не терять в производительности. Хотя тут бабка натрое сказала - в логику работы БД нужно смотреть.
← →
pasha_golub © (2010-03-25 12:58) [44]
> tesseract © (24.03.10 18:42) [43]
Скомпилированные, конечно. Пример:CREATE OR REPLACE FUNCTION euc_cn_to_utf8(integer, integer, cstring, internal, integer)
RETURNS void AS
"$libdir/utf8_and_euc_cn", "euc_cn_to_utf8"
LANGUAGE "c" VOLATILE STRICT
COST 1;
$libdir/utf8_and_euc_cn - библиотека с функцией. В случае с Виндой utf8_and_euc_cn.dll, в случае с Линями utf8_and_euc_cn.so
euc_cn_to_utf8 - имя функции
← →
Romkin © (2010-03-25 16:12) [45]
DECLARE EXTERNAL FUNCTION bin_xor
INTEGER, INTEGER
RETURNS INTEGER BY VALUE
ENTRY_POINT "IB_UDF_bin_xor" MODULE_NAME "ib_udf";
А зачем триггер-то на С писать? ЧТо быстрее будет - так очень вряд ли.
← →
PEAKTOP © (2010-03-25 16:52) [46]pasha_golub © (25.03.10 12:58) [44]
> Скомпилированные, конечно. Пример:
А ты часом функции ни с чем не попутал ?
Внешние функции (UDF - User Defined Functions), которые подключаются из DLL/SO - это одно, это было реализовано еще даже не в Firebird, а в дедушке InterBase.
А вот хранимые процедуры/триггеры/PSQL-блоки на внешних языках - это совсем другое. Например, как у вас (Слоноводов) это сделано на Перловке или Питоне.
CREATE FUNCTION pymax (a integer, b integer)
RETURNS integer
AS $$
if (a is None) or (b is None):
return None
if a > b:
return a
return b
$$ LANGUAGE plpythonu;
или
CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
return "SKIP"; # skip INSERT/UPDATE command
} elsif ($_TD->{new}{v} ne "immortal") {
$_TD->{new}{v} .= "(modified by trigger)";
return "MODIFY"; # modify row and execute INSERT/UPDATE command
} else {
return; # execute INSERT/UPDATE command
}
$$ LANGUAGE plperl;
← →
tesseract © (2010-03-25 17:45) [47]
> блоки на внешних языках - это совсем другое.
Фактически то-же самое. Какая разница как функция прилинкована - динамически или статически - она всё равно функция.
← →
pasha_golub © (2010-03-25 18:50) [48]
> PEAKTOP © (25.03.10 16:52) [46]
> А ты часом функции ни с чем не попутал ?
Не попутал. :) Функция есть функция. А вот триггер в контексте Постгреса - это событие, которое вызывает функцию-обработчик:CREATE FUNCTION trigf() RETURNS trigger
AS "filename"
LANGUAGE C;
CREATE TRIGGER tbefore BEFORE INSERT OR UPDATE OR DELETE ON ttest
FOR EACH ROW EXECUTE PROCEDURE trigf();
← →
PEAKTOP © (2010-03-26 12:26) [49]> А вот триггер в контексте Постгреса - это событие, которое вызывает функцию-обработчик:
А все, понял. Это просто произошла "подмена понятий" =)
у нас это блок (в данный момент писанный только на SQL), который будет выполнен при вставке/изменении/удалении строки. По сути, от ХП или PSQL-блока он ничем не отличается.
CREATE OR ALTER TRIGGER <TRIGGER_NAME> FOR <TABLE_NAME>
[ACTIVE | INACTIVE]
{BEFORE || AFTER}
{INSERT | UPDATE | DELETE}
[POSITION number]
AS
BEGIN
<TRIGGER_CODE>...
END
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.06 c