
Maksim
30.08.2017
07:40:07
ребята, привет, настроил wal репликацию, смотрю на слейве
# select now()-pg_last_xact_replay_timestamp()
;
?column?
—---------------
00:06:30.249946
(1 строка)
это отставание реплики или последняя репликация, не совсем понимаю
https://postgrespro.ru/docs/postgrespro/9.6/functions-admin.html#functions-recovery-info-table
хотелось бы понять, на реплике актуальные у меня данные или нет

Алексей
30.08.2017
07:41:11
сделай какой-нибудь комит на мастере и выполни тот же запрос на слейве

Maksim
30.08.2017
07:42:15
проверял, создавал пустую БД, создавалась на слейве, у меня цель мониторить отставание реплики
пока БД не в продакшене, поэтому pg_last_xact_replay_timestamp() скорей всего такие данные и показывает, но как понять что у меня в принципе данные идентичны мастеру

Google

Алексей
30.08.2017
07:43:29
Если на мастере нет изменений час - на слейве будет отставание час. Если очень грубо.

Maksim
30.08.2017
07:44:26
я так понимаю надо сравнивать pg_last_xlog_receive_location() на мастере и слейве по идее ?

Dmitry
30.08.2017
08:01:13
select greatest(0,pg_xlog_location_diff(pg_current_xlog_location(), replay_location)) from pg_stat_replication where client_addr = '1.2.3.4'
Я вот так снимаю разницу в байтах

Konstantin
30.08.2017
17:43:53
Ребят, привет, нужна помощь
В постгресе есть колонка jsonb в которой хранятся id'шники, вида [1, 2, 3, 4]
Если мне хочется, допустим, вытащить все данные из таблицы где в этой колонке есть id'шник, скажем 2, я сделаю это так:
select * from table where someItmeId @> '2'
и буду счастлив
Вопрос: как подхачить запрос так, чтобы можно было передавать для выборки список искомых id'шников?
Если бы в колонке хранились массивы строк, вида ["1", "2", "3", "4"], тогда заехало бы такое:
select * from table where someItmeId ??| ARRAY['2', '4']
Но данные сохранены как инты, из-за этого таким запросом ничего не тащится :C
Очевидно, нужно что-то к чему-то кастить, но мне непонятно что, и как)

Yura
30.08.2017
17:51:09
А если вместо jsonb хранить в виде []integer ? Тогда можно будет использовать оператор @> , есои нужно полное вхождение, и && , если пересечение.

Alexander
30.08.2017
17:55:56
Посмотрите https://github.com/postgrespro/jsquery

Ilya
30.08.2017
17:58:10
А что мешает сделать из json массив?
with
t AS (Select id from %array%)
select
*
from
table
inner join
t on someItmeId @> t.id
Ну или как-то так, я забыл как выбрать из масива

Konstantin
30.08.2017
18:02:42

Yura
30.08.2017
18:09:41
Он для тех же операторов свои опклассы добавляет.

Google

Yura
30.08.2017
18:11:03
https://www.postgresql.org/docs/9.6/static/intarray.html

Konstantin
30.08.2017
18:12:11

Ilya
30.08.2017
18:12:33
with
t AS (select unnest as id from unnest(array[2,4]))
select distinct
table.*
from
table
inner join
t on someItmeId @> t.id
Вот так точно сработает

Konstantin
30.08.2017
18:24:19
В общем-то вопрос снят
Всем спасибо

Ilya
30.08.2017
18:26:33

Konstantin
30.08.2017
18:30:06
Да, работает, но на данном этапе реально проще переделать тип колонки на []integer, и обойтись запросами попроще)
Тем не менее, спс)

Артур
30.08.2017
22:37:41
Согласно нормализации данных - плохой тон делать неявные связи.
но, допустим есть URI, который связан с множеством таблиц.
Правильно для каждой таблицы делать URI колонку, но как сделать тогда чтобы эта колонка была для нескольких таблиц
Например: news.uri, articles.uri, help.uri все колонки содержат uri и он должен быть уникален на весь проект
Я бы сделал uri таблицу содержащую колонки table_name и table_id а там следовательно явных связей уже не будет. Зато всё в одном месте. И нарушу этим правила.