Re: row filtering for logical replication
От | Greg Nancarrow |
---|---|
Тема | Re: row filtering for logical replication |
Дата | |
Msg-id | CAJcOf-d0=Pnv8qpBaN5WM5wtmhT3EJ64crWtfPBtiwtK8iUEwg@mail.gmail.com обсуждение исходный текст |
Ответ на | RE: row filtering for logical replication ("tanghy.fnst@fujitsu.com" <tanghy.fnst@fujitsu.com>) |
Ответы |
Re: row filtering for logical replication
|
Список | pgsql-hackers |
On Tue, Nov 16, 2021 at 7:33 PM tanghy.fnst@fujitsu.com <tanghy.fnst@fujitsu.com> wrote: > > On Friday, November 12, 2021 6:20 PM Ajin Cherian <itsajin@gmail.com> wrote: > > > > Attaching version 39- > > > > I met another problem when filtering out with the operator '~'. > Data can't be replicated as expected. > > For example: > -- publisher > create table t (a text primary key); > create publication pub for table t where (a ~ 'aaa'); > > -- subscriber > create table t (a text primary key); > create subscription sub connection 'port=5432' publication pub; > > -- publisher > insert into t values ('aaaaab'); > insert into t values ('aaaaabc'); > postgres=# select * from t where (a ~ 'aaa'); > a > --------- > aaaaab > aaaaabc > (2 rows) > > -- subscriber > postgres=# select * from t; > a > -------- > aaaaab > (1 row) > > The second record can’t be replicated. > > By the way, when only applied 0001 patch, I couldn't reproduce this bug. > So, I think it was related to the later patches. > I found that the problem was caused by allocating the WHERE clause expression nodes in the wrong memory context (so they'd end up getting freed after first-time use). The following additions are needed in pgoutput_row_filter_init() - patch 0005. + oldctx = MemoryContextSwitchTo(CacheMemoryContext); rfnode = stringToNode(TextDatumGetCString(rfdatum)); rfnodes = lappend(rfnodes, rfnode); + MemoryContextSwitchTo(oldctx); (these changes are needed in addition to the fixes I posted on this thread for the crash problem that was previously reported) Regards, Greg Nancarrow Fujitsu Australia
В списке pgsql-hackers по дате отправления: