@pgsql

Страница 946 из 1062
Alexander
21.08.2018
11:42:36
спасибо

Yaroslav
21.08.2018
11:46:08
спасибо
То есть да, reload-а достаточно. А то как-то непонятно ответил. ;)

Nikita
21.08.2018
12:16:34
Всем привет. Хочу сделать репликацию через слоты. Можно ли сделать так: поднимается слот на мастере, делается pg_basebackup на стэндбае и при этом веб-приложения продолжают работать с базой?

или обязательно нужно, чтобы не было обращений к БД?

Google
Anton
21.08.2018
12:18:56
или обязательно нужно, чтобы не было обращений к БД?
При репликации переносится wal. Максимум ожидания - это один чанк. Если это не критично, то можно не ждать окончания обращений.

Скорее всего очень быстро все засинхронизируется по окончании выполнения транзакций и работа так и будет продолжаться.

Даже не заметите

Nikita
21.08.2018
12:21:10
При репликации переносится wal. Максимум ожидания - это один чанк. Если это не критично, то можно не ждать окончания обращений.
у нас база несколько сотен Гб. Соответственно сначала перенесется всё, кроме последнего wal?

Anton
21.08.2018
12:22:27
у нас база несколько сотен Гб. Соответственно сначала перенесется всё, кроме последнего wal?
Basebackup делает снимок всего кластера и потом дописывает wal, которые есть. А дальше уже репликация догоняет

Это прям очень гениально с точки зрения идеи придумано. Меня это восхищает :)

Eugene
21.08.2018
12:25:53
Всем привет. Ребята, кто с обертками работал. Что лучше, красивее и быстрее? foreign table -> table с триггером на обновление и селектить из таблицы на PG ЛИБО foreign table -> materialized view и refresh в расписании, скажем

И знает ли кто, возможна ли группировка схем?

Nikita
21.08.2018
12:30:27
Basebackup делает снимок всего кластера и потом дописывает wal, которые есть. А дальше уже репликация догоняет
т.е. мне всё-равно надо будет останавливать приложения? Я просто хотел завтра сделать репликацию и мне необходимо, чтобы во время репликации приложения работали

Google
Eugene
21.08.2018
12:31:57
postgres_fdw, тащим данные с Sybase и MSSQL, они обновляются там, тащим на PG (не спрашивайте, зачем). Нужно быстренько усечь часть данных и прогнать на них процедурки.

Anton
21.08.2018
12:33:16
А усекать до не получится?

Yaroslav
21.08.2018
12:35:08
postgres_fdw, тащим данные с Sybase и MSSQL, они обновляются там, тащим на PG (не спрашивайте, зачем). Нужно быстренько усечь часть данных и прогнать на них процедурки.
Я ничего не понял. :( postgres_fdw Вы зачем используете? Заливаете данные из MS SQL на другой сервер (или базу?) PostgreSQL, а потом оттуда тащите? > Нужно быстренько усечь часть данных и прогнать на них процедурки. Как усечь? И зачем тут обёртки? :(

Nikita
21.08.2018
12:38:01
@antihaos @SergeyPpro спасибо. И последний вопрос - узнать прогресс репликации можно через pg_replication_origin_progress()?

Eugene
21.08.2018
12:42:01
Усекать до можно, надо замерять, что быстрее, создание foreign таблицы в принципе не занимает большого времени, тут больше вопрос к идеологии, и к тому, как грамотно. На одной базе, которой ведает Sybase лежит огромное количество различных процедур, часть из которых работают плохо. Было принято решение часть процедур для ежедневного выполнения перетянуть на pg, ясен красен, данные нужно брать с прежнего сервера, используем обертки. Как усечь? Брать данные за последний день, например. При всем этом должен быть задел на то, чтобы точку входа подсунуть PG напрямую

Возможно стоит создать отдельную схему для подобных вещей, и тогда в принципе будет неважно, как данные представлять, либо использовать ту же структуру, но подливать данные в материализованые вьюхи, чтобы соблюдать смысловое разграничение. Может просто у кого-то был опыт с замерами всего этого дела, ибо тянуть данные напрямую с обертки оооооочень долго.

Yaroslav
21.08.2018
12:48:14
Усекать до можно, надо замерять, что быстрее, создание foreign таблицы в принципе не занимает большого времени, тут больше вопрос к идеологии, и к тому, как грамотно. На одной базе, которой ведает Sybase лежит огромное количество различных процедур, часть из которых работают плохо. Было принято решение часть процедур для ежедневного выполнения перетянуть на pg, ясен красен, данные нужно брать с прежнего сервера, используем обертки. Как усечь? Брать данные за последний день, например. При всем этом должен быть задел на то, чтобы точку входа подсунуть PG напрямую
То есть, postgres_fdw тут на самом деле ни при чём? А что за процедуры, что-то вроде отчётов? А если нет, куда Вы их результаты будете сохранять? > Как усечь? Брать данные за последний день, например. По идее, да, можно сделать matview на FDW, и обновлять "по требованию". А вот как и что вы хотите делать триггерами, я не понял. :(

> тянуть данные напрямую с обертки оооооочень долго. В смысле, тянуть прямо из foreign table? Да, это запросто, т.к. большинство FDW (кроме postgres_fdw), эээ... не очень качественные. ;)

Eugene
21.08.2018
12:53:50
Не совсем, я так полагаю, до меня обертки для серверов/баз создали и они присутствуют в pg. Да, типа отчетов. Можно по требованию, но лучше делать обновление через расписание (мне это видится оптимальным решением) перед запуском тестов. В каком-нибудь cron. Предыдущий сотрудник писал триггеры, которые обновляют усеченные таблицы на PG. Но имхо это неудобно и некрасиво. Хватит двух сущностей, еще третью создавать(( Да, из foreign table. Подсовывать процедурам данные из foreign table - неэффективно (капитаню, наверное) Да, я так понимаю, работать людям есть куда))

Nikita
21.08.2018
12:55:14
Вы здесь не путаете рпликацию с бэкапом?
у меня есть база, её нужно реплицировать на несколько пока пустых серверов

elfiki
21.08.2018
12:57:57
refresh materialized view concurrently

с уникальным индексом на вьюхе

Eugene
21.08.2018
12:58:03
можно использовать refresh

Eugene
21.08.2018
12:59:17
Ну да) формулировки - враг программиста

Sergey
21.08.2018
12:59:31
у меня есть база, её нужно реплицировать на несколько пока пустых серверов
Затем эти сервера будут непрерывно получать изменения от исходной базы?

Yaroslav
21.08.2018
12:59:40
Google
Eugene
21.08.2018
12:59:41
с уникальным индексом на вьюхе
А зачем использовать уникальный индекс?

elfiki
21.08.2018
12:59:55
А зачем использовать уникальный индекс?
иначе нельзя обновлять в фоне

Eugene
21.08.2018
13:00:07
Спасибо!

Yaroslav
21.08.2018
13:00:50
А зачем использовать уникальный индекс?
a) Потому что он обязан быть в каждом relation в RDBMS, по-хорошему. ;) б) Потому что тогда работает REFRESH MATERIALIZED VIEW CONCURRENTLY.

