
Artem
09.08.2017
09:59:41
Коллеги, а кто как разворачивает слейв для потоковой репликации, через basebackup или rsync?

Alexey
09.08.2017
10:03:00

Nikolay
09.08.2017
10:13:24

Alexey
09.08.2017
10:17:14

Google

Dmitriy
09.08.2017
10:21:54
Коллеги, приветствую. есть запрос:
select * from flowlog where ( ((timestart between 1498856400 and 1502139600) and timeend >= 0) OR (timestart <= 1498856400 and timeend = 0) ) and outsideip = '<secret_ip>'::inet order by timestart,insideip,outsideip
B есть индекс:
CREATE INDEX timeindex
ON public.flowlog
USING btree
(timeend, timestart)
TABLESPACE cgnatdb;
Индекс почему-то не используется, и в explain всегда seq scan. PG 9.6
Сейчас объем таблицы не большой, но запрос отрабатывает 2.3-2.5 секу
Таблица порядка гигабайта

Александр
09.08.2017
10:26:06
чисто из любопытства
а если убрать одно из условий ора
или сортировку
то индекс начинает юзаться?

Darafei
09.08.2017
10:26:49

Dmitriy
09.08.2017
10:28:10
значит можно разбить на два запроса и через union склеить
или слишком костыльно?

Darafei
09.08.2017
10:29:10
так должно заработать, да
один скан - один интервал

Andrey
09.08.2017
10:31:13
Если бы использовали null вместо 0, запрос можно было бы переписать без or: between coalesce() and coalesce(), и создать функциональный индекс.

Darafei
09.08.2017
10:32:28
так себе затея
скорее похоже на tstzrange https://www.postgresql.org/docs/9.6/static/rangetypes.html и gist по нему
тогда можно для конца полноценно проставить бесконечность и проверять одно вхождение

Google

Darafei
09.08.2017
10:35:41
gis=# select '[2010-01-01 14:30, infinity)'::tstzrange;
tstzrange
-------------------------------------
["2010-01-01 14:30:00+02",infinity)
(1 row)

Mikhail
09.08.2017
10:56:41
Всем привет! В функции PQexecParams функция забирает владение параметрами, или их нужно самому очищать?

Anton [Mgn, az09@osm]
09.08.2017
10:57:50
пхп что-ли?

Andrey
09.08.2017
10:58:08

Mikhail
09.08.2017
11:12:34

Yura
09.08.2017
11:16:54
Коллеги, приветствую. есть запрос:
select * from flowlog where ( ((timestart between 1498856400 and 1502139600) and timeend >= 0) OR (timestart <= 1498856400 and timeend = 0) ) and outsideip = '<secret_ip>'::inet order by timestart,insideip,outsideip
B есть индекс:
CREATE INDEX timeindex
ON public.flowlog
USING btree
(timeend, timestart)
TABLESPACE cgnatdb;
Индекс почему-то не используется, и в explain всегда seq scan. PG 9.6
А какова семантика запроса?
И почему индекс по (timeend, timestart) (а не по (timestart, timeend), например)?
Впрочем, в виду того, что в постгрессе пока нет статистики по двум полям одновременно, для оптимизатора этот запрос выглядит как:
вариант a) select * where timeend >= 0
вариант b) select * where timestart <= 1502139600
оба варианта ведут к логичному выводу: "всё равно нужно все записи просматривать, так зачем нам индекс?"

Anton [Mgn, az09@osm]
09.08.2017
11:17:58
Где?
а, сорян. это сишная либа

Mikhail
09.08.2017
11:45:33
Кто нибудь в курсе, как вставить в качестве параметра время для PQExecParams?
Может метод кто подскажет, как перевести time_t в строковое представление timestamp на C

Ildar
09.08.2017
11:47:46

Mikhail
09.08.2017
11:48:03
да, только что нашел
:)
Жаль что нельзя как бинарную дату засунуть, только к строке получается

Nikolay
09.08.2017
11:50:09

Ildar
09.08.2017
11:52:02

Mikhail
09.08.2017
11:52:38


