
Mikhail
27.09.2017
15:13:48
3 ManyToMany в данном случае
То есть две :)

Vladimir
27.09.2017
15:16:33
сейчас так и есть
Работа-Работник
Работа-ГруппаРаботников

Google

Vladimir
27.09.2017
15:17:03
а, еще есть Работник-ГруппаРаботников

Mikhail
27.09.2017
15:19:02
Все время хотел разобраться, как работают триггеры в postgre... Подозреваю, что они тут были бы никак кстати

Oleg
27.09.2017
15:21:46
Если реализовывать без триггеров (против которых есть стандартный аргумент о том, что они переносят часть логики приложения в бд), то я бы делал два метода на бэкенде addEmployee(Long workGroupId) и removeEmployee(Long workgroupId), выполняющие все необходимые операции по обновлению счетчиков в транзакциях.
> Есть сомнения по поводу одновременных count = count + 1, есть опасения что эти счетчики буду сходится с реальными цифрами.
SELECT FOR UPDATE для лока записи счетчика

Ilya
27.09.2017
15:25:56

Oleg
27.09.2017
15:25:57
Еще один момент - addEmployee() и removeEmployee() должны таким образом захватывать записи счетчиков в строго определенном порядке - либо работа-группа, либо группа-работа

Vladimir
27.09.2017
15:35:33
так, а если без селекта сразу будет апдейт, только несколько в паралель
update jobs set active_workers_count = active_workers_count + 1 where id=5;
оно нормально отработает?

Sherzod
27.09.2017
15:36:33

Vladimir
27.09.2017
15:38:55
ок, всем спасибо, буду думать

Pavel
27.09.2017
15:45:06

Darafei
27.09.2017
15:46:20

Dmitry
27.09.2017
16:35:31

Darafei
27.09.2017
16:35:51
в хранимке - да

Google

Roman
27.09.2017
17:14:57
добрый вечер, коллеги. Порекомендуйте софтину под линекс для проектирования базы постгреса, желательно с максимальной поддержкой всех встроеных функций и postgis (в идеале хочется бесплатную, но можно и проверенную платную), спасибо!

Oleg
27.09.2017
17:16:33

Roman
27.09.2017
17:16:57
@Otvorot спасибо, буду смотреть

Maxim
27.09.2017
21:50:42
Народ, не подскажите самый простой способ получить ERD уже существующей БД?
я вот нагуглил достаточно много, а есть такой что бы вот на винду в два клика ставился и делал юзеру хорошо =) ?
хм, для меня это оказался ИДЕ-евский DB-обозреватель, но есть кажись баг - он не показывает связи межд таблицами

Diskord
28.09.2017
01:30:57
Подскажите правильно ли в pl/pgsql в if делать условие на сравнение резудьтатов двух dml операций вида:
If (select groups from user where id=2) = (select groups from user where id=4).
Работать оно будет, но меня что то смущает в такой записи.

Dmitriy
28.09.2017
02:29:32
Можно джойном

Alexandr
28.09.2017
02:39:31
конечно, если это процедура/функция

Vitality
28.09.2017
02:42:39
Вообще нормально решено
Зачем плодить переменные и выделять на них память

Alexandr
28.09.2017
02:46:26
Зачем плодить переменные и выделять на них память
я не думаю что будет оверхед. Память так или иначе выделяется под результаты. Сейчас мы эти результаты присваеваем двум переменным. Разве они копируются? По-хорошему, эти переменные долны указывать на участок памяти с этим результатом, а не на участок памяти с копией. Как-то так. Но, если я не прав, прошу исправить.
В пользу двух переменных могу сказать еще то, что так легче читатся (с оговорками, конечно, все зависит от автора)

Vitality
28.09.2017
02:50:32
Переменные декларируется в момент вызова функции. И существуют по времени жизни функции. Само собой это и правда копейки для одного вызова, но ведь ее могут вызвать и множество раз. В общем тут вопрос удобства и памяти
Вся красота постгрес в решении задачи одним запросом. Имхо, конечно же.

Alexandr
28.09.2017
02:53:51

Vitality
28.09.2017
02:58:54
Как я уже говорил, затраты копеечку для одного запроса. Для 200 будет так же, но что если пользователей гораздо больше и каждый вызывает функцию?

Alexandr
28.09.2017
03:00:39
Я когда говорил про количество пользователей, я имел ввиду именно эту настройку. Я понимаю ее как указание БД, сколкьо может быть параллельно работающих сессий на БД

Google

Vitality
28.09.2017
03:05:25
Жертвовать количеством ради того что бы писать переменные вместе решения запросом?

Alexandr
28.09.2017
03:14:49

Алексей
28.09.2017
03:20:49
В данном случае можно поступить например так:
SELECT count(*) FROM "user" a
JOIN "user" b ON a.groups = b.groups
WHERE a.id = 2 AND b.id = 4;

