
Stanislav
22.03.2018
15:13:01
первое что нужно сделать это перестать тролировать и признать jsonc или какойнибудь python/js жсоном :3

Anton [Mgn, az09@osm]
22.03.2018
15:13:01
проверять на валидность можно тут https://jsonlint.com/

Staysha
22.03.2018
15:16:57

Anton [Mgn, az09@osm]
22.03.2018
15:17:13
?
[{
"a": ["foo1", "foo2"]
}, {
"b": ["boo1", "boo2"]
}]
вот такой жсон является валидным и возможно отвечает Вашим требованиям

Google

Staysha
22.03.2018
15:17:55
спасибо, сейчас полезу все проверять и перезаливать

Anton [Mgn, az09@osm]
22.03.2018
15:17:59
не может быть. чего-то нам не договариваете

Staysha
22.03.2018
15:18:15
{"0": {"8001": "1"}, "1": {"6832": "1"}, "2": {"9306": "2"}, "3": {"9316": "10"}, "4": {"9305": "2"}, "5": {"866": "1"}, "6": {"3102": "1"}}
вот строка

Anton [Mgn, az09@osm]
22.03.2018
15:18:44

Staysha
22.03.2018
15:19:36
тогда повторю вопрос)
как достать запись, зная, только "8001"

Vladimir
22.03.2018
15:20:15
Можно ли сделать так, чтобы падение одного из процессов не валило всю базу? Сейчас получается, что один процесс падает и тащит за собой все остальные. Где логика? Где стабильность?

Darafei
22.03.2018
15:23:17
стабильность в том, что после того, как всё упало, оно поднимается и работает

Vladimir
22.03.2018
15:24:17
Одна мелкая ошибка валит базу. Честно говоря, не ожидал, что оно так

Mike Chuguniy
22.03.2018
15:25:25
Логика в том, что у вас упавший процесс чего-то сделал с шареной памятью, и ПГ посчитал, что там каша (вполне обоснованно). Соответственно, перезапустился.

Darafei
22.03.2018
15:26:54

Vladimir
22.03.2018
15:37:21

Darafei
22.03.2018
15:37:29
где?

Google

Vladimir
22.03.2018
15:38:46
где?
Пока не знаю. Будем воспроизводить и смотреть через gdb

Grigory
22.03.2018
15:40:14
Корка-то есть?

Alex
22.03.2018
15:40:20
некоторые функции работы с JSON бывает изредка утягивают БД в сегфолт
(сталкивался в 9.3)

Vladimir
22.03.2018
15:43:59

Darafei
22.03.2018
15:44:20
версия какая?

Vladimir
22.03.2018
15:45:46

Darafei
22.03.2018
15:46:42
Fix crash due to rowtype mismatch in json{b}_populate_recordset() (Michael Paquier, Tom Lane)
в 9.6.6 какие-то креши чинили

Vladimir
22.03.2018
15:49:45

Darafei
22.03.2018
15:50:13
а, ну так настройте систему, чтобы память не заканчивалась

Vladimir
22.03.2018
15:51:09

Darafei
22.03.2018
15:51:51
так а в упавшем запросе что?

Vladimir
22.03.2018
15:53:01

Darafei
22.03.2018
15:53:04
work_mem не запрещает аллоцировать больше, постгрес на него смотрит только в процессе планирования

Konstantin
22.03.2018
15:55:28
Work_mem в Посгресе это увы, просто пожелание трудящихся. Это та цифра, на которую оптимизатор ориентируется, планируя выполнение запроса. Типа сортировка будет использовать буфер на больше этго размера. Если оптимизатор сильно не ошибётся в статистике, то может выйти за эти пределы. Ну и нет никакого жёсткого ограничения на память. Если кому-то захочется сожрать её всю, то никакой work_mem этому не помешает.
Так что надо ловить разожравшиеся бэкенды, цепляться к ним отладчиком и дампить мемори контексты.

Vladimir
22.03.2018
15:56:49

Konstantin
22.03.2018
15:56:50
Может быть по ним удасться понять кто съел память. А может и не удасться...

1Bot
22.03.2018
18:38:50

Anton [Mgn, az09@osm]
22.03.2018
18:45:52
Какую запись нужно достать? т. е. какой будет результат?
with t as (select * from (values(1, '{"0": {"8001": "1"}, "1": {"6832": "1"}, "2": {"9306": "2"}, "3": {"9316": "10"}, "4": {"9305": "2"}, "5": {"866": "1"}, "6": {"3102": "1"}}'::jsonb),(2,'[{"999":"test"}]'::jsonb)) as t(id,j)) select id, jsonb_pretty(j) from t;
думаю тут нужно получить запись с id=1

Google

Anton [Mgn, az09@osm]
22.03.2018
18:49:07
если заранее известен уровень вложенности то видимо дойти до ключей 8001, 6832, 9306, ... не сложно.

1Bot
22.03.2018
18:52:55

Staysha
22.03.2018
20:44:15
Мне нужен поиск внутри массива, не по верхнему значению

