@pgsql

Страница 1029 из 1062
Amir
10.10.2018
11:46:00
добрый день поправьте если я ошибаюсь: отловил триггер в системе который работает дольше чем хотелось бы есть AFTER триггер на изменение поля в таблице1: в теле триггерной функции идет update таблицы1 set колонка2 = вычисляемое значение где таблица1.id = new,id я правильно понимаю что у нас заново идет поиск нужной строки в Таблице1 по индексу ИД, т.е. мы не работаем с текущим значением которое нам и так уже известно если бы был триггер на BEFORE то было бы достаточно написать NEW.колонка2 = ... RETURN NEW и это значение попало бы в нашу таблицу но там сложная логика, и переносить из AFTER в BEFORE нет возможности как можно в AFTER триггере пересохранить значение колонки без дополнительного поиска по ИД? или тут вариантов как кроме переноса в BEFORE нет?

Bogdan (SirEdvin)
10.10.2018
11:48:37
К счастью, нет)

Yaroslav
10.10.2018
12:39:12
добрый день поправьте если я ошибаюсь: отловил триггер в системе который работает дольше чем хотелось бы есть AFTER триггер на изменение поля в таблице1: в теле триггерной функции идет update таблицы1 set колонка2 = вычисляемое значение где таблица1.id = new,id я правильно понимаю что у нас заново идет поиск нужной строки в Таблице1 по индексу ИД, т.е. мы не работаем с текущим значением которое нам и так уже известно если бы был триггер на BEFORE то было бы достаточно написать NEW.колонка2 = ... RETURN NEW и это значение попало бы в нашу таблицу но там сложная логика, и переносить из AFTER в BEFORE нет возможности как можно в AFTER триггере пересохранить значение колонки без дополнительного поиска по ИД? или тут вариантов как кроме переноса в BEFORE нет?
А почему Вы думаете, что "работает дольше чем хотелось бы" вообще связано с "update таблицы1 set колонка2 = вычисляемое значение где таблица1.id = new.id"? А как это он у Вас рекурсивно не вызывается, кстати?

Google
Terminator
10.10.2018
14:14:35
@AleksanderKomissarov будет жить. Поприветствуем!

Aleksander
10.10.2018
14:19:13
Всем привет. Пересел после oracle pl/sql на postgree pgplsql и просто в ужасе и туплю как писать функции, что с курсорами и где и куда commit?

Aleksander
10.10.2018
14:21:03
Есть ли понятная по синтаксису дока где будет понятно мне как ораклисту что да как писать. Ведь нет пакетов и процедур

Желательно на русском

Aleksander
10.10.2018
14:22:31
Bogdan
10.10.2018
14:23:29
Есть ли понятная по синтаксису дока где будет понятно мне как ораклисту что да как писать. Ведь нет пакетов и процедур
Вместо процедур функции. Если надо, функция может возвращать table или курсор, но с курсором веселье, автокомит его может явно закрыть сразу же после вызова, если не в транзакции был вызов

Mike Chuguniy
10.10.2018
14:24:22
В 11-й версии процедуры появятся, кстати, насколько я помню анонсы.

Алексей
10.10.2018
14:40:47
если в таблице id задан через sequence, можно ли как то автоматически обновлять текущее значение sequence до максимального id в таблице, если id при вставке задан числом, а не через nextval ?

Mikhail
10.10.2018
14:42:47
Google
Mikhail
10.10.2018
14:43:17
А автокомит как то убрать можно?
Выше ссылка про процедуры

Алексей
10.10.2018
14:46:37
SELECT setval('table_seq', (SELECT max(id) from "table"));
только отдельным запросом? каких то встроеных средств нет ?

elfiki
10.10.2018
14:47:03
Mikhail
10.10.2018
14:48:04
только отдельным запросом? каких то встроеных средств нет ?
Это не возможно сделать в общем виде. И даже частные случаи практические придумать крайне не просто

Darafei
10.10.2018
14:49:46
только отдельным запросом? каких то встроеных средств нет ?
ну вот вставишь ты одну запись с максимальным id, и что дальше делать? :)

Алексей
10.10.2018
14:52:35
Yaroslav
10.10.2018
14:52:38
только отдельным запросом? каких то встроеных средств нет ?
А зачем? Вы уверены, что используете sequences по назначению / понимате их предназначение и ограничения?