Alexandr
28.09.2017
03:23:28
Там по одной записи же, groups это просто колонка, из таблице по id получается запись
т.е. там просто SELECT groups FROM user WHERE id = 4
без связей
т.е. группы в самой таблице пользователя

Алексей
28.09.2017
03:24:34

Alexandr
28.09.2017
03:25:10

Алексей
28.09.2017
03:25:31
Да
Если id не уникален, то такое сравнение как у автора работать не будет в случае если один из подзапросов вернул больше одной записи

Alexandr
28.09.2017
03:26:41
В моем опыте, обычно в таких ситуациях ID уникальный
т.е. идет следование определенным соглашениям, если можно так выразиться

Алексей
28.09.2017
03:27:21
Тогда повторюсь, если Вы невнимательно прочитали: "В данном примере это видимо некритично, так как наверное предполагается наличие первичного ключа по id, но в общем случае констукция некрасивая"

Alexandr
28.09.2017
03:29:34
про id не воспринялось, да

Алексей
28.09.2017
03:33:43
А если вдуматься глубже и прочитать между строк, то автора (который видимо уже давно спит) интересовал не столько данный конкретный пример, сколько вообще корректность использования такого рода сравнения, а вот тут уже варианты могут быть совершенно разные.

Alexandr
28.09.2017
03:36:06
Я это понял, почему и предложил объявить две переменные определенного типа, если вы прочитали. Другой разговор, что эту задачу можно было проще решить.

Andrey
28.09.2017
04:40:33

Google

Pavel
28.09.2017
04:45:23

Maxim
28.09.2017
05:21:36

Ilya
28.09.2017
05:29:37
https://pp.userapi.com/c841138/v841138968/223e2/B64doRlrVCY.jpg

Sergey
28.09.2017
06:37:31

Maks
28.09.2017
06:47:19
мне понравилась http://www.dbschema.com/
только нужно еще odbc драйвер поставить
можно сразу к БД подключаться

Сергей
28.09.2017
06:55:05
DBeaver умеет делать диаграммы по БД

Maks
28.09.2017
06:55:40
у меня не получилось(

Сергей
28.09.2017
06:55:57

Maks
28.09.2017
06:55:59
т.е. он построил, но не показал связи по ключам
тут не видно связи по ключам
просто направление связи таблиц

Сергей
28.09.2017
06:56:56
просто тыкни в связь

Maks
28.09.2017
06:58:16
вот у меня 1000 таблиц и в каждую тыкать) тем более если мне это надо распечатать) не очень удобно, но спасибо, буду знать

Denis
28.09.2017
08:19:03
Привет! Я столкнулся с проблемами производительности на нечетком поиске по триграммам в pg. Есть табличка на 400к записей с ФИО, по ней периодически делается нечеткий поиск (когда не нашли по обычному на btree). Проблема в том, что чем длиннее строка поиска на триграммах, тем дольше поиск (что логично, нужно больше триграмм сравнить). То есть я себя нахожу по фамилии и имени с опечаткой за 0,5 сек, а по фамилии, имени с опечаткой и отчеству за 1,1 сек. В связи с этим вопрос, кто-то придумывал варианты радикального ускорения нечеткого поиска в pg? Биграммы не предлагать, они не умеют нечеткий поиск

Darafei
28.09.2017
08:34:32
а индексы созданы? :)

Denis
28.09.2017
08:35:20
Конечно)

Darafei
28.09.2017
08:36:49
а покажи какой-нибудь план, чтобы объём трагедии было видно? :)

Google

Denis
28.09.2017
08:39:14

Darafei
28.09.2017
08:39:49
попробуй сделать так, чтобы оно влезло в память, например

Denis
28.09.2017
08:43:53
Это решение за счёт ресурсов и оно вряд ли даст существенный прирост - там индекс на 34 мб всего

Vadim
28.09.2017
08:44:25
Без плана - это гадание на кофейной гущи)

Denis
28.09.2017
08:44:45
Попробую сбросить через пару часов

Vadim
28.09.2017
08:44:58
?

Massimo
28.09.2017
10:34:30
Поскажите, у меня client encoding меняется обратно на windows 1251 после перезапуска терминала хотя я ставлю все utf-8
можно ли установить так, чтобы не менялось?

Sergey
28.09.2017
10:38:43
Попробуйте на уровне СУБД alter system set client_encoding ...

Massimo
28.09.2017
10:47:06

Sergey
28.09.2017
10:47:26
База на Windows?

Massimo
28.09.2017
10:48:06
Да к сожалению

Sergey
28.09.2017
10:49:12
Используйте родные для Windows названия локалей и чарсетов. Кажется в initdb это две отдельных опции и выглядят в духе Russia_Russian и UTF8
Но тут, про конкретные значения уже забыл. Подбирал по справочнику из MSDN

Alex
28.09.2017
10:51:14
http://www.g-loaded.eu/2011/02/27/locale-windows/