
Sergey
18.04.2017
08:54:30
Плюс subpartition по регионам допустим

Oleg
18.04.2017
08:54:45
Это нормальный дизайн да, просто поле для партцирования - не дата =)

Sergey
18.04.2017
08:55:09

Yura
18.04.2017
08:55:43

Google

Yura
18.04.2017
08:56:21
Если поле для партицирования не дата, то что?

Oleg
18.04.2017
08:56:41
Вам виднее - у вас же проект
то что не будет меняться в общем случае

Yura
18.04.2017
08:58:49
Ок. Если взять айдишники и по ним партицировать. Но поиск же делается не по айдишникам, а тем же датам. Есть ли смысл партицировать если поиск будет осуществляться по всем партициям?

Ildar
18.04.2017
08:59:23

Айтуар
18.04.2017
09:00:10

Yura
18.04.2017
09:00:41

Ildar
18.04.2017
09:01:39
(это если без триггера)

Yura
18.04.2017
09:02:04
Аааа
А с триггером тогда как?
Или это уже гуглить? :)
В общем чуть прояснилось. Спасибор

Google

Ildar
18.04.2017
09:04:06
Или это уже гуглить? :)
с триггером вы уже сами закладываете логику. А я традиционно могу порекомендовать посмотреть в сторону pg_pathman : )

Yura
18.04.2017
09:05:08
Та я вообще на марияДБ сижу. Просто общие принципы мне непонятны, а по марии посоветоваться не с кем
Вот сюда и написал

Ildar
18.04.2017
09:07:10
в мариидб вроде из коробки партиционирование работает без триггеров

Yura
18.04.2017
09:11:48
Ну, работать то может, но вопрос с апдейтом остается пока что )
Поэкспериментирую на днях. Отпишусь, если что.

Dmitry
18.04.2017
09:24:27
По поводу дизайна и почему так лучше не делать. (Обновлять ключи партиционирования).
При данной операции вы физически перемещаете запись между таблицами. Вместо того, чтобы обновлять страницу или блок, вы удаляете в одном месте и вставляете в другом. Получаем дефрагментацию в старой партиции (дополнительная работа для автовакуума) - раз, и дополнительный ввод/вывод на вторую партицию. Таким образом такой дизайн ЗНАЧИТЕЛЬНО увеличивает нагрузку на запись.
Ещё представим ситуацию: выполняется долгий запрос по партициям - а вы в этот момент переносите данные. Возникают блокировки, автовакуум не вычищает данные, партиции пухнут.

Yura
18.04.2017
09:40:26
Спасибо за описание проблемы

Dmitry
18.04.2017
09:45:53
Не за что. Даже в оракле (не в суе будет помянут), где с партициями всё очень круто и продвинуто (не даром эта опция стоит как самолёт), даже там по дефолту этого делать нельзя. А в документации английским по белому написано, что включая возможность апдейтить ключи партиционирования вы делаете это на свой страх и риск.

Andrey
18.04.2017
09:48:34
Кто-нибудь, связанный с pg_pathman, подскажите, пожалуйста. Вроде в ветке rel_future_expressions должна была появиться возможность определять партицию через пользовательскую функцию. Я посмотрел diff на README.md и не нашёл ничего связанного с этим. В какую сторону копать? Хотя бы ключевые слова какие-нибудь ).

ildus
18.04.2017
09:49:51
Да, забыл отредактировать документацию
Выглядит почти все так же, там где задавался столбец можно задать выражение (например вызов функции), и в запросе использовать это выражение в условиях.
CREATE TABLE test.hash_rel (id SERIAL PRIMARY KEY,
value INTEGER NOT NULL, value2 numeric NOT NULL);
SELECT pathman.create_hash_partitions('test.hash_rel', 'value * value2', 3);
SELECT * FROM test.hash_rel WHERE (value * value2) = 10;
, как пример

Andrey
18.04.2017
09:55:43

ildus
18.04.2017
09:58:31

Andrey
18.04.2017
09:58:40
Обязательно.

Alex
18.04.2017
10:27:52
Доброго времени суток , если будет на одном сервере ubuntu ,а на другом CentOS но версии постгреса будут одинаковыми повлияет ОС как-нибудь на производительность потоковой репликации?

Ascandar
18.04.2017
10:28:49
по идее нет

Alex
18.04.2017
10:29:16
Ascandar спасибо

Google

Yura
18.04.2017
11:41:54
Там ось можен регулировать максимальное количество одновременно активных сетевых соединений всего/на процесс и максимальное количество открытых дескрипторов файлов на процесс/поток. Вцелом к репликации это имеет косвенное отношение.

Pavel
18.04.2017
12:19:32

Dmitry
18.04.2017
12:22:11

Pavel
18.04.2017
12:22:56
будет
Круто. Спасибо. Пнёте по готовности?

A.
18.04.2017
12:22:58
Коллеги, поговорите со мной вот по такой задачке
https://ru.stackoverflow.com/questions/655152/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BF%D0%BE-%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%83-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D0%B2-jsonb

Айтуар
18.04.2017
12:23:17

Dmitry
18.04.2017
12:23:45

