@pgsql

Страница 724 из 1062
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"}}

вот строка

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)

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
Fix crash due to rowtype mismatch in json{b}_populate_recordset() (Michael Paquier, Tom Lane) в 9.6.6 какие-то креши чинили
У нас oomkiller. Настолько привык, что в OracleDB крах процесса не влияет на остальные, что прямо удивительно. Просто прибиваешь процесс - и готова база.

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

Vladimir
22.03.2018
15:51:09
а, ну так настройте систему, чтобы память не заканчивалась
Так не должны 50 процессов жрать много мегабайт. Work_mem 1 мб или около того

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 этому не помешает.

Так что надо ловить разожравшиеся бэкенды, цепляться к ним отладчиком и дампить мемори контексты.

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

1Bot
22.03.2018
18:38:50
тогда повторю вопрос) как достать запись, зная, только "8001"
Какую запись нужно достать? т. е. какой будет результат?

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
если заранее известен уровень вложенности то видимо дойти до ключей 8001, 6832, 9306, ... не сложно.
Операторы есть для поиска ключа верхнего уровня, скорее всего реккурсивный обход нужен

Staysha
22.03.2018
20:44:15
Какую запись нужно достать? т. е. какой будет результат?
Json это поле в таблице, надо достать всю запись Надо типа поиск по значению (например 8001) При построении запроса он мне выводит все записи таблицы, не выбирает по значению

Мне нужен поиск внутри массива, не по верхнему значению

если заранее известен уровень вложенности то видимо дойти до ключей 8001, 6832, 9306, ... не сложно.
В том то и дело, что он не идёт туда((( Я не догоняю вообще как это работает

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
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
тогда повторю вопрос) как достать запись, зная, только "8001"
можно так select * from ttt left join jsonb_each(json_field) as j on true where j.key = '8001'

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
Не, такое сжатие как раз наоборот ОК

Я же выше сказал.

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
Ну у MySQL нет собственного кэша данных на MyISAM, он использует кэширование ОС
PostgreSQL тоже с диском не в O_DIRECT работает, и ничего, жив. Там же всё немного сложнее чем прочто использует или нет

Yura
23.03.2018
07:33:38
Зачастую - да, бывает лишняя. По сжатию http://garret.ru/PageLevelCompression.pdf , видимо в PgPro тоже достаточно безумные сидят
Для таблиц, почти полностью холодных, оно работает зашибись. Что интересно, оно работает и в случае oltp нагрузки.

Айтуар
23.03.2018
07:36:28
Pgsql9.6 После того как я сделал cluster table как-нибудь можно контролировать сохранение упорядоченности?
Насколько я помню это одноразово работает и потом просто периодически нужно запускать в зависмости от частоты изменений в таблице.

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

*поперхнулся смузи*
Ну что поделаешь, не видели люди, что случается с мысклем, когда включается сжатие.

Alexey
23.03.2018
07:49:17
Ну что поделаешь, не видели люди, что случается с мысклем, когда включается сжатие.
а в innodb, между прочим, самое передовое сжатие из всех open-source субд. вот то, что ПгПро написало — это какой-то детский лепет по сравнению с тем, что в innodb

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
??? И чем же оно такое передовое?
Тем, что оно существенно снижает потребление ресурсов системы. Весьма существенно.

Страница 724 из 1062