@pgsql

Страница 894 из 1062
Yaroslav
18.07.2018
16:31:21
я строил аналогичный своему кейсу составной функциональный индекс с условием
Только заметил: > я строил аналогичный своему кейсу составной функциональный индекс с условием С каким ещё условием? ;)

Google
Tolya
18.07.2018
16:51:47
условие create index idx_bar_bad ON table (bad_func(dar), bar) WHERE ((baz) = 'SOME__NONSELECTIVE_STATUS');

Yaroslav
18.07.2018
16:54:33
условие create index idx_bar_bad ON table (bad_func(dar), bar) WHERE ((baz) = 'SOME__NONSELECTIVE_STATUS');
Так чтоб он использовался, в запросе должно быть это WHERE. И потом, там была какая-то "маленькая" тонкость со статистикой по partial index (то ли она вообще не учитывается, то ли даже не собирается... а вот в совсем или в отдельных случаях, я сходу не помню). :(

Vladimir
18.07.2018
16:55:24
Привет! Есть таблица create table groups ( id integer, parents int[] ); Вопрос - как найти все строки, в которых последний элемент равен заданному значению? Пробовал SELECT * FROM groups where parents[-1] = 3; - не работает. SELECT * FROM groups where parents[array_upper(parents, 1)] = 3; - работает, но не уверен, что использует GIN-index Есть какой-то простой опреатор вроде @> ?

Tolya
18.07.2018
17:11:03
при этом для составного индекса не обязательно наличие обоих полей оказалось, работает даже если одно из двух в условии запроса есть

в таком случае должна статистика починиться, как построится индекс по полю без where условия

а не вспомните, случайно, где про эту тонкость прочитать можно?

Vladimir
18.07.2018
17:18:22
на маленькой табличке seq scan

большую не делал пока

Yaroslav
18.07.2018
17:19:24
на маленькой табличке seq scan
Ну, мне кажется, что и не должен... ;) Но вообще, проверять можно, делая "SET enable_seqscan = off;" в своей сессии.

Vladimir
18.07.2018
17:23:13
спасибо. навскидку нет такого оператора, чтобы не использовать array_length?

Google
Yaroslav
18.07.2018
17:28:22
спасибо. навскидку нет такого оператора, чтобы не использовать array_length?
Да вроде нет... Может, вам функциональный индекс попробовать? (А ещё лучше вовсе не использовать массивы без очень серьёзных оснований.)

Pavlo
18.07.2018
17:51:44
Всем прив, как можно сделать авто счетчик исли повторилась оприделеная строка? (пример на фото)



Pavlo
18.07.2018
18:26:21
А зачем тебе такой вариант?
Ну например чтоб знать количество постов конкретного user, с.м фото више

Pavlo
18.07.2018
18:29:14
Yaroslav
18.07.2018
18:30:09
1.2.3.4...
То есть, всё же id? Как-то так: SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id) AS post FROM t ORDER BY id;

Denis
18.07.2018
18:33:10
Ну например чтоб знать количество постов конкретного user, с.м фото више
Да) не стоит Такие штуки должны "считаться" count-ом

Чтоб ты делал еслиб пользователь удалили? Искал с максимальным значением и удалял строку? + Ещё замечание в том что пользователь не ссылка

Alexandr
18.07.2018
18:35:40
Это корявое проектирование, которое стрельнет обязательно

Denis
18.07.2018
18:36:09
Ну у тебя в почте ссылка на того кто его создал А потом Селект Каунт Фром таблица_постов Веа ссылка на пользователя = айди пользователя

Alexandr
18.07.2018
18:36:14
Делайте отдельно посты и отдельно таблицу для счётчика

Denis
18.07.2018
18:36:14
Сори за лень

Pavlo
18.07.2018
18:36:35
Google
Alexandr
18.07.2018
18:36:44
Заполняйте по триггеру например

Denis
18.07.2018
18:38:41
Заполняйте по триггеру например
Ну это как транзакции к примеру в банковских системах Они не хранят значения( может и хранят, но пересчитывают) А формируют баланс по сумме приходов и вычетов

Tolya
18.07.2018
19:17:30
В итоге во всем был виноват частичный индекс -> отсутствие статистики по целевому полю

Yaroslav спасибо за помощь :)

Yaroslav
18.07.2018
19:23:23
Alexey
19.07.2018
04:52:38
Не сталкивались с такой странной темой, когда по непонятной, или понятной причине пропал replication slot с AWS RDS? Вот был-был - и нету. Дропнулся. Слот явно не удаляли, logical_replication не меняли. Воспроизвести, ессно не удалось.

Богдан
19.07.2018
07:20:38
Господа, а как правильно сделать запрос, например если не найшло по одному условию, то что бы искало по другому условию? Как бы OR не совсем подходит, потому что тогда может выбраться 2 записи, а здесь именно важен приоритет?