Anton
21.08.2018
13:01:30
refresh materialized view concurrently
То есть при этом старые данные так и останутся и заменятся/допишутся новыми данными?

Eugene
21.08.2018
13:02:09
concurency в pg пока не трогал. По моим ощущениям, вьюха полностью обновляется

elfiki
21.08.2018
13:02:34
Просто не блокируется на время обновления

Yaroslav
21.08.2018
13:02:38
Не совсем, я так полагаю, до меня обертки для серверов/баз создали и они присутствуют в pg. Да, типа отчетов. Можно по требованию, но лучше делать обновление через расписание (мне это видится оптимальным решением) перед запуском тестов. В каком-нибудь cron. Предыдущий сотрудник писал триггеры, которые обновляют усеченные таблицы на PG. Но имхо это неудобно и некрасиво. Хватит двух сущностей, еще третью создавать(( Да, из foreign table. Подсовывать процедурам данные из foreign table - неэффективно (капитаню, наверное) Да, я так понимаю, работать людям есть куда))
> Подсовывать процедурам данные из foreign table - неэффективно (капитаню, наверное) Ну да, скорее всего. Я так понимаю, что многие FDW делают по принципу "для начала пусть хоть-как то работает"... что потом переходит в "да ладно, и так сойдёт". ;) > Да, я так понимаю, работать людям есть куда)) Это да.

То есть при этом старые данные так и останутся и заменятся/допишутся новыми данными?
Да, старые останутся, новые обновятся/допишутся (или удалятся).

Sergey
21.08.2018
13:03:28
@antihaos @SergeyPpro спасибо. И последний вопрос - узнать прогресс репликации можно через pg_replication_origin_progress()?
pg_replication_origin_progress() относится к логической репликации. pg_basebackup скорее к физической.

Yaroslav
21.08.2018
13:03:33
Eugene
21.08.2018
13:04:22
Да, "не чувствуют", все правильно, обновление раньше было в расписании, проглядел.

Anton
21.08.2018
13:05:09
Да, старые останутся, новые обновятся/допишутся (или удалятся).
Это интересно. Я вот недавно думал, как делать временные olap кубы лучше всего на pg.

Yaroslav
21.08.2018
13:06:46
Это интересно. Я вот недавно думал, как делать временные olap кубы лучше всего на pg.
Но запрос VIEW выполняется полностью, в любом случае. Поэтому ручное триггерное обновление таблицы-"view" (в том числе, с задержкой, если нужно) может быть куда эффективнее... но его ещё надо написать. ;)

