pgsql | Unsorted

Telegram-канал pgsql - pgsql – PostgreSQL

9404

Чат русскоязычного сообщества PostgreSQL, здесь мы обсуждаем технические вопросы, для поиска работы и предложения вакансий есть группа https://t.me/pgsqljobs For English discussion visit https://t.me/pg_sql

Subscribe to a channel

pgsql – PostgreSQL

Всем привет. Есть вот такая табличка

db=# \d+ sometable
Table "public.sometable"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
---------+--------------------------+-----------+----------+-------------------------------------------------+----------+--------------+-------------
col1 | integer | | not null | | plain | |
col2 | timestamp with time zone | | not null | | plain | |
col3 | character varying(128) | | not null | | extended | |
col4 | character varying(32) | | not null | | extended | |
hstore_col | hstore | | | | extended | |
id | bigint | | not null | nextval('sometable_id_seq'::regclass) | plain | |
Indexes:
"sometable_pkey" PRIMARY KEY, btree (id)
"index_hstore" btree ((hstore_col -> 'email'::text)) WHERE col4::text = 'sometext'::text
Access method: heap
Options: autovacuum_vacuum_scale_factor=0.001

с легаси в виде hstore. Индекс index_hstore был создан для запроса вида
SELECT "sometable"."id", "sometable"."col1", "sometable"."col2", "sometable"."col3", "sometable"."col4", "sometable"."hstore_col" FROM "sometable" WHERE (("sometable"."hstore_col" -> 'email') = 'randomemail' AND "sometable"."col4" = 'sometext') ORDER BY "sometable"."id" DESC LIMIT 100;

Однако, запрос его не использует (хотя раньше, при меньшем объеме данных, использовал). Я так и не дождался завершения этого запроса с analyze, он бежал больше 30 минут. Приложу просто explain
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=0.58..168260.31 rows=100 width=259)
-> Index Scan Backward using sometable_pkey on sometable (cost=0.58..336916555.35 rows=200236 width=259)
Filter: (((col4)::text = 'sometext'::text) AND ((hstore_col -> 'email'::text) = 'randomemail'::text))
Settings: effective_cache_size = '32GB', jit = 'off', max_parallel_workers_per_gather = '0', random_page_cost = '1.1', work_mem = '64MB'

После того, как делаю индекс первичного ключа невалидным, запрос идет по нужному плану (дальше будут ссылки на сенд-кодер)
https://send-code.ru/paste/jimxhAEg
и если прогнать с analyze, то запрос выполняется моментально
https://send-code.ru/paste/mkoLlUgl
Проблема в том, что фактически строк с заданным email в таблице 0, когда оптимизатор ожидает их примерно 200236. Попробовал сделать n_distinct проблемной колонке -1
alter table sometable alter COLUMN hstore_col set (n_distinct = -1);

не помогло. Вероятно, связано с типом поля типа hstore. Увеличение stastic_target также не помогает. Единственный костыль, который помогает, снижение random_page_cost до 0.3, что в целом на уровне данной транзакции можно сделать, но в какой-то момент тоже может вылиться в проблемы. Есть ли у кого идеи, как победить планировщик?) Варианты с изменением типа поля на jsonb или вынос email в отдельное поле не предлагать)

Читать полностью…

pgsql – PostgreSQL

А бывают аппаратные, которые на самом деле софтварные - это две потенциальные точки отказа!

Читать полностью…

pgsql – PostgreSQL

Да, этот вариант тоже рассматривал

Дата-инженер отговаривает, склоняет к аппаратному RAID, но спасибо за информацию!

Читать полностью…

pgsql – PostgreSQL

Там еще очереди RabbitMQ, которые тоже кушают iops

Читать полностью…

pgsql – PostgreSQL

Рассматриваю решение RAID на NVMe, чтобы проблема ушла, но решение не тривиальное, изучаю, вроде нашел подходящий контроллер уже

Читать полностью…

pgsql – PostgreSQL

Или даже двадцатое столетие после неудачной обрезки строки.

Читать полностью…

pgsql – PostgreSQL

мб 20 ноября текущего года. или какого-то еще конкретного

Читать полностью…

pgsql – PostgreSQL

и как в python это сделать ?

Читать полностью…

pgsql – PostgreSQL

Добрый день! Подскажите, пожалуйста, как в postgresql преобразовать строку ‘ноя.20’ в дату? Сама поковырялась, пока не выходит. Я нуб, простите

