[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Postgre vs MySQL: триггеры
Страницы: 1, 2
sergeiss
Цитата (S.Chushkin @ 21.11.2014 - 21:55)
Да хоть миллионы, - нет проблем.

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

В п.6 в самом первом сообщении темы, в приведенном в качестве примера триггере вставки, данные раскладываются в несколько таблиц!!! Это города, ж/д станции, телефоны, мейлы и люди, к которым это всё относится. Туда, в триггер, попадают данные при загрузке строки, они разбираются на части, анализируются. Если нужные данные имеются, то просто получаем айди записи. Если не имеются, то создаем запись и получаем айди записи. И так по каждой таблице в связке.
Почему триггер на вьюшку тут нужен? Да потому, что она (вьюшка), по сути, работает как таблица. Мы можем данные из нее получить (джойнятся из всех 5 таблиц), либо вставить (триггер корректно разложит "по полочкам", т.е. по таблицам).

Для вставки во все 5 таблиц не поможет ни один из указанных тобой 4-х вариантов.

На всякий случай, приведу код созданию вьюхи (может быть, надо было это сделать с самого начала)
CREATE OR REPLACE VIEW people_info AS 
SELECT
st.station, p.full_name, ph.phone, p.info, p.created, p.modified, t.town, m.mail
FROM people p
FULL JOIN phone ph USING (id_phone)
FULL JOIN station st USING (id_station)
FULL JOIN town t USING (id_town)
FULL JOIN mail m USING (id_mail);

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

PS. Кстати. Все эти таблицы, вьюха и триггер были ранее созданы мной как раз для того, чтобы одному человеку объяснить принципы работы триггера с вьюхой в Постгре :) Теперь вот и второй раз они очень даже пригодились.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
S.Chushkin
Цитата (sergeiss @ 21.11.2014 - 20:56)
Какой итоговый счет по триггерам будет, по-твоему?

Если учитывать версию 5.7, то 4:1, если нет - 4:0 - пп. 2,6 не учитываем.
п.2 - отнесён к п.3, п.6 - я считаю особенность бесполезной, практически. Не помню, чтобы у меня когда-то возникало желание повесить тригер на VIEW.
п.с.
Вообще, можно единичку добавить для mySQL, т.к. часть пунктов он выполняет частично.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
twin
Цитата (S.Chushkin @ 21.11.2014 - 17:59)
Цитата (twin @ 21.11.2014 - 21:16)
Однако совсем недавно мне пришлось эмулировать JOIN на PHP. ... Когда генерация страницы упала с 20(!!!) секунд до 0,02, я был счастлив.

1000 раз? Хм, однозначно запрос был составлен неправильно.

А я и не спорю. Изначально неправильно. Потому и пришлось вытаскивать быстрый результат и "долго" обрабатывать.

Мускул бы обработал это несколько быстрее, если бы не некоторые нюансы. Таблица постоянно модифицировалась. Дожидаться конца модификаций - большое время. А оно и не надо было, статистика текущего момента.

Кто мне скажет про многопоточность InnoDB - убъю нахрен. Сначала разберитесь.

sergeiss
Цитата
в данной теме в первую очередь про триггеры речь идет.
Таки да!
Но я и молчал, пока не задели общие интересы.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sergeiss
ОК, пусть будет 4:1 smile.gif

Но насчет п.6 (триггеры на вьюхи) ты не прав. Это очень мощная возможность. Естественно, что она не нужна всегда и везде. Но в серьёзных приложениях ей нужно пользоваться.
Цитата (S.Chushkin @ 21.11.2014 - 22:19)
Не помню, чтобы у меня когда-то возникало желание повесить тригер на VIEW.

При работе в Мускуле просто-напросто не было такой возможности. Потому и желания не возникало.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
mvg
Я думаю что придет Oracle и всем вломит, однако пока этого не случилось....

Плохо что в мускуле плюшки вроде триггеров и хранимых процедур только для рута доступны что категорически не подходит для виртуального хостинга...
twin
Цитата (sergeiss @ 21.11.2014 - 18:33)

Цитата (S.Chushkin @ 21.11.2014 - 22:19)
Не помню, чтобы у меня когда-то возникало желание повесить тригер на VIEW.

При работе в Мускуле просто-напросто не было такой возможности. Потому и желания не возникало.

На нет и суда нет. Об чем речь то вообще? Если бы, да кабы, да во рту росли грибы, тогда бы был не рот, а был бы целый огород.

У меня любимая функция в php - empty(). Мне очень нехватает обратной, давайте холивар разведем.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sergeiss
Цитата (mvg @ 21.11.2014 - 22:35)
Плохо что в мускуле плюшки вроде триггеров и хранимых процедур только для рута доступны

Почему "только для рута"??? Дай права на триггеры любому юзеру и работай с ними. Там специфика в том, что команда "GRANT TRIGGER" может быть запущена только с того сервера, где находится Мускуль. Ни с какого удаленного терминала нельзя это сделать. Но это, по-моему, единственное ограничение.

Цитата (twin @ 21.11.2014 - 22:47)
На нет и суда нет. Об чем речь то вообще?

Речь о том, что в Постгре такая возможность есть и ее можно (нужно) использовать smile.gif А больше - ни о чем речи нет.
Вообще, изначально эта тема (о сравнении) появилась с неделю тому назад, когда я сравнил Постгре и Мускуль, а мне сказали "ты не умничай, а пальцОм ткни, что такое Постгре и что он может". Что я и делаю.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
S.Chushkin
Цитата (sergeiss @ 21.11.2014 - 22:13)
Ты не понял, по-моему, о чем я говорю - судя по твоим вариантам. Я же говорю не о том, что в одну таблицу данные вставить. А о том, что данные раскидываются в разные таблицы!

Да понял.
Все варианты приемлемы для любого числа таблиц. Просто оптимальная применимость разная.
Последний наиболее подходящий и наиболее быстр для множества таблиц - 1 create table; + 1 load data; + insert столько, сколько таблиц; + 1 drop table.
По примеру для последнего варианта:
- Сначала загружаем в people :
insert ... select ...
- затем в phone :
insert ...
select ... from таблица, people
where people.id >= last_insert_id() and people.человек = таблица.человек
...
- и т.д.

Поштучно потому, что в mySQL нет возможности вставки сразу в несколько таблиц. В PG кажется тоже.

Запрос выполниться быстро - ~20-30 тысяч вставок/сек с ограничением по диску. (надеюсь понятно, что речь всегда идёт про InnoDB)


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
S.Chushkin
Цитата (sergeiss @ 21.11.2014 - 22:33)
При работе в Мускуле просто-напросто не было такой возможности. Потому и желания не возникало.

Не совсем так: сейчас я работаю с mySQL, чуть раньше работал и с PG, ещё раньше немного MS SQL, SQL Anywhere.
Вероятно Вы правы - просто не было и нет потребности. Может будет ... когда-нибудь. smile.gif

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.