@pgsql

Страница 993 из 1062
Terminator
19.09.2018
20:25:10
@zmirkaz будет жить. Поприветствуем!

Anatoliy будет жить. Поприветствуем!

Yaroslav
20.09.2018
08:13:30
Я вспомню RULES - мощнейшее средство в PostgreSQL.
А зря, зря. Можно так "напороть", что мало не покажется, причём запросто. :(

Google
Dmitry
20.09.2018
08:14:15
А зря, зря. Можно так "напороть", что мало не покажется, причём запросто. :(
Ну так везде можно "напороть", даже когда чайник кипятишь. Что же теперь, чай не пить? ?

Yaroslav
20.09.2018
08:15:35
Ну так везде можно "напороть", даже когда чайник кипятишь. Что же теперь, чай не пить? ?
Это уж скорее из серии: "что же теперь, взрывчатку дома не использовать?!" ;) http://blog.rhodiumtoad.org.uk/2010/06/21/the-rule-challenge/

Так вот для той цели, про которую спрашивали, видимо, требуется DO ALSO. И вот: All non-trivial rules are incorrect. I define “non-trivial” as follows: <skip> . Any rule using DO ALSO is non-trivial.

Yaroslav
20.09.2018
08:23:43
например?
Я ссылку уже дал, см. выше.

Dmitry
20.09.2018
08:34:39
Это уж скорее из серии: "что же теперь, взрывчатку дома не использовать?!" ;) http://blog.rhodiumtoad.org.uk/2010/06/21/the-rule-challenge/
Это всё понятно. Но в ряде случаев, правила оказываются гораздо эффективнее. Поэтому их используют без оглядки на возможные проблемы. Прямо как C используют для написания тех же расширений без оглядки на возможное падение сервера в случае ошибки, когда речь заходит про эффективность. Кому нужен безопасный питончик, если его использование в конкретной задаче снизит производительность на 3 порядка против C или C++? Никому. Разве что таким же медленным по жизни (есть одно подходящее слово в этом случае) ?

Yaroslav
20.09.2018
08:50:27
> Но в ряде случаев, правила оказываются гораздо эффективнее. Эффективность "решения", которое на самом деле не решает задачу, равна нулю. ;) > Кому нужен безопасный питончик, если его использование в конкретной задаче снизит производительность на 3 порядка против C или C++? Никому. Ну-ну. Что ж мы все в машинном коде-то не пишем? ;) (А дело-то всё во времени (деньгах), разве нет?) > Разве что таким же медленным по жизни (есть одно подходящее слово в этом случае) ? И это слово "профессионалы"? ;) ;) Интересный у Вас взгляд, вообще говоря... Базы данных гораздо "дороже" (в плане производительности) других подходов, которые вроде как решают ту же задачу (ну, в 99.99% случаев). И, тем не менее, многие пользуются...

Dmitry
20.09.2018
10:17:40
> Но в ряде случаев, правила оказываются гораздо эффективнее. Эффективность "решения", которое на самом деле не решает задачу, равна нулю. ;) > Кому нужен безопасный питончик, если его использование в конкретной задаче снизит производительность на 3 порядка против C или C++? Никому. Ну-ну. Что ж мы все в машинном коде-то не пишем? ;) (А дело-то всё во времени (деньгах), разве нет?) > Разве что таким же медленным по жизни (есть одно подходящее слово в этом случае) ? И это слово "профессионалы"? ;) ;) Интересный у Вас взгляд, вообще говоря... Базы данных гораздо "дороже" (в плане производительности) других подходов, которые вроде как решают ту же задачу (ну, в 99.99% случаев). И, тем не менее, многие пользуются...
В машинном коде не пишут, потому что это: a) неоправданно сложно; b) абсолютно непереносимо. Дело в деньгах и времени, да. Поэтому создали давно уже кросс-платформенный ассемблер, назвали его C. Компиляторы C научились генерить крайне эффективный машкод. Поэтому смысла писать в машкоде сейчас уже нет. Зато есть смысл писать на C или C++, когда речь заходит про эффективность. Да, это сложные инструменты. Но никто от них отказываться не будет, потому что по эффективности и возможностям ничего другого на горизонте не видно. Так же и с правилами из PostgreSQL. Кому нужна мощная и точная "пушка", тому чихать на какие-то там потенциальные проблемы. Речь об эффективности, т.е. о времени, т.е. о деньгах. С денег начали, ими и закончим. ?

Mike Chuguniy
20.09.2018
10:33:55
А вроде бы и не пятница...

Nort
20.09.2018
10:34:12
Ага, а уже понеслось