Читать полностью…

pgsql – PostgreSQL

Только про нормальные формы
https://dmkpress.com/catalog/manga/978-5-97060-044-3/

Читать полностью…

pgsql – PostgreSQL

Дуиташимасите, кочира косо.

Читать полностью…

pgsql – PostgreSQL

Так получилось!!!

Большое спасибо!!!

Читать полностью…

pgsql – PostgreSQL

вы его не исключите из квазироли PUBLIC, нет такого в постгресе функционала (ну или я не знаю его).
надо у квазироли PUBLIC отобрать право на создание таблиц в схеме public: REVOKE CREATE ON SCHEMA public FROM PUBLIC;, и тогда у всех пользователей в СУБД пропадёт возможность создавать таблицы в public (в том числе и у new_user, чего вы и добивались).

Читать полностью…

pgsql – PostgreSQL

Я, кстати, непомню — как точно этот revoke делается. Чуть ли не через пустой grant (и проверять мне сейчас лень).
В общем, у меня когда-то несколько раз получалось, но всё, что я помню от тех времён — что я вздыхал как убога эта подсистема в постгресе.

Читать полностью…

pgsql – PostgreSQL

Ну, видите, они ужэ и нехотят.

Читать полностью…

pgsql – PostgreSQL

всем привет подскажите пожалуйста
а современная версия постгреса не дает возможности в терминале выполнять последовательно команды (т е сначала написав begin потом end) в режиме реального времени?
(читаю книгу вот эту https://edu.postgrespro.ru/sql_primer.pdf ) раздел транзакции там надо имитировать в режиме реального времени блокировку

вылезает такая ошибка когда в первом терминале пытаюсь транзакцию руками провести

psql (16.2 (Debian 16.2-1.pgdg120+2))
Type "help" for help.

root=# BEGIN;
BEGIN
root=*# SELECT *
FROM aircrafts_tmp
WHERE range < 2000;
ERROR: relation "aircrafts_tmp" does not exist
LINE 2: FROM aircrafts_tmp
^
root=!# SELECT *
FROM aircrafts_data
WHERE range < 2000;
ERROR: current transaction is aborted, commands ignored until end of transaction block

это как-то обходится?

Читать полностью…

pgsql – PostgreSQL

Аппаратный – дополнительная точка отказа (физическая). Но решать вам, конечно.

Читать полностью…

pgsql – PostgreSQL

На всякий случай: существуют и софтварные RAID'ы, и они вполне успешно применяются в промышленной эксплуатации (в т.ч. в крупных инфраструктурах вроде mail/ru).

Читать полностью…

pgsql – PostgreSQL

Много операций IOPS у софта, отсюда и такие проблемы. Софт уже оптимизировался

Читать полностью…

pgsql – PostgreSQL

До нашей эры тоже годится, кстати. Бронзовый век, все дела.

Читать полностью…

pgsql – PostgreSQL

Это будет "минимум" ;)

Читать полностью…

pgsql – PostgreSQL

Но ведь в этой строке нет дня месяца. Максимум, вы можете преобразовать это в дату вида 2020-11-01 (или выбрав любой другой подходящий константный день, либо последний день месяца).

Читать полностью…

pgsql – PostgreSQL

А какие языки программирования вы освоили?

Читать полностью…

pgsql – PostgreSQL

О, у меня такая книжка есть

Читать полностью…

pgsql – PostgreSQL

а что, так до сих пор и нет даже манги про постгрес, не говоря уж про постгрес-тян?

Читать полностью…

pgsql – PostgreSQL

А что вы пытались сделать таким стэйтментом?

(Да, public это псевдо-роль, она можэт быть указана не везде, где могут быть указаны обычные роли).

Читать полностью…

pgsql – PostgreSQL

я вот тоже не нашёл. и мне тоже подспудно казалось, что вроде как можно, но это не точно. :/

Читать полностью…

pgsql – PostgreSQL

Что-то не получается у public отнять create (

REVOKE create FROM public;
ОШИБКА: роль "public" не существует

Читать полностью…

pgsql – PostgreSQL

да, так не дает

test=# REVOKE public FROM new_user;
ОШИБКА: роль "public" не существует


сейчас revoke попробую

Читать полностью…

pgsql – PostgreSQL

сейчас бы в 2025 держать мелкую бд на hdd.

Читать полностью…
Subscribe to a channel