Andrey
18.04.2017
13:30:23
@ildus, я что-то не так понял, наверное. create_hash_partitions создаёт партиции по хешу выражения всё равно. А я хотел бы, чтобы партиция определялась по значению в столбце типа text. Например, у меня есть столбец, который называется shard_key и если в нём значение 01 я хотел бы запихнуть его в партицию table_01 и так далее. Это возможно?
Может, можно свою хеш-функцию как-то определить?

Dmitry
18.04.2017
13:46:21

Айтуар
18.04.2017
13:48:53

Andrey
18.04.2017
13:52:37

Andrey
18.04.2017
13:53:25
Я думал, именно это имелось в виду, когда говорилось, что теперь через пользовательскую функцию можно определять партицию.

ildus
18.04.2017
13:55:26
Тут поведение такое же как и раньше, просто вместо столбца будет какое либо выражение, названия партиций формируюстя автоматически как раньше. Ну можно отдельным callback-ом переименовывать потом если нужно.

Andrey
18.04.2017
13:56:18
Но тут дело в том, что я должен заранее указать количество партиций, которое должно быть создано.
В принципе, мне не так важно, как партиции называются, мне важно, чтобы все значения с shard_key = '01' лежали в одной партиции, с shard_key = '02' в другой и так далее.

ildus
18.04.2017
13:58:19

Andrey
18.04.2017
13:59:23

Maksim
18.04.2017
14:00:07

Ildar
18.04.2017
14:00:20
мы изначально отказались от идеи пользовательской хеш-функций в пользу стандартных постгресовых по причине их высокой производительности. В принципе, можно проэмулировать поведение, которое вы хотите. Например, сделать range-партицирование по ключу my_hash(my_column) (где my_hash возвращает строку), потом для каждого возможного случая ('01', '02' и т.д.) создать range-партицию, а в запросах использовать where my_hash(my_column) = '01'

Google

Andrey
18.04.2017
14:00:52
Насчёт list идея хорошая. Спасибо за совет, я попробую.
Но вроде там интервалы только для чисел?

Ildar
18.04.2017
14:01:29
в следующем релизе будет для строк тоже
(только не будет работать автоматическое создание партиций, по причине невозможности вычисления интервала для строк :)

Ascandar
18.04.2017
14:10:46
такой вопрос, а можно получить серт что прошел курс без прохождения офф курса по постгресу?

Admin
ERROR: S client not available

Pavel
18.04.2017
14:33:17
Ребят, как в оконной функции работать со значениями после группировки?
select user_id, sum(price) as cnt ... group by user_id

Andrey
18.04.2017
14:34:32

Pavel
18.04.2017
14:34:48
как внутри оконной функции получить доступ к cnt ?
оО

Ascandar
18.04.2017
14:36:37

Anatoliy
18.04.2017
14:37:19
Смотря где. Через having или через cte. Без алиаса можно заюзать в некоторых местах.

Andrey
18.04.2017
14:38:43

Ascandar
18.04.2017
14:39:29
скорее всего тендер наверняка потребовалось)

Pavel
18.04.2017
14:39:47
?
я читаю маны и вижу, что оконные ункции выполняются после группировки и having

Anatoliy
18.04.2017
14:40:57
вы напишите как вы хотите использовать

Pavel
18.04.2017
14:41:04
группировка у меня по полю, внутри группировки идут вычисления по полям, которые схлопываются при группировке

Google

Anatoliy
18.04.2017
14:41:10
так то на кофейной гуще гадать не комильфо

Pavel
18.04.2017
14:41:22
расчет статистики

Anatoliy
18.04.2017
14:41:43
Пример запроса в студию с использованием cnt aka sum

Pavel
18.04.2017
14:44:28
SELECT
customer.uid,
SUM (
CASE WHEN transact.type IN ('sub', 'min')
THEN transact.amount * (-1)
ELSE transact.amount
END
) AS balance
FROM user as customer
INNER JOIN actions AS transact ON transact.user_id = customer.id
GROUP BY customer.uid
HAVING SUM (
CASE WHEN transact.type IN ('sub', 'min')
THEN transact.amount * (-1)
ELSE transact.amount
END
) > 0
;
выбирается пара uid - balance
нужен 3-й столбец, вычисляющий % jn j,otuj rjkbxtcndf
от общего количества
я убирал группировку и делал 2 оконные функции
но в выборку попадали записи с нулевым балансом, а мне они не нужны

Anatoliy
18.04.2017
14:46:20
Ну значит оконная и having > 0, да

Pavel
18.04.2017
14:46:57
если я переношу логику внутрь оконной функции - ругается, что нужно в условие группировки добавлять transact.amount и transact.type
без этого оконна функция с полной логикой работать не будет

Anatoliy
18.04.2017
14:47:41
Это оно ругается, что надо сгруппировать внутри окна наверное

Pavel
18.04.2017
14:48:14
если я группирую внутри окна - я не могу использовать having для фильтрации нудевых балансов
потому что оконные функции запускаются после having

Anatoliy
18.04.2017
14:49:34
Можно разделить операции, сначала посчитать каунты, потом отфильтровать лишнее через cte (WITH)

Pavel
18.04.2017
14:51:47
неужели внутри окна нет доступа к полученной ранее выборке balance ?
так же и having