Andrey
09.08.2017
12:08:36
Приветствую.. Ктонибудь подскажет, почему экскепшин. кинутый из constraint trigger проглатывается системой и его нигде не видно?
Код:
CREATE OR REPLACE FUNCTION public.trf_check_staff_dublicates (
)
RETURNS trigger AS
$body$
BEGIN
raise exception 'test';
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
CREATE CONSTRAINT TRIGGER nr_pmu_mo_staff_detail_tr_unq
AFTER INSERT OR UPDATE
ON public.nr_pmu_mo_staff_detail
DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW
EXECUTE PROCEDURE public.trf_check_staff_dublicates();
Вопрос снят.. Баг EMS Postgresql Manager-a. c psql все норм:
begin;
BEGIN
nr=# insert into nr_pmu_mo_staff_detail(staff_id,nr_pmu_depart_id, nr_pmu_depart_hospital_subdivision_id,post_id,total_rate)
nr-# values(2,136161,1,150,1);
INSERT 0 1
nr=# commit;
ОШИБКА: test
КОНТЕКСТ: функция PL/pgSQL trf_check_staff_dublicates(), строка 10, оператор RAISE


Mikhail
09.08.2017
13:01:42
Скажите, если я начал транзакцию, и у меня упало соединени, я могу ее закончить, или нужно будет заново начинать?

Сергей
09.08.2017
13:02:17
вроде как она откатится...

Google

Akzhan
09.08.2017
13:04:06
Заново

Mikhail
09.08.2017
13:04:40
Понял, спасибо!
А если я два раза вызываю BEGIN, что происходит с операциями до второго BEGIN, она сбрасываются?

Andrey
09.08.2017
13:30:12
Так нельзя сделать. Он скажет transaction already in progress.

Mikhail
09.08.2017
13:30:36
А, понял
спасибо
А у нас prepare сохраняются между коннектами?
Есть какой нибудь prepare if not exists?

Nikolay
09.08.2017
19:31:38
Агрессивный автовакуум + pg_repack
pg_repack – это extension, а значит его много куда просто невозможно поставить или очень трудозатратно. Есть ещё compact_table, pgcompacttable и pgcompact — торжество опенсорса, каждый решил пилить свою ветку вместо объединения усилий ? В итоге у каждого свои минусы, да и все трое подзаброшены, судя по коммитам и PR. Хотя это направление намного интереснее pg_repack, т.к. не надо ничего ставить кроме стандартного pgstattuple (а он есть даже у RDS).
то есть, в целом с этим ситуация плачевна или я что-то упустил?
А у нас prepare сохраняются между коннектами?
https://www.postgresql.org/docs/9.6/static/sql-prepare.html — тут сразу видно, что 1) "PREPARE name [ ( data_type [, ...] ) ] AS statement" нет if not exists; 2) "Prepared statements only last for the duration of the current database session."

Darafei
09.08.2017
19:40:27

Nikolay
09.08.2017
19:42:17
?

Айтуар
09.08.2017
19:44:15

Nikolay
09.08.2017
19:46:20
ну если серьёзно к составлению такого списка подходить, на первом месте будет идти create index concurrently

Darafei
09.08.2017
19:46:56
create index concurrently не сделает репак таблицы
индекс - да

Nikolay
09.08.2017
19:47:12
так самая большая беда не в распухании таблицы, а распухании индексов ?
и те же инструменты-заменители vacuum full дают ещё больше распухание. ну и сами же делают пересоздание индексов в итоге, т.к. там никаких больше рецептов пока нет

Айтуар
09.08.2017
19:49:03

Nikolay
09.08.2017
19:49:45
какая таблица? ?

Google

Nikolay
09.08.2017
19:50:45
таблиц много, проектов много, ситуации разные, беда у всех примерно одна, многие просто не замечают даже. Вот окметер или другие мониторилки добавят графики по вакууму — и замечающих сразу больше станет.

Айтуар
09.08.2017
19:50:47

Darafei
09.08.2017
19:51:31

Admin
ERROR: S client not available