Mikhail
10.10.2018
14:53:36
Можно разого выставить значение сиквенса , да

Функция сетвал

Можно это периодически повторять — но это не про конкуренцию над данными

Yaroslav
10.10.2018
14:56:08
импорт из xls
А как Вы это делаете / зачем Вам там sequence?

Алексей
10.10.2018
15:01:50
А как Вы это делаете / зачем Вам там sequence?
в таблице хранятся пользователи, зарегистрированные на сайте(id автоинкрементный). но в некоторых случаях пользователи должны быть импортированны из xls с теми id, которые прописаны в xls. в случае совпадения id данные обновляются, или добавляются, если id нет в таблице

Сергей
10.10.2018
15:04:02
А коллизии могут быть? Если реально разные люди под таким id?

Алексей
10.10.2018
15:08:47
колизий по id нет. пользователи регистрируются до определенного момента. потом регистрация закрывается. список скачивается для обработки. потом к текущему списку добавляются новые, из другой базы со следующими по порядку id

Yaroslav
10.10.2018
15:09:08
в таблице хранятся пользователи, зарегистрированные на сайте(id автоинкрементный). но в некоторых случаях пользователи должны быть импортированны из xls с теми id, которые прописаны в xls. в случае совпадения id данные обновляются, или добавляются, если id нет в таблице
Как-то это кривовато (100% надёжного решения на основании setval Вы всё равно не сделаете)... но если очень хочется, то почему бы не cделать обработку unique violation (и повтор вставки) в тех приложениях, которые используют autoincrement?

Алексей
10.10.2018
15:10:49
к сожалению легаси код (

Google
Rushan
10.10.2018
15:13:16
Коллеги, добрый день! Не могли бы посоветовать какой-нибудь курс по PostgreSQL ?

Mike Chuguniy
10.10.2018
15:14:54
Коллеги, добрый день! Не могли бы посоветовать какой-нибудь курс по PostgreSQL ?
Это вот весьма тонкое и изуверское издевательство

Alexey
10.10.2018
15:15:41
Хм... чем плохо каждый раз sequence выставлять на максимальный следующим запросом?

Rushan
10.10.2018
15:16:13
Mike Chuguniy
10.10.2018
15:16:27
Rushan
10.10.2018
15:17:25
8 постов выше ссылка на один из курсов.
у меня ноут и я вижу мало постов)

спасибо!

Алексей
10.10.2018
15:18:35
Хм... чем плохо каждый раз sequence выставлять на максимальный следующим запросом?
да ничего плохого ) просто думал мб есть какой-то встроеный механизм для автообновления

Alexey
10.10.2018
15:19:49
А если кто-то сделает +1, когда мой запрос нашёл max, но не записал в sequence? Такое может быть?

Rushan
10.10.2018
15:19:56
Yaroslav
10.10.2018
15:20:16
Хм... чем плохо каждый раз sequence выставлять на максимальный следующим запросом?
Тем, что это "работает" (при отсутствии обработки "duplicate key value violates unique constraint") только в случае, если с базой работает только один клиент (да и то не всегда)?

Алексей
10.10.2018
15:21:08
одновременно оба маханизма не работают

Yaroslav
10.10.2018
15:21:48
да ничего плохого ) просто думал мб есть какой-то встроеный механизм для автообновления
Разумеется, нет. Это противоречило бы смыслу sequences. Их дело — выдавать уникальные значения, да и всё.

Yaroslav
10.10.2018
15:24:21
А пример какой плохой?
Да любой. ;) > Вот это может быть? sequence же не транзакционный, не? Да, может, конечно. И да, не транзакционный.

колизий по id нет. пользователи регистрируются до определенного момента. потом регистрация закрывается. список скачивается для обработки. потом к текущему списку добавляются новые, из другой базы со следующими по порядку id
Подождите. Судя по этому описанию, после момента закрытия Вам вообще должно быть всё равно, какое там текущее значение sequence, т.к. она больше никогда не будет использована... нет?

Vadim
10.10.2018
15:38:30
У меня вопрос. Есть 2 взаимосвязанные таблицы. Необходимо обьединить данные и вернуть по определенному критерию. В самом join есть 2 условия обьединения и есть конечный where с like. Запрос долго выполняеться. Как то можно увеличить производительность?