Anton
21.08.2018
13:08:53
А еще такой момент- можно как то сделать непрерывный wal? Чтобы проинициализировал кластер и дальше все что происходит копилось и можно было отматывать на любой интервал в начало при желании? Так вообще в практике делается ? Или это плохая идея?

Eugene
21.08.2018
13:08:58
Хм, может быть, кстати говоря. Ну это не сложно, мне просто не хочется хранить еще одну процедуру, если можно refresh накидать во вьюхи. 5млн записей рефрешатся за пару минут

Anton
21.08.2018
13:09:32
Грубо говоря метрики на каждый день

Yaroslav
21.08.2018
13:11:21
А еще такой момент- можно как то сделать непрерывный wal? Чтобы проинициализировал кластер и дальше все что происходит копилось и можно было отматывать на любой интервал в начало при желании? Так вообще в практике делается ? Или это плохая идея?
Это обычное архивирование WAL... разве нет (просто ничего не удалять оттуда)? Но лучше всё же иметь в дополнение к нему basebackup-ы — а то замучаетесь накатывать WAL-ы за полгода, например. ;)

Google
Eugene
21.08.2018
13:14:20
Кстати, никому не доводилось, может быть чисто случайно использовать jdbc для sybase 2003? Все перерыл, ни в какую. Pg в этом плане просто чудо. С IDEA в связке работать очень удобно

Nikita
21.08.2018
13:18:06
Затем эти сервера будут непрерывно получать изменения от исходной базы?
да, мне нужно "склонировать" БД с репликацией без простоя приложений

Terminator
21.08.2018
15:17:25
user будет жить. Поприветствуем!

@unknown000000 будет жить. Поприветствуем!

@ChazzyChaz будет жить. Поприветствуем!

Anton
21.08.2018
15:35:24
подскажите, есть ли простой способ написать свою агрегатную функцию в запросе? например просуммировать квадраты четных значений выборки? или в целом условные выражения в агрегации?

Terminator
21.08.2018
15:39:51
Maks Rybalkin будет жить. Поприветствуем!

Konstantin
21.08.2018
15:42:47
подскажите, есть ли простой способ написать свою агрегатную функцию в запросе? например просуммировать квадраты четных значений выборки? или в целом условные выражения в агрегации?
Свои агрегаты можно писать на С. Но это весьма не просто. Для того, чтобы просуммирвать квадраты чётных значений можно вставить проверку на чётность в WHERE. Конечно если вы в одном запросе хотите получить и квадраты чётных и квадраты нечётных, то так не получится.

Anton
21.08.2018
15:47:34
Alexander
21.08.2018
15:49:05
https://www.postgresql.org/docs/11/static/sql-expressions.html#SYNTAX-AGGREGATES В агрегатах можно указывать фильтр. Позволяет в ряде случаев обходится без CASE.

Terminator
21.08.2018
15:53:50
@matyushkins будет жить. Поприветствуем!

Anton
21.08.2018
15:55:16
https://www.postgresql.org/docs/11/static/sql-expressions.html#SYNTAX-AGGREGATES В агрегатах можно указывать фильтр. Позволяет в ряде случаев обходится без CASE.
спасибо! да. наверное в принципе на базе существующих наборов можно выстроить нужную агрегацию большинства применений

Terminator
21.08.2018
16:07:01
@sobol будет жить. Поприветствуем!

Anton
21.08.2018
16:33:49
@knizhnik , подскажите, а вот эта штука - IMCS - живая или уже не сильно?

Да, старые останутся, новые обновятся/допишутся (или удалятся).
не получается сделать, чтобы данные накапливались. происходит замена, а не добавление. Оно точно умеет дописывать/обновлять?

Anton
21.08.2018
17:05:00
create materialized view neo_olap as select s,now() as v from generate_series(0,10) s; create unique index ON neo_olap (s,now);

refresh materialized view concurrently neo_olap ;

в таблице/вьюхе всегда остается 11 строк

а хотелось бы 11, 22, 33

Google
Yaroslav
21.08.2018
17:08:21
create materialized view neo_olap as select s,now() as v from generate_series(0,10) s; create unique index ON neo_olap (s,now);
Не-не. Вы на свой уникальный индекс посмотрите — всё правильно работает. Такой в приниципе может обновляться только целиком.

а хотелось бы 11, 22, 33
Так и запрос VIEW-а у Вас должен при каждом последующем обновлении возвращать 11, 22, 33 строк. Такого, чтобы содержимое VIEW-а не соответствовало его запросу, у Вас не получится.

Anton
21.08.2018
17:11:11
угу. вот и я думал как так может быть и мечтать уже начал ?

приходится делать insert into ... from вьюха

Yaroslav
21.08.2018
17:12:02
угу. вот и я думал как так может быть и мечтать уже начал ?
Я же Вам писал — запрос VIEW всегда выполняется полностью. ;)

Anton
21.08.2018
17:12:44
я это понял что выполняется полностью, но тело не очищается ?

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