Size: a a a

pgsql – PostgreSQL

2020 May 27

YS

Yaroslav Schekin in pgsql – PostgreSQL
Chern Oleksander
а кините ссылкой, я вот не могу понять, когда происходит агрегация как в данном запросе
лучший индекс это получается на devtodev_id и action_date.
А что происходит в этот момент для MAX(mx.action_tdate).

Я к тому имеет и разница что находится внутри агрегатной функции?
если б было

SELECT mx.devtodev_id, MAX(
1
) AS last_action_tdate
 FROM core_data.level_start_tbl AS mx
WHERE mx.action_date BETWEEN '2020-05-01' AND '2020-05-27'
GROUP BY mx.devtodev_id
Это что-то изменило б?

Спасибо
Ну и правильно не можете — это я неправильно прочитал название поля, извините. ;)
источник

ВТ

Виктор Ткаченко... in pgsql – PostgreSQL
Chern Oleksander
а кините ссылкой, я вот не могу понять, когда происходит агрегация как в данном запросе
лучший индекс это получается на devtodev_id и action_date.
А что происходит в этот момент для MAX(mx.action_tdate).

Я к тому имеет и разница что находится внутри агрегатной функции?
если б было

SELECT mx.devtodev_id, MAX(
1
) AS last_action_tdate
 FROM core_data.level_start_tbl AS mx
WHERE mx.action_date BETWEEN '2020-05-01' AND '2020-05-27'
GROUP BY mx.devtodev_id
Это что-то изменило б?

Спасибо
action_tdate жеж нужен иначе за ним придется идти на диск
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Виктор Ткаченко
action_tdate жеж нужен иначе за ним придется идти на диск
Я к тому есть ли разница что группируется, а что считается(агрегируется)
select action_date, sum(amount_usd)
from tbl
group action_date

в таком случае главное это action_date?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Chern Oleksander
а кините ссылкой, я вот не могу понять, когда происходит агрегация как в данном запросе
лучший индекс это получается на devtodev_id и action_date.
А что происходит в этот момент для MAX(mx.action_tdate).

Я к тому имеет и разница что находится внутри агрегатной функции?
если б было

SELECT mx.devtodev_id, MAX(
1
) AS last_action_tdate
 FROM core_data.level_start_tbl AS mx
WHERE mx.action_date BETWEEN '2020-05-01' AND '2020-05-27'
GROUP BY mx.devtodev_id
Это что-то изменило б?

Спасибо
Тогда тут нужно аж два индекса, по идее (первый (devtodev_id, action_date) — чтобы получить все devtodev_id, подходящие под условие, и второй (devtodev_id, action_tdate) — чтобы получить эти максимумы)
Кстати говоря... у Вас случайно нет таблицы с этими devtodev_id, а если есть — сколько их там (может, там их не намного больше, чем тех, которые попадают под условие)?
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Yaroslav Schekin
Тогда тут нужно аж два индекса, по идее (первый (devtodev_id, action_date) — чтобы получить все devtodev_id, подходящие под условие, и второй (devtodev_id, action_tdate) — чтобы получить эти максимумы)
Кстати говоря... у Вас случайно нет таблицы с этими devtodev_id, а если есть — сколько их там (может, там их не намного больше, чем тех, которые попадают под условие)?
неа, тоесть если б я отобрал where devtodev_id (1,2,3,45) сработал бы индекс и было б хорошо ?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Chern Oleksander
Я к тому есть ли разница что группируется, а что считается(агрегируется)
select action_date, sum(amount_usd)
from tbl
group action_date