Yaroslav
20.09.2018
10:34:37
> Поэтому создали давно уже кросс-платформенный ассемблер, назвали его C. Компиляторы C научились генерить крайне эффективный машкод. Поэтому смысла писать в машкоде сейчас уже нет. Отчасти это верно. На уровне "отдельных элементов" код довольно эффективен. Тем не менее, есть приёмы, на которые "кросс-платформенный ассемблер" просто неспособен (самомодифицирующийся код, например, или хранение доп. информации в указателях (есть случаи, когда это безопасно, да)). К счастью, алгоритмов, эффективность которых зависит от этих приёмов, немного, к тому же, кое-что решает JIT. > Но никто от них отказываться не будет, потому что по эффективности и возможностям ничего другого на горизонте не видно. Никто — это сильное преувеличение. Опять-таки, зависит от того, что выгодно (чаще всего можно просто решить "железом"). Какие у них там уникальные возможности, кстати? > Так же и с правилами из PostgreSQL. Кому нужна мощная и точная "пушка", тому чихать на какие-то там потенциальные проблемы. Не вижу логики... Как Вы это вычисляете? Допустим, в какой то ситуации rules чуть производительнее триггеров, так что можно взять "железо" на 1000$ дешевле... а цена любой ошибки, к примеру, 10000$. Всё ещё стоит использовать? > С денег начали, ими и закончим. Непохоже как-то. :(

Dmitry
20.09.2018
10:51:58
> Поэтому создали давно уже кросс-платформенный ассемблер, назвали его C. Компиляторы C научились генерить крайне эффективный машкод. Поэтому смысла писать в машкоде сейчас уже нет. Отчасти это верно. На уровне "отдельных элементов" код довольно эффективен. Тем не менее, есть приёмы, на которые "кросс-платформенный ассемблер" просто неспособен (самомодифицирующийся код, например, или хранение доп. информации в указателях (есть случаи, когда это безопасно, да)). К счастью, алгоритмов, эффективность которых зависит от этих приёмов, немного, к тому же, кое-что решает JIT. > Но никто от них отказываться не будет, потому что по эффективности и возможностям ничего другого на горизонте не видно. Никто — это сильное преувеличение. Опять-таки, зависит от того, что выгодно (чаще всего можно просто решить "железом"). Какие у них там уникальные возможности, кстати? > Так же и с правилами из PostgreSQL. Кому нужна мощная и точная "пушка", тому чихать на какие-то там потенциальные проблемы. Не вижу логики... Как Вы это вычисляете? Допустим, в какой то ситуации rules чуть производительнее триггеров, так что можно взять "железо" на 1000$ дешевле... а цена любой ошибки, к примеру, 10000$. Всё ещё стоит использовать? > С денег начали, ими и закончим. Непохоже как-то. :(
Самомодифицирующийся код - это красивая легенда, от которой отказались даже в PostgreSQL. Изначально эта СУБД была написана на Lisp, в котором уж "самомодифицирующийся код" во все поля. Потом перешли на "кросс-платформенный ассемблер" и вздохнули с облегчением, потому как только на C удалось работать на низком уровне. Все расширения, требующие производительности (а это все официльные расширения и большинство неофициальных расширений) пишутся на C. Прекрасно обходятся без самомодифицирующихся возможностей. (От которых всё равно одни тормоза.) А как Вы вычисляете цену ошибки? Что это у Вас вдруг за величины $1000 vs $10000?

Yaroslav
20.09.2018
11:00:41
> Самомодифицирующийся код - это красивая легенда, от которой отказались даже в PostgreSQL. Какая ещё легенда!? ;) Есть алгоритмы, эффективная реализация которых без него невозможна (и их есть даже в TAOCP, не говоря уже о прочих областях). > Прекрасно обходятся без самомодифицирующихся возможностей. (От которых всё равно одни тормоза.) А JIT в v11 зачем добавляют, в таком случае? ;) > А как Вы вычисляете цену ошибки? Что это у Вас вдруг за величины $1000 vs $10000? Как-то вычисляю. :) Это же был пример... Стоимость "железа" вычислить более-менее несложно, а вот с ценой ошибки да, бывает по-разному (можно и "на все деньги" влететь, а может и повезти). Просто дело в том, что когда в одном месте (организации, продукте) начинают накапливаться "решения", работающие в 99.99% случаев... всё зачастую (и довольно быстро) становится грустно.

