
Fike
17.07.2018
22:31:25
SELECT table1.*, jsonb_each_text() FROM ...

Yaroslav
17.07.2018
23:36:56

Davra
18.07.2018
02:56:13

Александр
18.07.2018
03:11:28
Добрый день, подскажите пожалуйста, буферный кэш и кэш операционной системы в итоге кэшируют одни и те же страницы 2 раза?

Google

Farid
18.07.2018
05:17:49
Как посмотреть default text search config?
SHOW default_text_search_config;
Ищу по gin индексу
SELECT "item"."params", to_tsvector(COALESCE(("item"."params" ->> 'street'))) AS "search" FROM "item" WHERE to_tsvector(COALESCE(("item"."params" ->> 'street'))) @@ (to_tsquery('Кутузова')); получается регистрозависимый поиск, как сделать регистронезависимый?

Vadim
18.07.2018
06:19:11
в to_tsvector тоже не забывать

Farid
18.07.2018
06:20:05

Vadim
18.07.2018
06:20:42
Ну и убедиться что LC_LOCALE не C

Farid
18.07.2018
06:20:57
C вроде
ENCODING = 'UTF8'
LC_COLLATE = 'C'
LC_CTYPE = 'C'
TABLESPACE = pg_default

Vadim
18.07.2018
06:27:55
Крепись бро. Придется пересоздавать базу с lc_collate=utf-8

Farid
18.07.2018
06:29:11

Vadim
18.07.2018
06:31:05
Lc_ctype тоже

Google

Vadim
18.07.2018
06:31:10
Утф

Yaroslav
18.07.2018
06:37:30

Leonid
18.07.2018
07:40:41
люди, есть очень странное поведение. если кто-то что-то такое видел, то скажуте куда копать.
дано: если модуль на го, работающий с postgres 9.5. работа происходил в 99% случаев в фоновом процессе, который запускается раз в минуту.
время от времени ( от 5 минут до часа) процесс соединения модуля и базы (на сервере, где бежит postgres) вырастает ровно на 264 байта.
в pg_stat_activity idle последний запрос INSERT, который вызывает ФП. В 95% случаев он откатывается из-за uniq index.
кто-то что-то подобное видел? куда копать?

Yaroslav
18.07.2018
07:48:37


Leonid
18.07.2018
07:50:18
postgres 26815 0.0 0.2 369152 8860 ? Ss 10:25 0:00 postgres: postgres ...
вот, там где 8860 10 минут назад было 8596
на го написан модуль, он запускается как service, держит соединение постоянное с базой

Yaroslav
18.07.2018
08:05:08

Leonid
18.07.2018
08:05:39
спасибо, попробую

Amir
18.07.2018
08:23:59
подскажите, это как то можно поднастроить:
если запрос завершается с ошибкой например
ERROR: canceling statement due to user request
или
FATAL: connection to client lost
то в логах нет записи с какими параметрами этот запрос был запущен
в нормальном же случае если запрос был исполнен корректно то в логах появляется такая строка следом за запросом
2017-12-22 10:55:54 BLABLABLA [17121]: [156-1] db=bla,appname=192.168.4.71,user=bla_slave,client=192.168.5.111 DETAIL: parameters: $1 = '87833', $2 = '139', $3 = '87833',
можно сделать так что бы в случае ERROR или FATAL входящие параметры записались в лог?
получилось так что запрос ушел в длинную транзакцию, стал генерить много временных файлов, запрос пришлось завершить, но в итоге в логах нет данных с какими параметрами пользователь запустил этот запрос,
и понять какое место лечить не ясно


Davra
18.07.2018
08:59:02
Добрый день всем, помогите кто не занят:
имеется таблица в которой есть колонка c типом jsonb, в ней хранится Jsonb объект. Нужно отфильтровывать запросы по всем значениям (value) внутри этого jsonb объекта, при этом у него могут быть разные ключи. Вот например как работает сейчас:
SELECT * FROM table1 WHERE table1.jsonb_column::text LIKE '%filter%'; Однако теперь нужно игнорировать совпадения по ключам и работать только со значениями JSONB объектов
.
при этом ключи могут быть разными

Amir
18.07.2018
09:04:14

Davra
18.07.2018
09:04:48
ключ то есть, но он разный кажрый раз

Yaroslav
18.07.2018
09:04:51

Serg
18.07.2018
09:05:27
select * from table1 where 'filter' in json_each(jsonb_column)