идея только сделать с 2 запросами

Denis
19.07.2018
07:22:33
Нужно сделать OR (второе условие AND NOT первое условие)

Богдан
19.07.2018
07:23:22
сейчас пример сделаю

Denis
19.07.2018
07:23:52
Да, верно, спасибо.

Misha
19.07.2018
07:23:54
where (a = true and b = false) or (a =false and b = true)

Богдан
19.07.2018
07:27:08
вот примерно такой алгоритм сейчас select * from users where chat_id = '5554545' -- Если Ненашло по первому запросу ищем по второму select * from users where username = 'alex'

elfiki
19.07.2018
07:29:38
вообще одна
Ну тогда в выборку добавить условие, что типа если выполняется первое условие, то вернуть 1, иначе 2 отсортировать по нему и лимит 1

В самом запросе оба условия через or поставить

Google
Богдан
19.07.2018
07:32:04
идея такая было, но к примеру может быть такое вариант, что во втрому условию chat_id к примеру будет меньше, и тогда если я по нему сделаю сортировку, то место того что бы выбрало первому условию, выберет по втрому

Admin
ERROR: S client not available

elfiki
19.07.2018
07:32:28
Не

Богдан
19.07.2018
07:36:03
хм ... может я не понял как сделать запрос? сделал вот так select * from users where chat_id = '5527' OR username = 'aleks' order by chat_id

elfiki
19.07.2018
07:36:18
SELECT *, CASE WHEN chat_id=‘1111111’ THEN 1 ELSE 2 END AS pr FROM users where chat_id=‘111111’ or username=‘alex’ order by pr limit 1

TEH3OP
19.07.2018
07:38:52
Низкий поклон вам, линуксоиды. Не подскажете хороший набор шаблонов+скриптов для мониторинга pgsql в zabbix.

Богдан
19.07.2018
07:39:42
Данил
19.07.2018
07:50:23
Добрый день. Как правильно можно завершать свой же тяжёлый запрос к Бд? Права у пользователя минимальные и позволяют только select операции

Данил
19.07.2018
08:11:33
А разве cancel при этом не работает? Какой это клиент/api?
Через php запускают запросы к бд. Точнее к сожалению сказать не могу.

Yaroslav
19.07.2018
08:11:41
Сенкс, реально крутое решение, большое спасибо
Лучше (для производительности) бы вы через UNION ALL сделали, наверное...

Через php запускают запросы к бд. Точнее к сожалению сказать не могу.
А он не умеет cancel? И, кстати, что такое "свой же", в той же сессии?

Данил
19.07.2018
08:13:28
Через php запускают запросы к бд. Точнее к сожалению сказать не могу.
Если убивать процесс порожденый php при запуске запроса это убьёт выполнение запроса на стороне бд?

А он не умеет cancel? И, кстати, что такое "свой же", в той же сессии?
Имел ввиду запрос от одного и того же пользователя.

Yaroslav
19.07.2018
08:15:01
Если убивать процесс порожденый php при запуске запроса это убьёт выполнение запроса на стороне бд?
Не сразу, насколько я помню. Можно, впрочем, понастраивать timeout-ы, keepalives, и т.п.

Данил
19.07.2018
08:15:03
А он не умеет cancel? И, кстати, что такое "свой же", в той же сессии?
Насчёт cancel не знаю. :( запрос выполняется в отдельном фоновом процессе.

Yaroslav
19.07.2018
08:15:24
Google
Данил
19.07.2018
08:15:51
Не сразу, насколько я помню. Можно, впрочем, понастраивать timeout-ы, keepalives, и т.п.
Это настройки СУБД? Или можно задать для каждого запроса?

Yaroslav
19.07.2018
08:17:01
Это настройки СУБД? Или можно задать для каждого запроса?
Можно и для каждого, но, естественно, это надо делать в той же сессии. А как насчёт pg_cancel_backend?

Данил
19.07.2018
08:20:45
Можно и для каждого, но, естественно, это надо делать в той же сессии. А как насчёт pg_cancel_backend?
Так он же требует выдачи прав :( пользователь без правый и повысить приведение нет возможности

elfiki
19.07.2018
08:21:22
свои же вроде и так можно без прав

Данил
19.07.2018
08:22:31
А как узнать pid или иной идентификатор по которому убивать процесс?

elfiki
19.07.2018
08:25:55
pg_stat_activity

Yaroslav
19.07.2018
08:30:22
А как узнать pid или иной идентификатор по которому убивать процесс?
А вот как вы будете "узнавать" нужную сессию (если от этого пользователя их много), вам придётся придумать. :)

Yaroslav
19.07.2018
08:32:51
Данил
19.07.2018
08:36:12
"SELECT pg_backend_pid();", в смысле?
Pid имеем на одну сессию или на одну операцию?

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