|
Российские СУБД
|
|||
---|---|---|---|
#18+
vadiminfo, Так в том то и идея добавление ограничения на в каждом подзапросе внутри union all , чтобы оно повторяло условие попадания в партицию. Таким образом, при разборе общего запроса (если сервер умеет прокидывать предикаты и не выполнять заранее невыполнимое) для той секции, которую не надо сканировать, построятся взаимоисключающие условия. Что на примере с with и было показано. Другое дело, если сервер не умеет разворачивать селект из view в вариант с прокидыванием предикатов и не умеет отсеивать по невыполнимому условию без просмотра содержимого. Тут, конечно, ничем не поможешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 18:42 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Alexander RyndinА что там с hash и композитным партицированием? Ну в общем случае с view можно не то что по hash, можно хоть по sequence в партиции раскидывать, чтобы гарантировать равномерное размазывание, если это надо. Любая логика к твоим услугам. Да авто добавление партиций на триггерах не напишешь (ну кроме каждое утро добавим партицию на завтра :) ). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 18:48 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Сергей АрсеньевДа авто добавление партиций на триггерах не напишешь (ну кроме каждое утро добавим партицию на завтра :) ). Есть у меня подозрение, что в Постгресе можно в триггере и таблицу создать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 18:52 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Alexander A. Sak, Создать то можно, наверное, как view переопределить? Хотя очумелые ручки могут, наверное, через рекурсивное with и без переопределения справиться. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 18:58 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
точнее на left join. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:00 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Сергей Арсеньевvadiminfo, Так в том то и идея добавление ограничения на в каждом подзапросе внутри union all , чтобы оно повторяло условие попадания в партицию. Таким образом, при разборе общего запроса (если сервер умеет прокидывать предикаты и не выполнять заранее невыполнимое) для той секции, которую не надо сканировать, построятся взаимоисключающие условия. Что на примере с with и было показано. Другое дело, если сервер не умеет разворачивать селект из view в вариант с прокидыванием предикатов и не умеет отсеивать по невыполнимому условию без просмотра содержимого. Тут, конечно, ничем не поможешь. Не знаю, что скрывается там за многоточиями, но если одна таблица, то чтобы найти id=2, он проскандирует всю таблицу. Если разные: типа для каждого года своя таблица со своим именем, то это сильное влияние на логику: мне по логике нужна одна таблица, и ничего не знать при написании запроса про секции. Это физика - вопросы производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:01 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Продолжаем мучать Постгрес. Вешаем на нашу "партицированную" вьюху триггер, создающий таблицы: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
И ведь работает: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:13 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Alexander A. SakИ ведь работает: insert into t(id, part_id, val) values (5, 5, '5'); А теперь продемонстрируйте "select from t where id=5", пожалуйста. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:16 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Сергей АрсеньевAlexander A. Sak, Создать то можно, наверное, как view переопределить? Хотя очумелые ручки могут, наверное, через рекурсивное with и без переопределения справиться. :) Наверное, можно при создании таблицы и view пересоздать. Ужас, конечно, получается, но ведь работает. Интересно было бы у спецов узнать насколько поплохеет Постгресу от такого "партицирования". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:18 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Сергей АрсеньевAlexander RyndinА что там с hash и композитным партицированием? Ну в общем случае с view можно не то что по hash, можно хоть по sequence в партиции раскидывать, чтобы гарантировать равномерное размазывание, если это надо. Любая логика к твоим услугам. Да авто добавление партиций на триггерах не напишешь (ну кроме каждое утро добавим партицию на завтра :) ).И что будет в результате с pruning? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:28 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Облом-с. Пересоздание вью в триггере на вью не дают: Код: plsql 1.
Вы же понимаете, что это не препятствие :D. Сейчас еще что-нибудь придумаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:29 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Ну вот вариант. Для вставки используем одно view, для чтения - другое. Вью для вставки: Код: plsql 1. 2.
Модифицированная триггерная функция: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Ну и триггер: Код: plsql 1. 2.
В результате получаем: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:39 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Симонов ДенисAlexander Ryndin, это говорил не Путин, а Мариничев. И не это он вообще говорил. Но некоторые слышат то, что хотят слышать им из разных ящиков журнашлюхи вещают... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 09:15 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Alexander A. SakНу вот вариант. Для вставки используем одно view, для чтения - другое. Создай свой словарь. В котором будут имена партиций. Ну и во view динамический джоин с таблицами чьи имена совпадают. Тогда view вообще менять не надо. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 09:33 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Сергей АрсеньевAlexander A. SakНу вот вариант. Для вставки используем одно view, для чтения - другое. Создай свой словарь. В котором будут имена партиций. Ну и во view динамический джоин с таблицами чьи имена совпадают. Тогда view вообще менять не надо. :) Можно пример? На самом деле мне это "партицирование" не нужно, но чисто для развития. Вдруг пригодится. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 09:50 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Alexander Ryndinroden По-моему уже давно выяснили, что работают с тем, с чем умеют лучше всего. Будет человек уметь работать с Линтер - будет работать с Линтер.Допустим, я знаю хорошо MS Access или dbase, но я их точно не буду использовать. Я всё же не имел ввиду крайности ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 10:46 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Сергей АрсеньевДа авто добавление партиций на триггерах не напишешь а поцчему, собсна ? ddl то в поцгрессе транзакционный. в отличь от ара--кала. да, очередь из-за лока головной. + по сейвпойнту блока обработки ошибки (как вставки так и создания). да, в автономии, чтобы не откатывать ddl при факапе транзакции. долго, но можно, если смена суток ночью, и ночью низкая нагрузка. основная засада -- при наличии данных в самой головной можно в долгую очередь за автовакуумом влететь. ну так в головной не надо ничего держать. Сергей Арсеньев(ну кроме каждое утро добавим партицию на завтра :) ). а это -- если не хочется проблем с очередями. разумная комбинация этого с предыдущим -- всё что нужно старому человеку. ну и павлины, ага. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 11:31 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
топик "Российские СУБД" плавно перешло к обсуждению Oracle vs PostgreSQL Что замечательно показывает, какое состояние с Subj на сегодняшний день. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 11:45 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Alexander A. SakНу вот вариант. Для вставки используем одно view, для чтения - другое.а потом вспоминаем, что в системе не одна сессия одного человека работает... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 13:56 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
xtender, Да ладно тебе, для извращений типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Можно ничего не переопределять на лету. Просто добавляешь таблицу и запись про нее в part_dict. Забавно, что постгрес понимает, в случае view, что предикат надо спускать для фильтрации записей в part_dict. И не понимает, если это же выражение запихнуть в with. Хотя у меня старая версия поди. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 14:18 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
xtenderAlexander A. SakНу вот вариант. Для вставки используем одно view, для чтения - другое.а потом вспоминаем, что в системе не одна сессия одного человека работает... Действительно. Посмотрим что там с другими сессиями. Удалил уже все, но можно скопировать из своих постов :) Сессия 1: Код: plsql 1. 2. 3. 4. 5. 6.
Сессия 2: Код: plsql 1.
и висим-ждем. Потом в Сессии 1 делаем commit, и в Сессия 2 скрипт завершается. Это если приходится создавать новую таблицу при вставке записи. Если таблица не создается, то скрипт в Сессии 2 ничего не ждет. Все логично я считаю. Насколько это применимо в реальности - надо смотреть на реальность. Я сейчас как теоретик тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 14:21 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Сергей Арсеньев, Вы так и не пояснили что у вас там. Одна таблица во всех UNION? Тогда отбор id=2 просканирует все. Или разные одна на секцию. Тогда страдает логика: нужно в запросах учитывать секционность. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 14:23 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
vadiminfoСергей Арсеньев, Вы так и не пояснили что у вас там. обычный union all разных секций с check constraint или намеренным where ы условии выборки из секции. В этом случае, как выше показали, оптимизатор может не смотреть в секции, для которых сформируется недопустимое условие. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 14:29 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Сергей АрсеньевvadiminfoСергей Арсеньев, Вы так и не пояснили что у вас там. обычный union all разных секций с check constraint или намеренным where ы условии выборки из секции. В этом случае, как выше показали, оптимизатор может не смотреть в секции, для которых сформируется недопустимое условие. У вас в обычном union all стоит обычный select, который отбирает id=2. Про него вопрос. Там же отбор из всей таблицы, из всех "секций"? Или что? Нуно было не многоточия писать, а пример запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 14:43 |
|
Российские СУБД
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevтопик "Российские СУБД" плавно перешло к обсуждению Oracle vs PostgreSQL Что замечательно показывает, какое состояние с Subj на сегодняшний день. На самом деле в данном форуме это показывает только количество специалистов, знакомых с той или иной СУБД. Правда, пожалуй, на рынок такое количество работающих с Постгрес тоже влияет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 17:01 |
|
|
start [/forum/topic.php?fid=35&msg=39200638&tid=1552188]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 411ms |
0 / 0 |