Google
Roman
20.09.2018
11:04:35
> Самомодифицирующийся код - это красивая легенда, от которой отказались даже в PostgreSQL. Какая ещё легенда!? ;) Есть алгоритмы, эффективная реализация которых без него невозможна (и их есть даже в TAOCP, не говоря уже о прочих областях). > Прекрасно обходятся без самомодифицирующихся возможностей. (От которых всё равно одни тормоза.) А JIT в v11 зачем добавляют, в таком случае? ;) > А как Вы вычисляете цену ошибки? Что это у Вас вдруг за величины $1000 vs $10000? Как-то вычисляю. :) Это же был пример... Стоимость "железа" вычислить более-менее несложно, а вот с ценой ошибки да, бывает по-разному (можно и "на все деньги" влететь, а может и повезти). Просто дело в том, что когда в одном месте (организации, продукте) начинают накапливаться "решения", работающие в 99.99% случаев... всё зачастую (и довольно быстро) становится грустно.
JIT в C# есть, в Java, даже в JS. Означает ли это что они самомодифицируются на лету? Нет (хотя возможности есть в каждом из перечисленных языков, но к JIT'у это относится примерно никак).

Yaroslav
20.09.2018
11:07:56
JIT в C# есть, в Java, даже в JS. Означает ли это что они самомодифицируются на лету? Нет (хотя возможности есть в каждом из перечисленных языков, но к JIT'у это относится примерно никак).
> Означает ли это что они самомодифицируются на лету? Кто "они"? > но к JIT'у это относится примерно никак Почему, конкретно? IMHO, у самомодифицирующегося кода и JIT есть кое-что общее.

Roman
20.09.2018
11:11:22
> Означает ли это что они самомодифицируются на лету? Кто "они"? > но к JIT'у это относится примерно никак Почему, конкретно? IMHO, у самомодифицирующегося кода и JIT есть кое-что общее.
"Они" - программы, написанные на этих языках. JIT позволяет нам на лету скомпилить из условного байт-кода машинный, с учётом особенностей того железа, на котором мы работаем. Если JIT умный, то он ещё и в рантайме статистику пособирает и дополнительно оптимизирует наиболее горячие участки кода (Tiered JIT). Но это скорее про портируемость кода, чем про самомодифицирующийся код.

Но да, можно написать само-модифицирующийся код через генерацию байт-кода в рантайме/eval в js

Yaroslav
20.09.2018
11:16:46
> Но это скорее про портируемость кода, чем про самомодифицирующийся код. Ну это уже вопрос терминологии, IMHO... Чем кардинально самомодифицирующийся код от этого отличается? Только совпадением "языка", его генерирующего (или модифицирующего), с генерируемым (т.е. это машинный код)?

Dmitry
20.09.2018
11:28:17
Если уж тут пошла речь про самомодифицирующийся код, то как раз таки rules в PostgreSQL - это яркий пример этого.

Как раз именно этим система правил и занимается - переписывает запросы в соответствии с правилами.

Ivan
20.09.2018
11:33:09
у меня есть две таблицы Students и Groups возможно ли накинуть индекс на колонку students.id и groups.subject_id ? или впринципе такого нельзя сделать?

Ivan
20.09.2018
11:35:35
спасибо