в таком случае главное это action_date?
В смысле?
В таком примере никак не "выкрутишься", суммы придётся считать. И, если нет WHERE, индекс тут может помочь (а может и не помочь) такой, где есть сортировка по action_date и одновременно есть amount_usd (иначе всё равно всю таблицу читать).
Т.е. (action_date, amount_usd) или (action_date) с INCLUDE amount_usd.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Chern Oleksander
неа, тоесть если б я отобрал where devtodev_id (1,2,3,45) сработал бы индекс и было б хорошо ?
Нет, "само" хорошо тут не будет. ;) Если хотите loose index scan — запрос придётся переписать, такого PostgreSQL сам делать, к сожалению, пока не умеет вообще.
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Yaroslav Schekin
В смысле?
В таком примере никак не "выкрутишься", суммы придётся считать. И, если нет WHERE, индекс тут может помочь (а может и не помочь) такой, где есть сортировка по action_date и одновременно есть amount_usd (иначе всё равно всю таблицу читать).
Т.е. (action_date, amount_usd) или (action_date) с INCLUDE amount_usd.
Получается что
select action_date, max(amount_usd)
и
select amount_usd, max(action_date)
это одинаковые запросы?
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Yaroslav Schekin
Нет, "само" хорошо тут не будет. ;) Если хотите loose index scan — запрос придётся переписать, такого PostgreSQL сам делать, к сожалению, пока не умеет вообще.
Ладно тогда пойду сначало почитаю и обратно вернусь если будет не понятно.
Спасибо большое!
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Chern Oleksander
Получается что
select action_date, max(amount_usd)
и
select amount_usd, max(action_date)
это одинаковые запросы?
Нет, это совершенно разные запросы...
И это же очевидно — наверное, я не понимаю, о чём Вы спрашиваете. :(
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Yaroslav Schekin
Нет, это совершенно разные запросы...
И это же очевидно — наверное, я не понимаю, о чём Вы спрашиваете. :(
я в том плане что если будет составной индекс для action_date и amount_usd
для оптимизатора будет одно и тоже
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Chern Oleksander
я в том плане что если будет составной индекс для action_date и amount_usd
для оптимизатора будет одно и тоже
Нет, не одно и то же. Индекс (action_date, amount_usd) всё-таки [намного] лучше для
select action_date, max(amount_usd) FROM ... GROUP BY action_date;

, а для:
select amount_usd, max(action_date) FROM ... GROUP BY amount_usd;

от него толк только в том, что таблицу читать, может быть, не придётся.
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Yaroslav Schekin
Нет, не одно и то же. Индекс (action_date, amount_usd) всё-таки [намного] лучше для
select action_date, max(amount_usd) FROM ... GROUP BY action_date;

, а для:
select amount_usd, max(action_date) FROM ... GROUP BY amount_usd;

от него толк только в том, что таблицу читать, может быть, не придётся.
О, вот так теперь понятней стало. Спасибо!
источник

S

Spirit💎 in pgsql – PostgreSQL
Добрый день, господа! Сдуру ребутнул сервак через sudo reboot, после этого моя бд в докере перестала стартовать, ругаясь на невалидную запись праймари чекпоинта. Бэкапов конечно же нет. Как можно реанимировать это все?
источник

GS

Grigory Smolkin in pgsql – PostgreSQL
источник

l

lnuynxa in pgsql – PostgreSQL
Spirit💎
Добрый день, господа! Сдуру ребутнул сервак через sudo reboot, после этого моя бд в докере перестала стартовать, ругаясь на невалидную запись праймари чекпоинта. Бэкапов конечно же нет. Как можно реанимировать это все?
вообще если настройки не крутили, то оно не должно умирать таким образом
источник

S

Spirit💎 in pgsql – PostgreSQL
lnuynxa
вообще если настройки не крутили, то оно не должно умирать таким образом
все дефолтное, на самом деле
источник

l

lnuynxa in pgsql – PostgreSQL
Spirit💎
Добрый день, господа! Сдуру ребутнул сервак через sudo reboot, после этого моя бд в докере перестала стартовать, ругаясь на невалидную запись праймари чекпоинта. Бэкапов конечно же нет. Как можно реанимировать это все?
ну предлагают очистить WAL журнал
источник

S

Spirit💎 in pgsql – PostgreSQL
я не секу в этом, поэтому пришел к специалистам, дабы не ухудшить положение)
источник

l

lnuynxa in pgsql – PostgreSQL
но вообще, я бы попробовал удалить последний WAL сегмент, вдруг поможет(учитывая экстренный ребут может проблема в нем)
источник