Google
Usagi
10.10.2018
16:40:01
Ребята, я вот стока текста прочитал про pgpool. Но так и не понял, как он балансирует INSERT запросы

Mikhail
10.10.2018
16:40:24
Не используйте pgpool

Usagi
10.10.2018
16:41:28
patroni очень сложный в данный момент

точнее не успел освоить

Alex
10.10.2018
16:42:37
а что есть для балансинга траффика актуального ?

кроме pgpool ?

Anton
10.10.2018
16:50:08
А как произносится на русском название СУБД?

Постгрэс - это будет корректное произношение?

Kirill
10.10.2018
17:02:57
Да

Я слышал версию, что любое произношение корректно, кроме «постгре» :)

Bogdan (SirEdvin)
10.10.2018
17:09:33
Ребята, я вот стока текста прочитал про pgpool. Но так и не понял, как он балансирует INSERT запросы
А их можно балансировать? Вроде просто запрос на все мастер ноды идет

Mike Chuguniy
10.10.2018
18:16:28
а что есть для балансинга траффика актуального ?
plproxy но для этого у вас приложение должно работать по через хранимки.

Alex
10.10.2018
21:09:31
plproxy но для этого у вас приложение должно работать по через хранимки.
Всегда думал что plproxy для горизонтального масштабирования. И он не транзакционен как я помню. Интересует скорее решение по делению трафика на чтение запись и только чтение

Amir
10.10.2018
21:39:09
А почему Вы думаете, что "работает дольше чем хотелось бы" вообще связано с "update таблицы1 set колонка2 = вычисляемое значение где таблица1.id = new.id"? А как это он у Вас рекурсивно не вызывается, кстати?
потому что я сильно упростил пример, на самом деле там ужас, и триггеров параход, просто explain analyze verbose показал что именно этот триггер сходит сума , там записей лямо под 70 в самой таблице плюс на after триггер навешано поле по денормализации... вот я задумался а не двойная ли это работа на after заново по ИД искать

но думаю можно такой пример сдеать для проверки: сделаю тестовую таблицу, триггер на after с поиском по ид и индекс а апдейтить буду с поиском по полю отличном чем по ид после проверю сколько раз индекс считался

Alex
10.10.2018
21:42:15
Реплики синхронные? Хранимки есть?
Реплики синхронные, внедрение хранимок невозможно

Google
Yaroslav
10.10.2018
21:42:18
потому что я сильно упростил пример, на самом деле там ужас, и триггеров параход, просто explain analyze verbose показал что именно этот триггер сходит сума , там записей лямо под 70 в самой таблице плюс на after триггер навешано поле по денормализации... вот я задумался а не двойная ли это работа на after заново по ИД искать
Из того, что тормозит триггер, не следует, что в этом виноват находящийся в нём "update таблицы1 set колонка2 = вычисляемое значение где таблица1.id = new.id;", нет? А так — это какая-то дополнительная работа (но если поле индексировано, то практически никакая — всё уже закешировано, почти со 100% вероятностью)...

Amir
10.10.2018
21:43:17
ну там апдейт еще с from к другой таблице, как раз денормализацию делает

вроде бы понятно что оверхед переложили на плечи вставки и апдейтов , чем потом тягать данные из этой таблицы без лишних join но тут вставка уже стала в топ 1 лесть по баджер отчету

вставка и апдейты

вот может триггер на before легче будет

Yaroslav
10.10.2018
21:45:46
ну там апдейт еще с from к другой таблице, как раз денормализацию делает
> на самом деле там ужас, и триггеров параход Придётся Вам это раскапывать, скорее всего. :( Т.к. без конкретики ничего не подскажешь всё равно.

Amir
10.10.2018
21:47:29
придется распутать клубок касдадных триггеров по всем зависимым таблицам) я даже в свое время писал запрос который сразу строит дерево связей всех таблиц через триггеры, раз в год эта пушка стреляет)

всем спасибо, без тестовых замеров не проверить, буду распутывать)

Alex
10.10.2018
22:25:19
Haproxy postgresql balancing
таки haproxy же просто tcp-balancing делает без определения того что внутри исполняется, нет ?

речь не про мультимастер

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