Amir
18.07.2018
09:06:55
самый медленный способ это извлекать все значения по ключу и проверять
если же у вас такое что наличие этого ключа это редкое явление, то можно построить соответствующий индекс на наличие этого ключа для ускорения
по мне так лучше всего было использовать jsquery

Davra
18.07.2018
09:09:51

Google

Davra
18.07.2018
09:10:31
просто попросили добавить фильтр на сайт по этим вот значениям

Amir
18.07.2018
09:10:52
https://postgrespro.ru/docs/postgrespro/9.5/jsquery

Yaroslav
18.07.2018
09:11:43

Amir
18.07.2018
09:13:21
нет, я думаю там как раз Davron не в курсе какие параметры могут пользователи добавить к своим сущностям
но раз они добавляют тот же вес или длину или цвет то хотят иметь фильтры по ним)

Davra
18.07.2018
09:13:50

Amir
18.07.2018
09:15:07
ну все просто, вам же приходит наименование ключа, и значение, можете любой способ применить для фильтрации, но лучше делайте так что точно по индексам работает + сами индексы)
по сути вы делаете фильтр
item @@ 'id.%($ > 100)'::jsquery
внутри в jsquery вы можете сгененировать прикладом любую логику)

Yaroslav
18.07.2018
09:19:48


Davra
18.07.2018
09:39:56
ладно, всем кто откликнулся спасибо, что-нибудь придумаю