Dmitry
20.09.2018
12:53:08
Да. И делает это (в указанных случаях) плохо. Т.е. broken by design. :(
Нет ничего идеального. Чем мощнее средство, чем ближе оно к практике, тем больше у него недостатков.

Yaroslav
20.09.2018
12:54:21
Нет ничего идеального. Чем мощнее средство, чем ближе оно к практике, тем больше у него недостатков.
На узанный случай есть триггеры. Писать просто, поведение предсказуемое.

Суть-то в том, что RULE здесь невозможно написать так, чтобы оно работало во всех ситуациях (в отличие от триггера)!

Dmitry
20.09.2018
12:56:50
Я не возражаю. Конечно надо смотреть по ситуации. Просто мне показалось, что Вы категорический противник использания правил в принципе.

Правила - это мощное средство. Не стоит их боятся. Ими стоит уметь пользоваться.

Yaroslav
20.09.2018
12:58:04
Правила - это мощное средство. Не стоит их боятся. Ими стоит уметь пользоваться.
Ничего подобного. Ещё раз, при указанных условиях ими нельзя нормально пользоваться. Т.е. остаются только тривиальные правила... и какой смысл?

Dmitry
20.09.2018
13:04:30
Я не в курсе, Ярослав, что ими нельзя пользоваться. Лично пользуюсь и очень доволен. Видимо, другие пользователи (кто умеет пользоваться, конечно) тоже довольны, раз система правил в Постгресе почти с самого начала и по сей день.

Yaroslav
20.09.2018
13:07:58
Я не в курсе, Ярослав, что ими нельзя пользоваться. Лично пользуюсь и очень доволен. Видимо, другие пользователи (кто умеет пользоваться, конечно) тоже довольны, раз система правил в Постгресе почти с самого начала и по сей день.
Нет, им кажется, что они умеют. :( Вы статью читали? Знаете, кто автор? А комментаторы? Вот Вам более-менее официальная позиция проекта по этому поводу: https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_rules

Google
Yaroslav
20.09.2018
13:08:19
Резюме оттуда: > When should you? Never. While the rewriter is an implementation detail of VIEWs, there is no reason to pry up this cover plate directly.

Anatoly
20.09.2018
13:08:52
я туплю или рулы используются в 9.х для партиционирования?

Yaroslav
20.09.2018
13:09:53
Dmitry
20.09.2018
13:11:46
Если почти всё чуть более дельное пишется на C или C++ по сей день. Включая Постгрес.

Yaroslav
20.09.2018
13:14:27
Это из той же оперы, где поют "никогда не используйте C". Но кого волнуют эти песни?
То есть, прямые предупреждения основных разработчиков (да, кстати, они есть и в документации), Вас не впечатляют? ;) Ну удачи, что тут скажешь. :(

Anatoly
20.09.2018
13:15:06
Если почти всё чуть более дельное пишется на C или C++ по сей день. Включая Постгрес.
сейчас бы JIT копилятор переписать на java, а не вот это вот все...

vlade11115
20.09.2018
13:15:28
Если почти всё чуть более дельное пишется на C или C++ по сей день. Включая Постгрес.
Называется угадай основной язык на котором пишет человек по одной его фразе.

Anatoly
20.09.2018
13:16:36
A rule has significantly more overhead than a trigger, but the overhead is paid once per query rather than once per row, so this method might be advantageous for bulk-insert situations. In most cases, however, the trigger method will offer better performance.

https://www.postgresql.org/docs/9.6/static/ddl-partitioning.html отсюда

Yaroslav
20.09.2018
13:17:25
Меня впечатляет документация - https://www.postgresql.org/docs/current/static/rules.html
Впечатлитесь: https://www.postgresql.org/docs/current/static/rules-update.html ;) А SELECT RULE строго равны VIEW, кстати.

Dmitry
20.09.2018
13:17:28
Триггеры на VIEW появились относительно недавно.

Раньше правила были необходимыми, чтобы модифицировать таблицы через виды.

Я согласен что в большинстве случаев триггеры: проще, быстрее, понятнее.

Yaroslav
20.09.2018
13:23:41
Я согласен что в большинстве случаев триггеры: проще, быстрее, понятнее.
Ну а вот разработчики PostgreSQL считают, что правильно написать нетривиальное RULE невозможно. ;) А какой от тривиальных-то толк?

Триггеры на VIEW появились относительно недавно.
В 9.1, правильно (я до этого, к счастью, PostgreSQL "всерьёз" не пользовался ;) )?

Dmitry
20.09.2018
14:11:57
Ну а вот разработчики PostgreSQL считают, что правильно написать нетривиальное RULE невозможно. ;) А какой от тривиальных-то толк?
Что же мешает разработчикам PostgreSQL выпилить возможность определения правил пользователями? Хитрый план какой-то? Что-то я не улавливаю логики.

Google
elfiki
20.09.2018
14:12:37
обратная совместимость, например

Dmitry
20.09.2018
14:13:32
обратная совместимость, например
Т.е. пользователи есть и о них разработчики заботятся?

Время умопомрачительных открытий.

Yaroslav
20.09.2018
14:14:07
Что же мешает разработчикам PostgreSQL выпилить возможность определения правил пользователями? Хитрый план какой-то? Что-то я не улавливаю логики.
Обратная совместимость, я так понимаю. Кроме того, вдруг кто-то придумает, как их нормально реализовать... Помните историю с hash-индексами, например? Я вот думал, что их в самом деле выпилят, а оно вон как вышло. ;)

Т.е. пользователи есть и о них разработчики заботятся?
Политика проекта такая. Это, кстати, далеко не единственная возможность, которую очень советуют не использовать.

Dmitry
20.09.2018
14:15:53
Вы, видимо, далеки от разработки софта. Если какая-то фича признаётся разработчиком плохо спроектированной, то она обяъвляется устаревшей (deprecated) или через 1-2 релиза выпилывается. RULES в Постгресе со времен его создания - никто об этом даже не думает.

