Size: a a a

pgsql – PostgreSQL

2021 March 25

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
На локале я добавил в эту таблицу  contact_origin varchar NULL и сделал массовый апдейт
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Дмитрий Мачихелян
Да, не выполнял
А что выполняли? Там читается почти в два раза больше данных, хотя примерно такое же количество записей, вот в чём дело.
Тем не менее, на PROD-е настолько быстрее не поэтому (это просто наблюдение), а потому, что я написал в начале https://t.me/pgsql/292760
источник

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
Yaroslav Schekin
А что выполняли? Там читается почти в два раза больше данных, хотя примерно такое же количество записей, вот в чём дело.
Тем не менее, на PROD-е настолько быстрее не поэтому (это просто наблюдение), а потому, что я написал в начале https://t.me/pgsql/292760
На локале я добавил в эту таблицу  contact_origin varchar NULL и сделал массовый апдейт
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Дмитрий Мачихелян
На локале я добавил в эту таблицу  contact_origin varchar NULL и сделал массовый апдейт
» Вы массового UPDATE (всей таблицы или около того) на этом тестовом сервере не выполняли, случайно?
> Да, не выполнял

>  и сделал массовый апдейт

Что?!
источник

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
Ой, извините)
источник

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
Я имел в виду, что на проде не выполнял. А на локале выпонлял. Неправильно прочитал
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Дмитрий Мачихелян
На локале я добавил в эту таблицу  contact_origin varchar NULL и сделал массовый апдейт
Ну вот её и "раздуло", собственно. Т.е. понятно, почему она вдвое больше, по крайней мере.
А в остальном — см. выше.
источник

b

batyrmastyr in pgsql – PostgreSQL
Kamiλ Liberal-free
В общем, у меня есть json, в котором динамические рут ключи. Понятное дело, что это уже проблема дизайна, но что есть, то есть.
{ "5421bba9-1af5-4bbf-b266-821318040caf":  { .. } }
Соответственно, мне нужно доставать инфу по этим рутовым uuid.
> The default GIN operator class for jsonb supports queries with top-level key-exists operators ?, ?& and ?| operators and path/value-exists operator @>.
Изворачивайтесь через @>
источник

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
Yaroslav Schekin
Ну вот её и "раздуло", собственно. Т.е. понятно, почему она вдвое больше, по крайней мере.
А в остальном — см. выше.
А раздутие нужно через vacuum решать?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Дмитрий Мачихелян
А раздутие нужно через vacuum решать?
Можно. Не обязательно нужно.
Если бы проблема была в нём, было бы раза в два медленнее, всего лишь.
Это делается:
VACUUM FULL contacts;
VACUUM ANALYZE contacts;

если что.
источник

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
Кстати, я использовал его. Он вроде не особо помог)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Дмитрий Мачихелян
Кстати, я использовал его. Он вроде не особо помог)
Именно так, как я написал выше?
И, ещё раз (в третий? ;) ), и не должен был — основная проблема не в этом.
источник

ДМ

Дмитрий Мачихелян... in pgsql – PostgreSQL
Yaroslav Schekin
Именно так, как я написал выше?
И, ещё раз (в третий? ;) ), и не должен был — основная проблема не в этом.
Не, я сейчаас не о проблеме долгого вопроса, а про размер.
vacuum full contacts использовал, размер не особо уменьшился.
Хотя честно могу соврать, вчера ночью использовал vacuum
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Дмитрий Мачихелян
Не, я сейчаас не о проблеме долгого вопроса, а про размер.
vacuum full contacts использовал, размер не особо уменьшился.
Хотя честно могу соврать, вчера ночью использовал vacuum
Если это действительно так — где-то есть что-то ("зависшая" транзакция, или слот репликации и т.п.), что мешает очистке.
источник

KL

Kamiλ Liberal-free in pgsql – PostgreSQL
batyrmastyr
> The default GIN operator class for jsonb supports queries with top-level key-exists operators ?, ?& and ?| operators and path/value-exists operator @>.
Изворачивайтесь через @>
Спасибо, попробую
источник

b

batyrmastyr in pgsql – PostgreSQL
Kamiλ Liberal-free
Спасибо, попробую
И есть ещё путь [лёгкого] извращения: вручную проиндексировать ключи.

CREATE FUNCTION jsonb_top_keys (IN x JSONB, OUT keys TEXT[])
IMMUTABLE
AS 'select array_agg(src.k) FROM (SELECT * FROM jsonb_object_keys(x) AS k) AS src'
LANGUAGE SQL;

CREATE INDEX ... USING GIN(jsonb_top_keys(json_column))

SELECT ... WHERE jsonb_top_keys(json_column) && ARRAY['key']


Запросто может оказаться в разы компактнее и быстрее стандартного индекса за счёт меньшего размера исходных данных.
источник

KL

Kamiλ Liberal-free in pgsql – PostgreSQL
batyrmastyr
И есть ещё путь [лёгкого] извращения: вручную проиндексировать ключи.

CREATE FUNCTION jsonb_top_keys (IN x JSONB, OUT keys TEXT[])
IMMUTABLE
AS 'select array_agg(src.k) FROM (SELECT * FROM jsonb_object_keys(x) AS k) AS src'
LANGUAGE SQL;

CREATE INDEX ... USING GIN(jsonb_top_keys(json_column))

SELECT ... WHERE jsonb_top_keys(json_column) && ARRAY['key']


Запросто может оказаться в разы компактнее и быстрее стандартного индекса за счёт меньшего размера исходных данных.
ну я думал про функциональный индекс, но почему-то показалось оверкиллом
источник

KL

Kamiλ Liberal-free in pgsql – PostgreSQL
У меня в целом в таблице всего 5к+ кортежей, но жсоны могут быть огромными, так что посомтрю, как будет работать
источник

b

batyrmastyr in pgsql – PostgreSQL
Kamiλ Liberal-free
ну я думал про функциональный индекс, но почему-то показалось оверкиллом
Мне тоже так казалось, но на моих данных это 192 kB против 7904 kB и Execution time: 12.312 ms против 182.274 ms.
источник

KL

Kamiλ Liberal-free in pgsql – PostgreSQL
хмммм
источник