Nikolay
09.08.2017
19:51:50
Айтуар, а все пухнут ? Из недавнего - у одного быстро растущего стартапа всякие разные ETL могут пачку DELETE отгрузить так, что никакая агрессия автовакуума уже не поможет.

Айтуар
09.08.2017
19:53:44
Да, видимо всё таки придётся пробовать чисто NoSQL БД для таких таблиц.

Nikolay
09.08.2017
19:54:23
?) это уже из разряда "придётся сменить род деятельности". Пора стартапу пивот делать
го все проверять свои индексы https://gist.githubusercontent.com/NikolayS/b6ec676ea63ab8d4db680a4c0d88e8bf/raw/5acc54c74d75549eedc4c5fada6099a2dff25bb5/02a_btree_bloat_simple.sql
у кого как раздуло?

Darafei
09.08.2017
19:58:23
кажется, запрос не совместим с компрессией от pgpro

Айтуар
09.08.2017
20:16:33

Nikolay
09.08.2017
20:21:49
ну ведь не очень приятно же, да?
но тут надо ещё учитывать, что у btree-индексов филлфактор по умолчанию 90. То есть там 10% места "резервируется"

Аггей
09.08.2017
21:18:46

Nikolay
09.08.2017
21:35:33
Кстати, да, логично и просто. Спасибо.
Хотя. При апдейтах куда туплы-то пихать? Будет сплит, а значит -- деградация скорости апдейтов. При 90 в одной странице можно несколько ссылок держать, на разные туплы для одного и того же id, тут не важно, моното он заполнялся или нет. Важно — будут ли у нас апдейты. 100 имеет смысл ставить, если апдейтов точно не будет.

Аггей
10.08.2017
03:16:47

Subb98
10.08.2017
06:25:36
Всем привет. Подскажите, кто работал с jsonb. Пытаюсь сохранить данные в БД (Doctrine), как массив. Вот так он отображается в терминале:
Array
(
[0] => ["hunting"]
)
В БД значение отображается так:
["[\"hunting\"]"]
Что нужно сделать, чтобы значение приходило в БД в таком виде:
["hunting"]
?
Понимаю, что нужно произвести действия над массивом, не могу понять, какие именно. В json_encode пробовал, становилось только хуже.

Darafei
10.08.2017
06:27:34
а как выглядит тот insert, что генерирует твой фреймворк?

Subb98
10.08.2017
06:31:19
У меня Silex, стандартные методы доктрины.

Adikhanov
10.08.2017
06:31:31
Здравствуйте! Не подскажите как определить на какое событие сработал триггер?

Darafei
10.08.2017
06:32:36

Google

Subb98
10.08.2017
06:32:56
Угу, уже в php чат тоже отписал )

/dev/null
10.08.2017
06:33:07
извиняюсь за офтоп
https://ru.stackoverflow.com/questions/700323/Шахматка-из-sql-запроса-в-firebirddb
помогите плиз
если конечно это вообще реально

Darafei
10.08.2017
06:33:36

/dev/null
10.08.2017
06:33:52
там firebird

Darafei
10.08.2017
06:34:25
данные можешь подтянуть https://github.com/ibarwick/firebird_fdw

Adikhanov
10.08.2017
06:37:27

Mikhail
10.08.2017
10:05:15
Интел представили новые серверные SSD, в форм-факторе "линейки". С ними можно будет воткнуть в одноюнитовый сервер до петабайта стораджа. Ну и важно, что не забыли поддержать хот-своп. В общем пока все идет к тому, что скоро мы все окончательно уедем на SSD, они дешевеют и растут в размерах, и это здорово. Человечество начало копить и обрабатывать данные, а это требует быстрого стораджа за разумные деньги.
http://www.anandtech.com/show/11702/intel-introduces-new-ruler-ssd-for-servers

Nikolay
10.08.2017
10:42:11
Реклама чЁли ?

Mikhail
10.08.2017
10:51:14
Новый форм фактор

Darafei
10.08.2017
10:51:20
я уж прямо потянулся к плюсомёту