Yaroslav
20.09.2018
14:19:40
Вы, видимо, далеки от разработки софта. Если какая-то фича признаётся разработчиком плохо спроектированной, то она обяъвляется устаревшей (deprecated) или через 1-2 релиза выпилывается. RULES в Постгресе со времен его создания - никто об этом даже не думает.
> Вы, видимо, далеки от разработки софта. Да ладно Вам. ;) > Если какая-то фича признаётся разработчиком плохо спроектированной, то она обяъвляется устаревшей (deprecated) или через 1-2 релиза выпилывается. Покажите мне кучу выпиленных features в PostgreSQL. С очень большим трудом там всё удаляется. (Там даже в некоторых случаях dead code болтается годами (в надежде "а вдруг пригодится", и ничего.) > RULES в Постгресе со времен его создания - никто об этом даже не думает. То есть, все ссылки (на тех, кто думает) Вы проигнорировали? ;)

Yaroslav
20.09.2018
14:25:27
Вы, видимо, далеки от разработки софта. Если какая-то фича признаётся разработчиком плохо спроектированной, то она обяъвляется устаревшей (deprecated) или через 1-2 релиза выпилывается. RULES в Постгресе со времен его создания - никто об этом даже не думает.
Ах да, кстати про выпиливание плохо спроектированных features: если какая-то, хотя бы откровенно идиотская и вредная (а их есть) пришла из ISO SQL, она останется в PostgreSQL навсегда (или до тех пор, пока её не выпилят из стандарта). Писать bug reports и дискутировать бесполезно, такие дела. ;)

Dmitry
20.09.2018
14:45:38
Vladimir
20.09.2018
14:48:38
Ой, холи вар ещё идёт))

Dmitry
20.09.2018
14:49:44
Ой, холи вар ещё идёт))
Ага, время офигительных историй продолжается. Кругом антипаттерны и антиперфекционизм.

Yaroslav
20.09.2018
14:49:46
Вы дали ссылки на частный бложик и на вики. Начали рассказывать мне про Разработчиков И Их Авторитетное Мнение. А я просто показал Вам документацию Постгреса, где чёрным по белому говорится о крутости правил в Постгресе. Это официальная документация, а не вики или бложик. Вы сравниваете огурец с пальцем.
> Вы дали ссылки на частный бложик То есть, Вы не знаете, чей этой "частный бложик" и кто там комментирует? ;) Вам рассказать? > и на вики. Которую нынче могут редактировать только... угадайте кто? Вы авторов этой статьи посмотрели? > А я просто показал Вам документацию Постгреса, где чёрным по белому говорится о крутости правил в Постгресе. Да, про SELECT-ы. А я всё это время писал не о них! > Это официальная документация, а не вики или бложик. В которой тоже есть аналогичное предупреждение. > Вы сравниваете огурец с пальцем. ORLY? ;)

Yaroslav
20.09.2018
14:50:25
Как всё печально. Они ели кактус и плакали, плакали но ели кактус.
Именно так. :( Вы уверены, что знаете, на что ориентируются разработчики PostgreSQL?

Dmitry
20.09.2018
14:51:37
Вики - это не документация. И совершенно неважно кто её может править.

Хоть сам Стоунбрейкер.

Google
Yaroslav
20.09.2018
14:52:11
Мне глубоко безразлично чей это блог и кто там комментирует.
А зря, зря... Я бы на Вашем месте поинтересовался.

Dmitry
20.09.2018
14:52:44
А зря, зря... Я бы на Вашем месте поинтересовался.
Ну Вы бы на моём месте и RULES бы не использовали. Причём тут я? Мои что-ли проблемы это? Нет.

vlade11115
20.09.2018
14:53:04
А зря, зря... Я бы на Вашем месте поинтересовался.
А можно без увиливаний, для тех кто не в теме прямо написать? Чей блог?

Yaroslav
20.09.2018
14:53:48
Вики - это не документация. И совершенно неважно кто её может править.
И, опять-таки, важно. > Хоть сам Стоунбрейкер. Только этого не хватало — он-то и придумал большую часть этих "гениальных" features. :(

Yaroslav
20.09.2018
14:54:47
А можно без увиливаний, для тех кто не в теме прямо написать? Чей блог?
А Вы разве спрашивали? ;) Blog этот Andrew Gierth (committer), комментирует там Tom Lane (основной разработчик PostgreSQL).

Dmitry
20.09.2018
14:55:22
Том - один из ключевых. Никакой он не основной.

vlade11115
20.09.2018
14:55:23
Спасибо. Вот так бы сразу.

Dmitry
20.09.2018
14:55:39
Сказки рассказываете.

Основной был Стоунбрейкер.

Но Вы умнее, по-ходу ?

Страница 993 из 1062