
Vadim
18.09.2017
15:01:19
Речь идет о keeper и sentinel или же о Postgres? Если о Postgres то как это stolon мог выбрать неактуальный standby? У stolon есть возможность указать максимальное и минимальное количество синхронных реплик. Выбор нового мастера будет сделан из этих нод. Каким образом выберется нода без последнего коммита при условии "remote_apply"?

Fike
18.09.2017
15:03:48

Vadim
18.09.2017
15:04:12
если осталась одна нода она не промоутится в мастер

Fike
18.09.2017
15:04:19
А если их осталось три?

Google

Vadim
18.09.2017
15:05:56
если их осталось три то выбор будет сделан в пользу ноды с минимальным лагом. Да, есть возможность потерять последние транзакции в случае если диф устарел. Но это уже скорее зависит от проектирования архитектуры. то есть где будут располагаться эти ноды

Fike
18.09.2017
15:06:16
Ну или предположим, что успешная запись = три ноды, в кластере пять. Три ноды коммитятся, еще две - нет, потому что произошел разрыв сети. На стороне двух нод находится кворум etcd.

Vadim
18.09.2017
15:08:06
должен быть не только кворум etcd а еще и кворум keeper + sentinel. sentinel принимает решение кто будет новым мастером а не etcd
etcd это лишь транспорт

Fike
18.09.2017
15:08:48
сильно сомневаюсь

Vadim
18.09.2017
15:08:57
можете проверить)

Fike
18.09.2017
15:09:03
но даже пусть кворум киперов оказывается на стороне этих двух нод
там не нужен был бы etcd, если бы был свой протокол консенсуса

Vadim
18.09.2017
15:11:01
там не может быть кворума просто потому что их осталось 2 из 5)
etcd это лишь транспорт который "размазывает" данные по кластеру. Если интересно могу дать контакты автора, он ответит более подробно на все вопросы)

Fike
18.09.2017
15:12:19
их осталось сколько угодно
партишен - это не обязательно физическое перерезание кабеля
это просто потеря, дупликация или задержка пакетов, которая может быть разной у разных приложений

Google

Vadim
18.09.2017
15:14:10
да, никто не говорит что мы режем кабель. Сеть может просто моргать. И кстати при этом не происходит переключения на новый мастер)

Fike
18.09.2017
15:15:08
и, к тому же, если постгрес просто упал - ну хоть ООМ прибил, хоть редкий и случайный баг, который Дорофей постоянно вспоминает - это тоже никак не влияет на количество сентинелов

Vadim
18.09.2017
15:17:00
Сентинел это распределённый мозг, ему для кворума нужно неменее 2х нод. При этом всегда есть мастер)

Darafei
18.09.2017
15:18:05

Vadim
18.09.2017
15:18:34
Его поднимет keeper если он упал
Это не проблема
Если конечно не разнесло все)

Darafei
18.09.2017
15:19:37
и инфраструктура слежения за work_mem идёт лесом

Vadim
18.09.2017
15:26:23
Может кто то поделится более надёжным решением для HA?)) Интересно послушать))

Fike
18.09.2017
15:39:38
Мой гундеж выше - он про формальные несоответствия, а не про вероятность потери данных, если что. Ни одно хранилище на свете не переживет потерю вообще всех нод, так что это вся история скорее про допустимые рамки, чем про идеальную защиту. Вообще cockroachdb предлагает как минимум нормальный фейловер на уровне БД и работает по протоколу постгреса, но я до сих пор не добрался почитать про внутрянку, только краем уха слышал, что там тот же рафт и что вся магия присутствует только пока часы идеально синхронизированы.

Nikolay
18.09.2017
20:47:58
привет,
в пятницу 19:00 мск — онлайн-митап!
https://www.meetup.com/preview/postgresqlrussia/events/243471965

Vladimir
19.09.2017
03:33:18
Если уж про таракандб, то формально он CP

Dmitry
19.09.2017
10:32:46
Коллеги, а кто нибудь использует prometheus-postgres-exporter?

Karey
19.09.2017
10:49:28

Dmitry
19.09.2017
10:54:47
Добрый день, какой конкретно вопрос?
При запуске инит.скрипта получаю сообщение об ошибке missing $DATA_SOURCE_NAME, не ясно для какого конкретно пользователя экспортировать переменную, и в каком формате это правильно сделать, например будет ли правильным такой формат DATA_SOURCE_NAME="postgresql://localhost:5432/postgres ?

Karey
19.09.2017
10:56:27
А вы вот это делали https://github.com/wrouesnel/postgres_exporter#running-as-non-superuser ?

Dmitry
19.09.2017
10:58:34
я использовал вот этот пакет https://packages.debian.org/sid/prometheus-postgres-exporter + daemon как зависимый и боюсь, что настройка оного может отличатся. хотелось бы обойтись без докерзации, если возможно.

Karey
19.09.2017
10:59:46
Я думаю это он и есть

Dmitry
19.09.2017
10:59:50

Google

Игорь
19.09.2017
11:00:49

Karey
19.09.2017
11:02:05
То есть вы добавляет эти view и
DATA_SOURCE_NAME=postgresql://postgres_exporter:password@localhost:5432/postgres?sslmode=disable
Или вот так https://github.com/wrouesnel/postgres_exporter#setting-the-postgres-servers-data-source-name