Yaroslav
18.07.2018
09:48:38
по идее одноуровневый
Ну, например:
WITH x(n, js) AS (
VALUES (1, '{"a":"foo", "b":"bar"}'::jsonb),
(2, '{"a":"bax", "b":"baz"}'::jsonb),
(3, '{"a":"baz", "b":"foo"}'::jsonb))
SELECT *
FROM x
WHERE EXISTS (SELECT 1 FROM jsonb_each_text(x.js) AS t(k, v) WHERE t.v = 'foo')
Хотя, по-хорошему, бросали бы вы это дело (в смысле, подумали о нормализации схемы).
Чем дальше, тем страшнее будет, я подозреваю. :(

Davra
18.07.2018
09:52:43
вообще решение я вчера нашел, но оно немного корявое:
SELECT table1.*, table2.name
FROM table1
CROSS JOIN LATERAL jsonb_each_text(table1.jsonb_column) AS jsonb_column
LEFT JOIN table2
ON table1.t2_id = table2.id WHERE value LIKE '%filter%';
но пробелема возникает когда в jsonb_column лежит одноуровневый объект с множественными парами ключи-значение
он просто дублирует строки меняя столбец value

Yaroslav
18.07.2018
09:56:15

Davra
18.07.2018
09:56:50
Ну, например:
WITH x(n, js) AS (
VALUES (1, '{"a":"foo", "b":"bar"}'::jsonb),
(2, '{"a":"bax", "b":"baz"}'::jsonb),
(3, '{"a":"baz", "b":"foo"}'::jsonb))
SELECT *
FROM x
WHERE EXISTS (SELECT 1 FROM jsonb_each_text(x.js) AS t(k, v) WHERE t.v = 'foo')
Хотя, по-хорошему, бросали бы вы это дело (в смысле, подумали о нормализации схемы).
Чем дальше, тем страшнее будет, я подозреваю. :(
я его испугался)
а если серьезно, просто наврятли на этот проект можно будет добавить расширение

Yaroslav
18.07.2018
10:08:51

Davra
18.07.2018
10:09:07

Google

Yaroslav
18.07.2018
10:09:31

Davra
18.07.2018
10:12:44
а ой

Andre
18.07.2018
11:12:15
Привет. В одном из столбцов таблицы есть массив (BIGINT[]). Как эффективно получить строки, у которых содержится конкретное значение в этом массиве?

Admin
ERROR: S client not available

Anton [Mgn, az09@osm]
18.07.2018
11:17:03
> лучше бы вы нормализовали схему...

elfiki
18.07.2018
11:24:06

Денис
18.07.2018
11:26:10
Привет всем
Подскажите пожалуйста, время от времени сервер выдает такую ошибку:
org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections
После того как начинает её выдавать ни один сервлет не может подключиться к БД постоянно вылетает, минут через 10 ошибка пропадает, либо после перезагрузки всех сервлетов

Oleg
18.07.2018
11:27:25
я не большой спец, но тут надо в postgres.conf увеличивать параметр max_connections
если на хосте еще есть вычислительные ресурсы типа память.
либо смотреть список процессов, решать кого отстреливать, ограничивать в коннекшнах, или прикручивать пулы коннектов или их лимиты на стороне приложения.

Andre
18.07.2018
11:39:26

elfiki
18.07.2018
11:40:08

Andre
18.07.2018
11:41:15
обидно только, что GIN-индекс не может быть на нескольких столбцах

Yaroslav
18.07.2018
11:42:13

Tolya
18.07.2018
11:42:39
Всем привет!
Подскажите, пожалуйста, как в PostgreSQL реализован сбор статистики?
Допустим, стоит дефолтное значение собирать по 100 самплов с каждого поля. Это значит, что при каждом ANALYZE будут рандомно выдернуты 100 самплов? Или что каждый раз будут выдернуты одни и те же самплы?
Если распределение неравномерное, может быть такое, что выполненный несколько раз подряд ANALYZE в итоге приведет к разным планам выполнения запросов?
И еще вопрос в продолжение темы – куда смотреть если даже после повышения сбора самплов до 10к и выполнения VACUUM ANALYZE по таблице, планер сильно врет при предсказании ожидаемого числа строк и фактическом результате?

Gennady
18.07.2018
11:50:45
> планер сильно врет при предсказании ожидаемого числа строк и фактическом результате
присоединяюсь к вопросу, иногда катастрофически врёт


Yaroslav
18.07.2018
11:59:38
Всем привет!
Подскажите, пожалуйста, как в PostgreSQL реализован сбор статистики?
Допустим, стоит дефолтное значение собирать по 100 самплов с каждого поля. Это значит, что при каждом ANALYZE будут рандомно выдернуты 100 самплов? Или что каждый раз будут выдернуты одни и те же самплы?
Если распределение неравномерное, может быть такое, что выполненный несколько раз подряд ANALYZE в итоге приведет к разным планам выполнения запросов?
И еще вопрос в продолжение темы – куда смотреть если даже после повышения сбора самплов до 10к и выполнения VACUUM ANALYZE по таблице, планер сильно врет при предсказании ожидаемого числа строк и фактическом результате?
> Допустим, стоит дефолтное значение собирать по 100 самплов с каждого поля.
Это не 100 samples. Это размер MCV и гистограмм.
> Это значит, что при каждом ANALYZE будут рандомно выдернуты 100 самплов?
Но да, выбираются они (более-менее) случайно.
> Или что каждый раз будут выдернуты одни и те же самплы?
Нет, если выбирается не вся таблица, то разные.
> Если распределение неравномерное, может быть такое, что выполненный несколько раз подряд ANALYZE в итоге приведет к разным планам выполнения запросов?
Да, может.
> И еще вопрос в продолжение темы – куда смотреть если даже после повышения сбора самплов до 10к и выполнения VACUUM ANALYZE по таблице, планер сильно врет при предсказании ожидаемого числа строк и фактическом результате?
В план конкретного запроса — это всё не так просто.


Tolya
18.07.2018
12:05:48
join’ов нет в запросе. Есть выборка по паре полей с плавающей селективностью (зависит от передаваемого в предикат значения) и составной индекс по этим полям

elfiki
18.07.2018
12:05:57

Tolya
18.07.2018
12:06:14
и вот эту плавающую селективность, кажется, постгрес оценить не может или оценивает плохо. а дальше это влияет и на планы

Google

Tolya
18.07.2018
12:07:46
условно, иногда есть кейсы, когда постгрес ожидает 20к+ строк, когда по факту запрос возвращает одну строку

Yaroslav
18.07.2018
12:08:18

Tolya
18.07.2018
12:09:07
про то и речь. чтобы понять, смог бы я или нет, пытаюсь разобраться в алгоритме работы PostgreSQL при сборе статистики
наверное, смог бы, если бы все было так просто, как я выше описал. По факту там вместо одного значения еще и функция передается. На это поле построен функциональный индекс и по нему также поднята до максимума статистика. точнее, это поле как раз входит в составной индекс
и вот если бы не он, помогла бы фича с create statistics, вероятно
а так постгрес не может связать поля из индекса и таблицы
и сэмплов 10к явно мало для большой таблицы, а поднять выше не выходит

Yaroslav
18.07.2018
12:11:54

Tolya
18.07.2018
12:12:14
я понимаю, что можно изменить модель таблицы и что-то еще с другой стороны придумать и так скорее всего и пойдем
просто уже интересно стало доразобраться в данном случае, что именно приводит к затыку в планах

Yaroslav
18.07.2018
12:12:23

Tolya
18.07.2018
12:13:32
MCV = most common values?
а планы разве не на основе гистограмм строятся?