Anton [Mgn, az09@osm]
23.03.2018
02:11:39
#report #spam @pasha_golub @Komzpa

Anton
23.03.2018
04:29:18
всем доброго! подскажите пожалуйста как быть:
- есть две таблицы products(товары), param_values(значения параметров товаров), и таблица их соединяющая param_values_products
- param_values хранит значения (value) соответствующего параметра (param_name_id)
- каким образом мне выбрать товары у которых различные параметры (param_name_id) принимают заданные значения, типа:
(value >= 100 AND value <= 150 AND param_name_id = 45)
AND
(value >= 1 AND value <= 3 AND param_name_id = 14)
вложенный селект не пойдет тк параметров(param_name_id) по сути не фиксированное и большое кол-во
https://www.postgresql.org/docs/9.4/static/queries-union.html

Darafei
23.03.2018
05:34:41
where .... and exists (select from params where id=product_id and param_value between 10 and 100) and exists (...)

1Bot
23.03.2018
05:47:49


Aw
23.03.2018
06:03:18

1Bot
23.03.2018
06:05:18

Eugeny
23.03.2018
06:10:04
А что не так, если join по ключам?
ну наверно то, что из за двойного left join оптимизатор не знает, сколько он достанет записей (pv.value >= A AND pv.value <= B)
и вероетно будет seq scan ) но нужно смотреть план

Grigory
23.03.2018
06:34:32

Staysha
23.03.2018
06:49:39
Спасибо всем неравнодушным

TEH3OP
23.03.2018
07:19:24
Привет всем.
Pgsql9.6
Кто пользовался btrfs с компрессией для баз? Там проблемы могут быть какие? Есть альтернативы?

Google

Ilia
23.03.2018
07:21:29
Компрессия для БАЗ?
Вы чего, СЕРЬЁЗНО?

TEH3OP
23.03.2018
07:21:52
Ну там таблица в 100 гиг

Eugeny
23.03.2018
07:22:05

Ilia
23.03.2018
07:22:07
Денег на диски не хватает?

Айтуар
23.03.2018
07:22:58
Возможно он думает что процы дешевле.

TEH3OP
23.03.2018
07:23:28
Pgsql9.6
После того как я сделал cluster table как-нибудь можно контролировать сохранение упорядоченности?

Ilia
23.03.2018
07:23:34
Я бы понял ещё интеллектуальное сжатие данных ВНУТРИ БД, Типа columnstore и так далее.
А СНАРУЖИ в ФАЙЛОВОЙ СИСТЕМЕ--- это треш какой-то.

Kirill
23.03.2018
07:23:46
Сжатие позволяет не только место экономить, но и ускорять работу если читать нужно много и всё в кэш ОС не попадает

Ilia
23.03.2018
07:24:23

Kirill
23.03.2018
07:25:14
А с кэшом ОС то что не так? )

Ilia
23.03.2018
07:25:39
А зачем он?
Память лишняя?
Впрочем, это всё сугубо теоретические споры и холивар, извините. Я просто удивляюсь подходам таким...

Kirill
23.03.2018
07:27:29
Зачастую - да, бывает лишняя. По сжатию http://garret.ru/PageLevelCompression.pdf , видимо в PgPro тоже достаточно безумные сидят

Ilia
23.03.2018
07:27:57
Не, такое сжатие как раз наоборот ОК
Я же выше сказал.

Kirill
23.03.2018
07:28:56

Ilia
23.03.2018
07:29:27
Ну у MySQL нет собственного кэша данных на MyISAM, он использует кэширование ОС

Alexey
23.03.2018
07:29:56
*поперхнулся смузи*

Google

Ilia
23.03.2018
07:31:11

Alexey
23.03.2018
07:32:16

Yaroslav
23.03.2018
07:33:02
Ну, PostgreSQL тоже использует кэширование данных ОС, и говорят, если его попробовать отключить, будет больно об этом вспоминать (лично не пробовал). ;)

Kirill
23.03.2018
07:33:29

Yura
23.03.2018
07:33:38

Айтуар
23.03.2018
07:36:28

Mike Chuguniy
23.03.2018
07:45:53
* ехидно ухмыляясь
@funny_falcon а его хорошо потестировали? погоняли на различных типах нагрузки, на отказоустойчивость, и вот это фсйо?
*поперхнулся смузи*
Ну что поделаешь, не видели люди, что случается с мысклем, когда включается сжатие.

Darafei
23.03.2018
07:48:18

Alexey
23.03.2018
07:49:17

Yura
23.03.2018
07:50:45

Grigory
23.03.2018
07:51:07

Alexey
23.03.2018
07:51:35

Mike Chuguniy
23.03.2018
07:51:36
@Komzpa, я в курсе, что у вас оно давно уже более-менее стабильно работает, поэтому и уточнил, что на различных типах нагрузки, и на отказоустойчивость. Например, опердени в каком-нибудь банке?

Alexey
23.03.2018
07:52:02

Mike Chuguniy
23.03.2018
07:52:08