Использование фильтра строк pgLogical для типа столбца jsonB

#postgresql #replication #pglogical

Вопрос:

Я пытаюсь скопировать таблицу, содержащую столбец jsonB. Я хочу использовать фильтрацию строк для выбора только тех строк, которые мне нужны. Как определить фильтр строк для jsonB?

Человек за столом:

         id                  serial,
        name                TEXT NOT NULL,
        details          JSONB NOT NULL,
        modified_at         TIMESTAMPTZ NOT NULL DEFAULT NOW(),
        PRIMARY KEY (name)); 
 

Примеры данных:

  id |  name   |     details     |          modified_at          
---- --------- ----------------- -------------------------------
  1 | person1 | {"city": "nyc"} | 2021-05-17 06:05:55.735086 00
  2 | person2 | {"city": "SF"}  | 2021-05-17 06:06:30.028065 00
 

Я попробовал следующее, и они не работают:

 SELECT pglogical.replication_set_add_table(set_name:= 'replicate1', relation := 'person', row_filter:= details->>'city' = 'nyc');
 

Другой вариант, который я попробовал:

 SELECT pglogical.replication_set_add_table(set_name:= 'replicate1', relation := 'person', row_filter:= "details->>'city' = 'nyc'");
 

Комментарии:

1. Не связано, но: := для предоставления значений для именованных параметров не рекомендуется => использовать оператор, соответствующий стандарту.

2. Я бы предположил row_filter , что это параметр varchar/text, так что, вероятно, он должен быть: row_filter => 'details->>''city'' = ''nyc'''

3. @a_horse_with_no_name Спасибо, не знал, что это устарело.

Ответ №1:

Решение можно найти здесь: https://github.com/2ndQuadrant/pglogical/issues/332