Dmitry
19.09.2017
11:13:45
Огнище, добавил переменную в /etc/default/prometheus-postgres-exporter и он запустился.

Karey
19.09.2017
11:16:34
Отлично!

Dmitry
19.09.2017
11:47:03

Aleksandr
19.09.2017
13:01:09
Добрый день! А кто-нибудь знает как сделать PR в pgpooladmin?

Pavel
19.09.2017
13:48:55
Подскажите, пожалуйста, как лучше всего получить при выборке из таблицы дополнительный столбец, который основывается на двух других. Есть колонки start_date, end_date , нужно сделать динамически колонку status, которая равна 1, если end_date < текущая_дата; 2, если start_date > текущая_дата. Подскажите инструмент, про который прочитать, так сказать каноничный способ сделать это. Спасибо

Alexander
19.09.2017
13:49:39
обычный case вам не подходит?

Pavel
19.09.2017
13:52:51
хм, наверное, он как раз подойдет, спасибо. А назвать эту колонку можно алиасом своим, а не case, как в примере документации?

Alexander
19.09.2017
13:53:03
можно

Ilya
19.09.2017
13:53:21
мы разрешаем

Pavel
19.09.2017
13:53:38
понял, спасибо

Alexander
19.09.2017
13:54:04
а если текущая дата меньше end_date и больше start_date то что нужно вернуть?

Alexey
19.09.2017
13:57:15
Не могу удалить подвисший COPY
пытаюсь через pg_cancel_beckend
и через pg_terminate_backend
все равно висит
никто не встречался с таким?
что с ним сделать?

Google

Pavel
19.09.2017
13:58:59
а если точнее, то start_date и end_date - это дата начала и конца соревнования. Нужно определить статус соревнования на момент выборки (прошло, проходит, будет проходить в будущем)

Alexander
19.09.2017
14:03:34
( start_date < now() )::int + ( end_date < now() )::int as status
значения 0 - не началось, 1 идёт, 2 - закончилось

Pavel
19.09.2017
14:05:34

Alexander
19.09.2017
14:05:50
так

Mikhail
19.09.2017
14:05:56
возможен баг:
https://www.postgresql.org/message-id/CAJrrPGczmfBp0yHn-Tsq9pBCRZKNNDUabABt6k%3D52t43pB5W1w%40mail.gmail.com

Alexey
19.09.2017
14:09:55
9.4.1
да похоже это наш баг
спасибо за наводку

Denis
20.09.2017
05:31:41
поделитесь опытом, кто как решал задачу slowly changing dimensions? с вариантами из вики я ознакомился, хотелось бы услышать еще от людей имеющих практический опыт


Subb98
20.09.2017
09:11:41
Привет. Есть запрос вида:
select * from
company co join
countries geo
on co.address like geo.filter
where geo.in_uppercase = false;
Фильтры типа %Armenia%, % BK%, % UA %, %PL% и т.д. Подскажите, как мне сделать так (что погуглить, почитать), чтобы я мог быть уверен, что при like по одному фильтру у меня выберется нужная страна. То есть, что у меня не будет так, что по фильтру %PL%, выбирается не Польша (как это задумано), а, например, другая страна, где в адресе присутствует слово 'PLACE' или 'PL'. Этого можно добиться, исключив все другие фильтры (проверив, что в строке их нет). Вот в этом и состоит вопрос: как это можно сделать?
Как я понимаю, мне нужно расположить мои фильтры по приоритету, чтобы джойн был максимально правдоподобным. Но как быть с тем, что у меня в конце таблицы остаётся фильтры с двумя большими буквами? Там могут быть ошибки и приоритет не поможет. Мб, кто-то уже решал такую задачу?


Vitality
20.09.2017
09:19:50
Используй word similarity
https://www.postgresql.org/docs/9.1/static/pgtrgm.html

Subb98
20.09.2017
09:20:17
Спасибо за подсказку, сейчас посмотрю, что это.

Vitality
20.09.2017
09:20:43
Я могу описать
разбивает слово на триграммы и ищет совпадения триграмм.
Функция возвращает число в диапазоне от 0 до 1, где 0 - это абсолютное несовпадение и 1 - полное совпадение

Subb98
20.09.2017
09:23:52
Гм, спасибо за информацию. А если в строке будет несколько совпадений? Я так понимаю, мне всё равно нужно выбрать какой-то один фильтр?

Google

Vitality
20.09.2017
09:25:01
Например твоя входная строка Превет, В базе есть две записи Привет и Пока. В случае с Превет совпадение будет большое, в случае с пока - маленькое
Функция возвращает числовое значение с плавающей точкой от 0 до 1. Чем больше это число, тем большее совпадение
Тебе в запросе надо будет просто отсортировать результаты выбора по убыванию значения функции (order by ... desc) и выбрать первый из них

Subb98
20.09.2017
09:27:48
А, понятно. Значит, мне нужно будет составить такой запрос, который мне вернёт все мои фильтры и засунуть их в эту проверку.

Vitality
20.09.2017
09:29:40
сейчас попробую накидать запрос что бы ты понял)
твои таблицы company и country никак не связаны?
нет foreign key?

Subb98
20.09.2017
09:31:15
Эм, нет, нкиак.