Support logical replication of DDLs

Started by Zheng Liabout 4 years ago449 messageshackersgeneral
Jump to latest
#1Zheng Li
zhengli10@gmail.com
hackersgeneral

Hello,

One of the most frequently requested improvements from our customers
is to reduce downtime associated with software updates (both major and
minor versions). To do this, we have reviewed potential contributions to
improving logical replication.

I’m working on a patch to support logical replication of data
definition language statements (DDLs). This is a useful feature when a
database in logical replication has lots of tables, functions and
other objects that change over time, such as in online cross major
version upgrade.

I put together a prototype that replicates DDLs using the generic
messages for logical decoding. The idea is to log the candidate DDL
string in ProcessUtilitySlow() using LogLogicalMessge() with a new
flag in WAL record type xl_logical_message indicating it’s a DDL
message. The xl_logical_message record is decoded and sent to the
subscriber via pgoutput. The logical replication worker process is
dispatched for this new DDL message type and executes the command
accordingly.

However, there are still many edge cases to sort out because not every
DDL statement can/should be replicated. Some of these include:

1. DDL involving multiple tables where only some tables are replicated, e.g.

DROP TABLE replicated_foo, notreplicated_bar;

This statement will fail on the subscriber and block logical
replication. It can be detected and filtered on the publisher.

2. Any DDL that calls a volatile function, such as NOW() or RAND(), is
likely to generate a different value on each replica. It is possible
to work around these issues—for example, the publisher can replace any
volatile function calls with a fixed return value when the statement
is logged so that the subscribers all get the same value. We will have
to consider some other cases.

3. CREATE TABLE AS and SELECT INTO, For example:

CREATE TABLE foo AS
SELECT field_1, field_2 FROM bar;

There are a few issues that can occur here. For one, it’s possible
that table bar doesn't exist on the subscriber. Even if “bar” does
exist, it may not be fully up-to-date with the publisher, which would
cause a data mismatch on “foo” between the publisher and subscriber.

4. Statements that have nondeterministic side effects (e.g., as caused
by triggers, stored procedures, user-defined functions) may result in
different side effects occurring on each subscriber.

Whether a DDL should be replicated also depends on what granularity do
we define DDL replication. For example, we can define DDL replication
on these levels:

1. Database level
Allows all DDLs for a database to be replicated except for certain
edge cases (refer to the edge cases mentioned above).
This is likely a major use case, such as in online major version upgrade.

2. Table level
Allows DDLs on the published tables to be replicated except for
certain edge cases.
This is useful for consolidating multiple databases into a single one,
e.g. for analytics.

3. Other fine-grained levels base on the object type such as index,
function, procedure and view etc.
Allows DDLs on certain object types to be replicated. At the moment
I’m unsure of a use case for this.

To implement such DDL replication levels, we need to modify the CREATE
PUBLICATION syntax. For example, to help starting the discussion on
the granularity of DDL replication, we can add a new option list ‘ddl’
in the WITH definition:

CREATE PUBLICATION mypub FOR ALL TABLES with
(publish = ‘insert, update, delete, truncate’, ddl = ‘database’)

CREATE PUBLICATION mypub FOR TABLE T1, T2 with
(publish = ‘insert, update, delete, truncate’, ddl = ‘table’)

CREATE PUBLICATION mypub FOR TABLE T1, T2 with
(publish = ‘insert, update, delete, truncate’, ddl = ‘table, function,
procedure’)

We can probably make “ddl = ‘database’” valid only for the FOR ALL
TABLES publication, because it doesn’t really make sense to replicate
all DDLs for a database when only a subset of tables are being
replicated (which can cause edge case 1 to occur frequently). “ddl =
‘database’” + FOR ALL TABLES is likely where logical replication of
DDL is most useful, i.e. for online major versions upgrades.

Based on the DDL publication levels we can further implement the logic
to conditionally log the DDL commands or to conditionally decode/ship
the logical DDL message.

Thoughts? Your feedback is appreciated.

Thanks,
Zheng Li
Amazon RDS/Aurora for PostgreSQL

#2Aleksander Alekseev
aleksander@timescale.com
In reply to: Zheng Li (#1)
hackersgeneral
Re: Support logical replication of DDLs

Hi Zheng,

I’m working on a patch to support logical replication of data
definition language statements (DDLs).

That's great!

However, there are still many edge cases to sort out because not every
DDL statement can/should be replicated.

Maybe the first implementation shouldn't be perfect as long as known
limitations are documented and the future improvements are unlikely to
break anything for the users. Committing an MVP and iterating on this is
much simpler in terms of development and code review. Also, it will deliver
value to the users and give us feedback sooner.

1. DDL involving multiple tables where only some tables are replicated,

e.g.

DROP TABLE replicated_foo, notreplicated_bar;

I would add DROP TABLE ... CASCADE to the list. Also, let's not forget that
PostgreSQL supports table inheritance and table partitioning.

2. Any DDL that calls a volatile function, such as NOW() or RAND(), is
likely to generate a different value on each replica. It is possible
to work around these issues—for example, the publisher can replace any
volatile function calls with a fixed return value when the statement
is logged so that the subscribers all get the same value. We will have
to consider some other cases.

That would make sense.

[...]
Whether a DDL should be replicated also depends on what granularity do
we define DDL replication. For example, we can define DDL replication
on these levels:

1. Database level
Allows all DDLs for a database to be replicated except for certain
edge cases (refer to the edge cases mentioned above).
This is likely a major use case, such as in online major version upgrade.

To my knowledge, this is not a primary use case for logical replication.
Also, I suspect that implementing it may be a bit challenging. What if we
focus on table-level replication for now?

--
Best regards,
Aleksander Alekseev

#3Marcos Pegoraro
marcos@f10.com.br
In reply to: Zheng Li (#1)
hackersgeneral
Re: Support logical replication of DDLs

Em seg., 21 de fev. de 2022 às 13:13, Zheng Li <zhengli10@gmail.com>
escreveu:

2. Table level
Allows DDLs on the published tables to be replicated except for
certain edge cases.

Think how to handle triggers and functions with same name but different

purpose.

Publisher
create function public.audit() returns trigger language plpgsql as $$
begin
new.Audit_User = current_user();
new.Audit_Date_Time = now();
return new;
end;$$
create trigger audit before insert or update on foo for each row execute
procedure public.audit();

Subscriber
create function public.audit() returns trigger language plpgsql as $$
begin
insert into Audit(Audit_Date_Time, Audit_User, Schema_Name, Table_Name,
Audit_Action, Field_Values) values(new.Audit_ts, new.Audit_User,
tg_table_schema, tg_table_name, tg_op, row_to_json(case when tg_op =
'DELETE' then old.* else new.* end));
return null;
end;$$
create trigger audit after insert or update or delete on foo for each row
execute procedure public.audit();

regards,
Marcos

#4Zheng Li
zhengli10@gmail.com
In reply to: Aleksander Alekseev (#2)
hackersgeneral
Re: Support logical replication of DDLs

Hi Aleksander,

That's great!

Thanks!

Maybe the first implementation shouldn't be perfect as long as known
limitations are documented and the future improvements are unlikely to
break anything for the users. Committing an MVP and iterating on this is
much simpler in terms of development and code review. Also, it will deliver
value to the users and give us feedback sooner.

Agree, I’ll post the prototype when it’s in a bit better shape. Also
I’d like to hear
some more feedback from the community on whether I’m heading the right
direction.

I would add DROP TABLE ... CASCADE to the list. Also, let's not forget that
PostgreSQL supports table inheritance and table partitioning.

Thanks, I will keep this in mind.

1. Database level
Allows all DDLs for a database to be replicated except for certain
edge cases (refer to the edge cases mentioned above).
This is likely a major use case, such as in online major version upgrade.

To my knowledge, this is not a primary use case for logical replication.
Also, I suspect that implementing it may be a bit challenging. What if we
focus on table-level replication for now?

I think it is due to the fact that the current limitations in logical
replication are
holding it back in major version upgrade (MVU). Online / reduced downtime MVU
is a popular request from customers, and why we should enhance logical
replication
to support this use case.

Also I think table-level DDL replication is actually more challenging,
especially in
the FOR TABLE case, due to the fact that differences are expected to
occur between the
source and target database. Marcos’ comment also justifies the complexity
in this case. Whereas database-level DDL replication in the FOR ALL
TABLE case is
relatively simple because the source and target database are (almost) identical.

Regards,
Zheng

#5Aleksander Alekseev
aleksander@timescale.com
In reply to: Zheng Li (#4)
hackersgeneral
Re: Support logical replication of DDLs

Hi Zheng,

Also, I suspect that implementing it may be a bit challenging. What if we
focus on table-level replication for now?

I think it is due to the fact that the current limitations in logical
replication are
holding it back in major version upgrade (MVU). Online / reduced downtime MVU
is a popular request from customers, and why we should enhance logical
replication
to support this use case.

Also I think table-level DDL replication is actually more challenging,
especially in
the FOR TABLE case, due to the fact that differences are expected to
occur between the
source and target database. Marcos’ comment also justifies the complexity
in this case. Whereas database-level DDL replication in the FOR ALL
TABLE case is
relatively simple because the source and target database are (almost) identical.

Sure, I don't insist on implementing table-level replication first.
It's up to you. My point was that it's not necessary to implement
everything at once.

--
Best regards,
Aleksander Alekseev

#6Dilip Kumar
dilipbalaut@gmail.com
In reply to: Zheng Li (#1)
hackersgeneral
Re: Support logical replication of DDLs

On Mon, Feb 21, 2022 at 9:43 PM Zheng Li <zhengli10@gmail.com> wrote:

Hello,

One of the most frequently requested improvements from our customers
is to reduce downtime associated with software updates (both major and
minor versions). To do this, we have reviewed potential contributions to
improving logical replication.

I’m working on a patch to support logical replication of data
definition language statements (DDLs). This is a useful feature when a
database in logical replication has lots of tables, functions and
other objects that change over time, such as in online cross major
version upgrade.

+1

I put together a prototype that replicates DDLs using the generic
messages for logical decoding. The idea is to log the candidate DDL
string in ProcessUtilitySlow() using LogLogicalMessge() with a new
flag in WAL record type xl_logical_message indicating it’s a DDL
message. The xl_logical_message record is decoded and sent to the
subscriber via pgoutput. The logical replication worker process is
dispatched for this new DDL message type and executes the command
accordingly.

If you don't mind, would you like to share the POC or the branch for this work?

However, there are still many edge cases to sort out because not every
DDL statement can/should be replicated. Some of these include:

3. CREATE TABLE AS and SELECT INTO, For example:

CREATE TABLE foo AS
SELECT field_1, field_2 FROM bar;

There are a few issues that can occur here. For one, it’s possible
that table bar doesn't exist on the subscriber. Even if “bar” does
exist, it may not be fully up-to-date with the publisher, which would
cause a data mismatch on “foo” between the publisher and subscriber.

In such cases why don't we just log the table creation WAL for DDL
instead of a complete statement which creates the table and inserts
the tuple? Because we are already WAL logging individual inserts and
once you make sure of replicating the table creation I think the exact
data insertion on the subscriber side will be taken care of by the
insert WALs no?

--
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com

#7rajesh singarapu
rajesh.rs0541@gmail.com
In reply to: Dilip Kumar (#6)
hackersgeneral
Re: Support logical replication of DDLs

+

On Sun, Mar 13, 2022 at 5:05 PM Dilip Kumar <dilipbalaut@gmail.com> wrote:

On Mon, Feb 21, 2022 at 9:43 PM Zheng Li <zhengli10@gmail.com> wrote:

Hello,

One of the most frequently requested improvements from our customers
is to reduce downtime associated with software updates (both major and
minor versions). To do this, we have reviewed potential contributions to
improving logical replication.

I’m working on a patch to support logical replication of data
definition language statements (DDLs). This is a useful feature when a
database in logical replication has lots of tables, functions and
other objects that change over time, such as in online cross major
version upgrade.

+1

+1

I put together a prototype that replicates DDLs using the generic
messages for logical decoding. The idea is to log the candidate DDL
string in ProcessUtilitySlow() using LogLogicalMessge() with a new
flag in WAL record type xl_logical_message indicating it’s a DDL
message. The xl_logical_message record is decoded and sent to the
subscriber via pgoutput. The logical replication worker process is
dispatched for this new DDL message type and executes the command
accordingly.

If you don't mind, would you like to share the POC or the branch for this work?

I would love to try this patch out, would you like to share branch or POC ?

#8Zheng Li
zhengli10@gmail.com
In reply to: Dilip Kumar (#6)
hackersgeneral
Re: Support logical replication of DDLs

Hi,

If you don't mind, would you like to share the POC or the branch for this work?

The POC patch is attached. It currently supports the following functionalities:
1. Configure either database level or table level DDL replication via
the CREATE PUBLICATION command.

2.Supports replication of DDL of the following types when database
level DDL replication is turned on. Other less common DDL types could
be added later.
T_CreateSchemaStmt
T_CreateStmt
T_CreateForeignTableStmt
T_AlterDomainStmt
T_DefineStmt
T_CompositeTypeStmt
T_CreateEnumStmt
T_CreateRangeStmt
T_AlterEnumStmt
T_ViewStmt
T_CreateFunctionStmt
T_AlterFunctionStmt
T_CreateTrigStmt
T_CreateDomainStmt
T_CreateCastStmt
T_CreateOpClassStmt
T_CreateOpFamilyStmt
T_AlterOpFamilyStmt
T_AlterOperatorStmt
T_AlterTypeStmt
T_GrantStmt
T_AlterCollationStmt
T_AlterTableStmt
T_IndexStmt

3.Supports replication of DDLs of the following types if only table
level DDL replication is turned on.
T_AlterTableStmt
T_IndexStmt

4.Supports seamless DML replication of new tables created via DDL
replication without having to manually running “ALTER SUBSCRIPTION ...
REFRESH PUBLICATION" on the subscriber.

Here is a demo:
source_db=# create publication mypub FOR ALL TABLES with (ddl = ‘database’);

target_db=# create subscription mysub CONNECTION 'dbname=source_db
host=localhost user=myuser port=5432' PUBLICATION mypub;

source_db=#
BEGIN;
CREATE TABLE foo (a int);
CREATE INDEX foo_idx ON foo (a);
ALTER TABLE foo ADD COLUMN b timestamptz;
CREATE FUNCTION foo_ts()
RETURNS trigger AS $$
BEGIN
NEW.b := current_timestamp;
RETURN NEW;
END;
$$
LANGUAGE plpgsql;

CREATE TRIGGER foo_ts BEFORE INSERT OR UPDATE ON foo
FOR EACH ROW EXECUTE FUNCTION foo_ts();
INSERT INTO foo VALUES (1);
COMMIT;

source_db=# select * from foo;
a | b
---+-------------------------------
1 | 2022-03-15 19:07:53.005215+00
(1 row)

target_db=# select * from foo;
a | b
---+-------------------------------
1 | 2022-03-15 19:07:53.005215+00
(1 row)

Here is the remaining work for this patch:

1. Test and handle corner case DDLs, such as the ones listed in my
first email[1]/messages/by-id/CAAD30U+pVmfKwUKy8cbZOnUXyguJ-uBNejwD75Kyo=OjdQGJ9g@mail.gmail.com.

2. Investigate less common DDL types (categorized in function
LogLogicalDDLCommand) and decide if and under what conditions they
should be replicated.

3. Determine if we want to include table-level DDL replication. If so,
we need to continue to enhance and test this feature.

I think this will be ready to consider for commit once 1 and 2 are
resolved. I think 3 can be done in the second phase.

If you are reviewing the code, I’ve provided a detailed description of
the patch below:
1. Syntax, pg_publication and pg_dump change:
Allows the user to configure either database level or table level DDL
replication via the CREATE PUBLICATION command as proposed in my first
email. Two new columns are added to the pg_publication catalog to show
the DDL replication levels, test output publication.out is updated
accordingly. pg_dump is also modified to accommodate the
pg_publication catalog change.

2. Logical logging change
a. A new WAL record type xl_logical_ddl_message is introduced to
support logical logging of DDL command. xl_logical_ddl_message is
similar to the existing xl_logical_message for generic message
logging. The reason for not using xl_logical_message directly as
proposed initially is I found out we need to log more information
(such as user role, search path and potentially more in the future)
than just one string, and we don’t want to make too much changes to
the existing xl_logical_message which may break its current consumers.
b. The logging of DDL command string is processed in function
LogLogicalDDLCommand. We categorize DDL command types into three
categories in this function:
1. replicated in database level replication only (such as CREATE
TABLE, CREATE FUNCTION).
2. replicated in database or table level replication depending on the
configuration (such as ALTER TABLE).
3. not supported for replication or pending investigation.

3. Logical decoding and Reorderbuffer change
Supports logical decoding of the new WAL record
xl_logical_ddl_message. This is similar to the logical decoding of
xl_logical_message. Tests for this change are added in the
test_decoding plugin.

4. Integration with pgoutput
Supports sending and receiving the DDL message using the logical
replication wire protocol. A new LogicalRepMsgType is introduced for
this purpose: LOGICAL_REP_MSG_DDLMESSAGE = 'L'.

5. Logical replication worker change
Supports execution of the DDL command in the original user role and
search_path. For any new table created this way, we also set its
srsubstate in the pg_subscription_rel catalog to SUBREL_STATE_INIT, So
that DML replication can progress on this new table without manually
running "ALTER SUBSCRIPTION ... REFRESH PUBLICATION".

6. TAP test
A new TAP test 030_rep_ddl.pl is added. We mainly focused on testing
the happy path of database level replication so far. Corner case DDLs
and table level DDL replication are still to be carefully tested.

However, there are still many edge cases to sort out because not every
DDL statement can/should be replicated. Some of these include:

3. CREATE TABLE AS and SELECT INTO, For example:

CREATE TABLE foo AS
SELECT field_1, field_2 FROM bar;

There are a few issues that can occur here. For one, it’s possible
that table bar doesn't exist on the subscriber. Even if “bar” does
exist, it may not be fully up-to-date with the publisher, which would
cause a data mismatch on “foo” between the publisher and subscriber.

In such cases why don't we just log the table creation WAL for DDL
instead of a complete statement which creates the table and inserts
the tuple? Because we are already WAL logging individual inserts and
once you make sure of replicating the table creation I think the exact
data insertion on the subscriber side will be taken care of by the
insert WALs no?

The table creation WAL and table insert WAL are available. The tricky
part is how do we break down this command into two parts (a normal
CREATE TABLE followed by insertions) either from the parsetree or the
WALs. I’ll have to dig more on this.

I look forward to your feedback.

Regards,
Zheng

[1]: /messages/by-id/CAAD30U+pVmfKwUKy8cbZOnUXyguJ-uBNejwD75Kyo=OjdQGJ9g@mail.gmail.com

Show quoted text

On Sun, Mar 13, 2022 at 7:35 AM Dilip Kumar <dilipbalaut@gmail.com> wrote:

On Mon, Feb 21, 2022 at 9:43 PM Zheng Li <zhengli10@gmail.com> wrote:

Hello,

One of the most frequently requested improvements from our customers
is to reduce downtime associated with software updates (both major and
minor versions). To do this, we have reviewed potential contributions to
improving logical replication.

I’m working on a patch to support logical replication of data
definition language statements (DDLs). This is a useful feature when a
database in logical replication has lots of tables, functions and
other objects that change over time, such as in online cross major
version upgrade.

+1

I put together a prototype that replicates DDLs using the generic
messages for logical decoding. The idea is to log the candidate DDL
string in ProcessUtilitySlow() using LogLogicalMessge() with a new
flag in WAL record type xl_logical_message indicating it’s a DDL
message. The xl_logical_message record is decoded and sent to the
subscriber via pgoutput. The logical replication worker process is
dispatched for this new DDL message type and executes the command
accordingly.

If you don't mind, would you like to share the POC or the branch for this work?

However, there are still many edge cases to sort out because not every
DDL statement can/should be replicated. Some of these include:

3. CREATE TABLE AS and SELECT INTO, For example:

CREATE TABLE foo AS
SELECT field_1, field_2 FROM bar;

There are a few issues that can occur here. For one, it’s possible
that table bar doesn't exist on the subscriber. Even if “bar” does
exist, it may not be fully up-to-date with the publisher, which would
cause a data mismatch on “foo” between the publisher and subscriber.

In such cases why don't we just log the table creation WAL for DDL
instead of a complete statement which creates the table and inserts
the tuple? Because we are already WAL logging individual inserts and
once you make sure of replicating the table creation I think the exact
data insertion on the subscriber side will be taken care of by the
insert WALs no?

--
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com

Attachments:

ddl_replication.patch1application/octet-stream; name=ddl_replication.patch1Download+2047-167
#9Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Zheng Li (#8)
hackersgeneral
Re: Support logical replication of DDLs

Hello

I think this is a pretty interesting and useful feature.

Did you see some old code I wrote towards this goal?
/messages/by-id/20150215044814.GL3391@alvh.no-ip.org
The intention was that DDL would produce some JSON blob that accurately
describes the DDL that was run; the caller can acquire that and use it
to produce working DDL that doesn't depend on runtime conditions. There
was lots of discussion on doing things this way. It was ultimately
abandoned, but I think it's valuable.

--
Álvaro Herrera Valdivia, Chile — https://www.EnterpriseDB.com/
"Porque francamente, si para saber manejarse a uno mismo hubiera que
rendir examen... ¿Quién es el machito que tendría carnet?" (Mafalda)

#10Japin Li
japinli@hotmail.com
In reply to: Zheng Li (#8)
hackersgeneral
Re: Support logical replication of DDLs

Hi, Zhang Li

On Thu, 17 Mar 2022 at 05:17, Zheng Li <zhengli10@gmail.com> wrote:

Hi,

If you don't mind, would you like to share the POC or the branch for this work?

The POC patch is attached. It currently supports the following functionalities:
1. Configure either database level or table level DDL replication via
the CREATE PUBLICATION command.

2.Supports replication of DDL of the following types when database
level DDL replication is turned on. Other less common DDL types could
be added later.
T_CreateSchemaStmt
T_CreateStmt
T_CreateForeignTableStmt
T_AlterDomainStmt
T_DefineStmt
T_CompositeTypeStmt
T_CreateEnumStmt
T_CreateRangeStmt
T_AlterEnumStmt
T_ViewStmt
T_CreateFunctionStmt
T_AlterFunctionStmt
T_CreateTrigStmt
T_CreateDomainStmt
T_CreateCastStmt
T_CreateOpClassStmt
T_CreateOpFamilyStmt
T_AlterOpFamilyStmt
T_AlterOperatorStmt
T_AlterTypeStmt
T_GrantStmt
T_AlterCollationStmt
T_AlterTableStmt
T_IndexStmt

3.Supports replication of DDLs of the following types if only table
level DDL replication is turned on.
T_AlterTableStmt
T_IndexStmt

4.Supports seamless DML replication of new tables created via DDL
replication without having to manually running “ALTER SUBSCRIPTION ...
REFRESH PUBLICATION" on the subscriber.

Great! I think we can split the patch into several pieces (at least
implementation and test cases) for easier review.

+ * Simiarl to the generic logical messages, These DDL messages can be either
+ * transactional or non-transactional. Note by default DDLs in PostgreSQL are
+ * transactional.

There is a typo, s/Simiarl/Similar/.

--
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

#11Japin Li
japinli@hotmail.com
In reply to: Zheng Li (#8)
hackersgeneral
Re: Support logical replication of DDLs

On Thu, 17 Mar 2022 at 05:17, Zheng Li <zhengli10@gmail.com> wrote:

Hi,

If you don't mind, would you like to share the POC or the branch for this work?

The POC patch is attached. It currently supports the following functionalities:

Hi,

When I try to run regression test, there has some errors.

make[2]: Entering directory '/home/px/Codes/postgresql/Debug/src/test/subscription'
rm -rf '/home/px/Codes/postgresql/Debug/src/test/subscription'/tmp_check && /usr/bin/mkdir -p '/home/px/Codes/postgresql/Debug/src/test/subscription'/tmp_check && cd /home/px/Codes/postgresql/Debug/../src
/test/subscription && TESTDIR='/home/px/Codes/postgresql/Debug/src/test/subscription' PATH="/home/px/Codes/postgresql/Debug/tmp_install/home/px/Codes/postgresql/Debug/pg/bin:/home/px/Codes/postgresql/Debu
g/src/test/subscription:$PATH" LD_LIBRARY_PATH="/home/px/Codes/postgresql/Debug/tmp_install/home/px/Codes/postgresql/Debug/pg/lib:$LD_LIBRARY_PATH" PGPORT='65432' PG_REGRESS='/home/px/Codes/postgresql/De
bug/src/test/subscription/../../../src/test/regress/pg_regress' /usr/bin/prove -I /home/px/Codes/postgresql/Debug/../src/test/perl/ -I /home/px/Codes/postgresql/Debug/../src/test/subscription t/*.pl
t/001_rep_changes.pl ............... ok
t/002_types.pl ..................... ok
t/003_constraints.pl ............... ok
t/004_sync.pl ...................... 6/? # Tests were run but no plan was declared and done_testing() was not seen.
# Looks like your test exited with 29 just after 7.
t/004_sync.pl ...................... Dubious, test returned 29 (wstat 7424, 0x1d00)
All 7 subtests passed
t/005_encoding.pl .................. ok
t/006_rewrite.pl ................... 1/? # poll_query_until timed out executing this query:
# SELECT '0/14A8648' <= replay_lsn AND state = 'streaming' FROM pg_catalog.pg_stat_replication WHERE application_name = 'mysub';
# expecting this output:
# t
# last actual query output:
#
# with stderr:
# Tests were run but no plan was declared and done_testing() was not seen.
# Looks like your test exited with 29 just after 1.
t/006_rewrite.pl ................... Dubious, test returned 29 (wstat 7424, 0x1d00)
All 1 subtests passed
t/007_ddl.pl ....................... ok
t/008_diff_schema.pl ............... 1/? # Tests were run but no plan was declared and done_testing() was not seen.
# Looks like your test exited with 29 just after 4.
t/008_diff_schema.pl ............... Dubious, test returned 29 (wstat 7424, 0x1d00)
All 4 subtests passed
t/009_matviews.pl .................. Dubious, test returned 29 (wstat 7424, 0x1d00)
No subtests run

The new patch change the behavior of publication, when we drop a table
on publisher, the table also be dropped on subscriber, and this made the
regression testa failed, since the regression test will try to drop the
table on subscriber.

IMO, we can disable the DDLs replication by default, which makes the
regression test happy. Any thoughts?

--
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

#12Zheng Li
zhengli10@gmail.com
In reply to: Alvaro Herrera (#9)
hackersgeneral
Re: Support logical replication of DDLs

Hello Alvaro,

I think this is a pretty interesting and useful feature.

Did you see some old code I wrote towards this goal?
/messages/by-id/20150215044814.GL3391@alvh.no-ip.org
The intention was that DDL would produce some JSON blob that accurately
describes the DDL that was run; the caller can acquire that and use it
to produce working DDL that doesn't depend on runtime conditions. There
was lots of discussion on doing things this way. It was ultimately
abandoned, but I think it's valuable.

Thanks for pointing this out. I'm looking into it.

Hello Japin,

The new patch change the behavior of publication, when we drop a table
on publisher, the table also be dropped on subscriber, and this made the
regression testa failed, since the regression test will try to drop the
table on subscriber.

IMO, we can disable the DDLs replication by default, which makes the
regression test happy. Any thoughts?

Good catch, I forgot to run the whole TAP test suite. I think for now
we can simply disable DDL replication for the failing tests when
creating publication: $node_publisher->safe_psql('postgres',
"CREATE PUBLICATION tap_pub FOR ALL TABLES WITH (ddl='')");
I'll fix it in the next version of patch. I'll also work on breaking
down the patch into smaller pieces for ease of review.

Regards,
Zheng

#13Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#12)
hackersgeneral
Re: Support logical replication of DDLs

Hello,

Attached please find the broken down patch set. Also fixed the failing
TAP tests Japin reported.

Regards,
Zheng Li
Amazon RDS/Aurora for PostgreSQL

Attachments:

0001-syntax-pg_publication-pg_dump-ddl_replication.patchapplication/octet-stream; name=0001-syntax-pg_publication-pg_dump-ddl_replication.patchDownload+360-148
0002-logical_decoding_ddl_message.patchapplication/octet-stream; name=0002-logical_decoding_ddl_message.patchDownload+1050-13
0003-pgoutput-worker-ddl_replication.patchapplication/octet-stream; name=0003-pgoutput-worker-ddl_replication.patchDownload+645-14
#14Japin Li
japinli@hotmail.com
In reply to: Zheng Li (#12)
hackersgeneral
Re: Support logical replication of DDLs

On Fri, 18 Mar 2022 at 00:22, Zheng Li <zhengli10@gmail.com> wrote:

Hello Japin,

The new patch change the behavior of publication, when we drop a table
on publisher, the table also be dropped on subscriber, and this made the
regression testa failed, since the regression test will try to drop the
table on subscriber.

IMO, we can disable the DDLs replication by default, which makes the
regression test happy. Any thoughts?

Good catch, I forgot to run the whole TAP test suite. I think for now
we can simply disable DDL replication for the failing tests when
creating publication: $node_publisher->safe_psql('postgres',
"CREATE PUBLICATION tap_pub FOR ALL TABLES WITH (ddl='')");
I'll fix it in the next version of patch. I'll also work on breaking
down the patch into smaller pieces for ease of review.

Oh, it doesn't work.

postgres=# CREATE PUBLICATION s1 FOR ALL TABLES WITH(ddl = '');;
ERROR: conflicting or redundant options

Here is the code, I think, you might mean `if (ddl_level_given == NULL)`.

+			if (*ddl_level_given)
+				ereport(ERROR,
+						(errcode(ERRCODE_SYNTAX_ERROR),
+						 errmsg("conflicting or redundant options")));
+
+			/*
+			 * If publish option was given only the explicitly listed actions
+			 * should be published.
+			 */
+			pubactions->pubddl_database = false;
+			pubactions->pubddl_table = false;
+
+			*ddl_level_given = true;

--
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

#15Japin Li
japinli@hotmail.com
In reply to: Zheng Li (#13)
hackersgeneral
Re: Support logical replication of DDLs

On Fri, 18 Mar 2022 at 08:18, Zheng Li <zhengli10@gmail.com> wrote:

Hello,

Attached please find the broken down patch set. Also fixed the failing
TAP tests Japin reported.

Thanks for updating the patchset, I will try it later.

--
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

#16Japin Li
japinli@hotmail.com
In reply to: Japin Li (#14)
hackersgeneral
Re: Support logical replication of DDLs

On Fri, 18 Mar 2022 at 08:22, Japin Li <japinli@hotmail.com> wrote:

On Fri, 18 Mar 2022 at 00:22, Zheng Li <zhengli10@gmail.com> wrote:

Hello Japin,

The new patch change the behavior of publication, when we drop a table
on publisher, the table also be dropped on subscriber, and this made the
regression testa failed, since the regression test will try to drop the
table on subscriber.

IMO, we can disable the DDLs replication by default, which makes the
regression test happy. Any thoughts?

Good catch, I forgot to run the whole TAP test suite. I think for now
we can simply disable DDL replication for the failing tests when
creating publication: $node_publisher->safe_psql('postgres',
"CREATE PUBLICATION tap_pub FOR ALL TABLES WITH (ddl='')");
I'll fix it in the next version of patch. I'll also work on breaking
down the patch into smaller pieces for ease of review.

Oh, it doesn't work.

postgres=# CREATE PUBLICATION s1 FOR ALL TABLES WITH(ddl = '');;
ERROR: conflicting or redundant options

Here is the code, I think, you might mean `if (ddl_level_given == NULL)`.

+			if (*ddl_level_given)
+				ereport(ERROR,
+						(errcode(ERRCODE_SYNTAX_ERROR),
+						 errmsg("conflicting or redundant options")));
+
+			/*
+			 * If publish option was given only the explicitly listed actions
+			 * should be published.
+			 */
+			pubactions->pubddl_database = false;
+			pubactions->pubddl_table = false;
+
+			*ddl_level_given = true;

Oh, Sorry, I misunderstand it, it just like you forget initialize
*ddl_level_given to false when enter parse_publication_options().

--
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

#17Japin Li
japinli@hotmail.com
In reply to: Zheng Li (#13)
hackersgeneral
Re: Support logical replication of DDLs

On Fri, 18 Mar 2022 at 08:18, Zheng Li <zhengli10@gmail.com> wrote:

Hello,

Attached please find the broken down patch set. Also fixed the failing
TAP tests Japin reported.

Here are some comments for the new patches:

Seems like you forget initializing the *ddl_level_given after entering the
parse_publication_options(), see [1]/messages/by-id/MEYP282MB1669DDF788C623B7F8B64C2EB6139@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM.

+           if (*ddl_level_given)
+               ereport(ERROR,
+                       (errcode(ERRCODE_SYNTAX_ERROR),
+                        errmsg("conflicting or redundant options")));

We can use the errorConflictingDefElem() to replace the ereport() to make the
error message more readable.

I also think that ddl = '' isn't a good way to disable DDL replication, how
about using ddl = 'none' or something else?

The test_decoding test case cannot work as expected, see below:

diff -U3 /home/px/Codes/postgresql/contrib/test_decoding/expected/ddlmessages.out /home/px/Codes/postgresql/Debug/contrib/test_decoding/results/ddlmessages.out
--- /home/px/Codes/postgresql/contrib/test_decoding/expected/ddlmessages.out    2022-03-18 08:46:57.653922671 +0800
+++ /home/px/Codes/postgresql/Debug/contrib/test_decoding/results/ddlmessages.out       2022-03-18 17:34:33.411563601 +0800
@@ -25,8 +25,8 @@
 SELECT pg_drop_replication_slot('regression_slot');
 DROP TABLE tab1;
 DROP publication mypub;
-                                                                       data
----------------------------------------------------------------------------------------------------------------------------------------------------
+                                                                     data
+-----------------------------------------------------------------------------------------------------------------------------------------------
  DDL message: transactional: 1 prefix:  role: redacted, search_path: "$user", public, sz: 47 content:CREATE TABLE tab1 (id serial unique, data int);
  BEGIN
  sequence public.tab1_id_seq: transactional:1 last_value: 1 log_cnt: 0 is_called:0

Since the DDL message contains the username, and we try to replace the username with 'redacted' to avoid this problem,

\o | sed 's/role.*search_path/role: redacted, search_path/g'

However, the title and dash lines may have different lengths for different
usernames. To avoid this problem, how about using a specified username when
initializing the database for this regression test?

I try to disable the ddlmessage regression test,

make[2]: Entering directory '/home/px/Codes/postgresql/Debug/src/bin/pg_dump'
rm -rf '/home/px/Codes/postgresql/Debug/src/bin/pg_dump'/tmp_check && /usr/bin/mkdir -p '/home/px/Codes/postgresql/Debug/src/bin/pg_dump'/tmp_check && cd /home/px/Codes/postgresql/Debug/../src/bin/pg_dump
&& TESTDIR='/home/px/Codes/postgresql/Debug/src/bin/pg_dump' PATH="/home/px/Codes/postgresql/Debug/tmp_install/home/px/Codes/postgresql/Debug/pg/bin:/home/px/Codes/postgresql/Debug/src/bin/pg_dump:$PATH"
LD_LIBRARY_PATH="/home/px/Codes/postgresql/Debug/tmp_install/home/px/Codes/postgresql/Debug/pg/lib:$LD_LIBRARY_PATH" PGPORT='65432' PG_REGRESS='/home/px/Codes/postgresql/Debug/src/bin/pg_dump/../../../s
rc/test/regress/pg_regress' /usr/bin/prove -I /home/px/Codes/postgresql/Debug/../src/test/perl/ -I /home/px/Codes/postgresql/Debug/../src/bin/pg_dump t/*.pl
t/001_basic.pl ................ ok
t/002_pg_dump.pl .............. 13/?
# Failed test 'binary_upgrade: should dump CREATE PUBLICATION pub1'
# at t/002_pg_dump.pl line 3916.
# Review binary_upgrade results in /home/px/Codes/postgresql/Debug/src/bin/pg_dump/tmp_check/tmp_test_jgRI

# Failed test 'binary_upgrade: should dump CREATE PUBLICATION pub2'
# at t/002_pg_dump.pl line 3916.
# Review binary_upgrade results in /home/px/Codes/postgresql/Debug/src/bin/pg_dump/tmp_check/tmp_test_jgRI

# Failed test 'binary_upgrade: should dump CREATE PUBLICATION pub3'
# at t/002_pg_dump.pl line 3916.
# Review binary_upgrade results in /home/px/Codes/postgresql/Debug/src/bin/pg_dump/tmp_check/tmp_test_jgRI

# Failed test 'binary_upgrade: should dump CREATE PUBLICATION pub4'
# at t/002_pg_dump.pl line 3916.
# Review binary_upgrade results in /home/px/Codes/postgresql/Debug/src/bin/pg_dump/tmp_check/tmp_test_jgRI
t/002_pg_dump.pl .............. 240/?
[...]
# Review section_post_data results in /home/px/Codes/postgresql/Debug/src/bin/pg_dump/tmp_check/tmp_test_jgRI
t/002_pg_dump.pl .............. 7258/? # Looks like you failed 84 tests of 7709.
t/002_pg_dump.pl .............. Dubious, test returned 84 (wstat 21504, 0x5400)
Failed 84/7709 subtests
t/003_pg_dump_with_server.pl .. ok
t/010_dump_connstr.pl ......... ok

Test Summary Report
-------------------
t/002_pg_dump.pl (Wstat: 21504 Tests: 7709 Failed: 84)
Failed tests: 136-139, 362-365, 588-591, 1040-1043, 1492-1495
1719-1722, 1946-1949, 2177-2180, 2407-2410
2633-2636, 2859-2862, 3085-3088, 3537-3540
3763-3766, 3989-3992, 4215-4218, 4441-4444
5119-5122, 5345-5348, 6702-6705, 7154-7157
Non-zero exit status: 84
Files=4, Tests=7808, 26 wallclock secs ( 0.46 usr 0.05 sys + 7.98 cusr 2.80 csys = 11.29 CPU)
Result: FAIL
make[2]: *** [Makefile:55: check] Error 1
make[2]: Leaving directory '/home/px/Codes/postgresql/Debug/src/bin/pg_dump'
make[1]/messages/by-id/MEYP282MB1669DDF788C623B7F8B64C2EB6139@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM: *** [Makefile:43: check-pg_dump-recurse] Error 2
make[1]/messages/by-id/MEYP282MB1669DDF788C623B7F8B64C2EB6139@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM: Leaving directory '/home/px/Codes/postgresql/Debug/src/bin'
make: *** [GNUmakefile:71: check-world-src/bin-recurse] Error 2

And, when I try to use git am to apply the patch, it complains:

$ git am ~/0001-syntax-pg_publication-pg_dump-ddl_replication.patch
Patch format detection failed.

[1]: /messages/by-id/MEYP282MB1669DDF788C623B7F8B64C2EB6139@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM

--
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

#18Zheng Li
zhengli10@gmail.com
In reply to: Japin Li (#17)
hackersgeneral
Re: Support logical replication of DDLs

Hello,

Thanks for the quick review!

And, when I try to use git am to apply the patch, it complains:

$ git am ~/0001-syntax-pg_publication-pg_dump-ddl_replication.patch
Patch format detection failed.

git apply works for me. I'm not sure why git am complains.
I also created a git branch to make code sharing easier, please try this out:
https://github.com/zli236/postgres/tree/ddl_replication

Seems like you forget initializing the *ddl_level_given after entering the
parse_publication_options(), see [1].

+           if (*ddl_level_given)
+               ereport(ERROR,
+                       (errcode(ERRCODE_SYNTAX_ERROR),
+                        errmsg("conflicting or redundant options")));

We can use the errorConflictingDefElem() to replace the ereport() to make the
error message more readable.

Agreed. Fixed in the latest version.

I also think that ddl = '' isn't a good way to disable DDL replication, how
about using ddl = 'none' or something else?

The syntax follows the existing convention of the WITH publish option.
For example in CREATE PUBLICATION mypub WITH (publish = '')
it means don't publish any DML change. So I'd leave it as is for now.

The test_decoding test case cannot work as expected, see below:

.....

DDL message: transactional: 1 prefix: role: redacted, search_path: "$user", public, sz: 47 content:CREATE TABLE tab1 (id serial unique, data int);
BEGIN
sequence public.tab1_id_seq: transactional:1 last_value: 1 log_cnt: 0 is_called:0

Since the DDL message contains the username, and we try to replace the username with 'redacted' to avoid this problem,

\o | sed 's/role.*search_path/role: redacted, search_path/g'

However, the title and dash lines may have different lengths for different
usernames. To avoid this problem, how about using a specified username when
initializing the database for this regression test?

I don't understand the question, do you have an example of when the
test doesn't work? It runs fine for me.

t/002_pg_dump.pl .............. 13/?
# Failed test 'binary_upgrade: should dump CREATE PUBLICATION pub1'
# at t/002_pg_dump.pl line 3916.
# Review binary_upgrade results in /home/px/Codes/postgresql/Debug/src/bin/pg_dump/tmp_check/tmp_test_jgRI

......

Failed 84/7709 subtests
t/003_pg_dump_with_server.pl .. ok
t/010_dump_connstr.pl ......... ok

Test Summary Report
-------------------
t/002_pg_dump.pl (Wstat: 21504 Tests: 7709 Failed: 84)

This is fixed in the latest version. I need to remind myself to run
make check-world in the future.

Regards,
Zheng Li

#19Li, Zheng
zhelli@amazon.com
In reply to: Zheng Li (#18)
hackersgeneral
Re: Support logical replication of DDLs
#20Japin Li
japinli@hotmail.com
In reply to: Zheng Li (#18)
hackersgeneral
Re: Support logical replication of DDLs

On Sat, 19 Mar 2022 at 01:25, Zheng Li <zhengli10@gmail.com> wrote:

Hello,

Thanks for the quick review!

And, when I try to use git am to apply the patch, it complains:

$ git am ~/0001-syntax-pg_publication-pg_dump-ddl_replication.patch
Patch format detection failed.

git apply works for me. I'm not sure why git am complains.
I also created a git branch to make code sharing easier, please try this out:
https://github.com/zli236/postgres/tree/ddl_replication

Yeah, I can use git apply, I'm not sure how did you generate the patch.

I also think that ddl = '' isn't a good way to disable DDL replication, how
about using ddl = 'none' or something else?

The syntax follows the existing convention of the WITH publish option.
For example in CREATE PUBLICATION mypub WITH (publish = '')
it means don't publish any DML change. So I'd leave it as is for now.

Agreed.

The test_decoding test case cannot work as expected, see below:

.....

DDL message: transactional: 1 prefix: role: redacted, search_path: "$user", public, sz: 47 content:CREATE TABLE tab1 (id serial unique, data int);
BEGIN
sequence public.tab1_id_seq: transactional:1 last_value: 1 log_cnt: 0 is_called:0

Since the DDL message contains the username, and we try to replace the username with 'redacted' to avoid this problem,

\o | sed 's/role.*search_path/role: redacted, search_path/g'

However, the title and dash lines may have different lengths for different
usernames. To avoid this problem, how about using a specified username when
initializing the database for this regression test?

I don't understand the question, do you have an example of when the
test doesn't work? It runs fine for me.

You should use a different user that has different length from your current one.
For example:

px@localhost$ make check-world

t/002_pg_dump.pl .............. 13/?
# Failed test 'binary_upgrade: should dump CREATE PUBLICATION pub1'
# at t/002_pg_dump.pl line 3916.
# Review binary_upgrade results in /home/px/Codes/postgresql/Debug/src/bin/pg_dump/tmp_check/tmp_test_jgRI

......

Failed 84/7709 subtests
t/003_pg_dump_with_server.pl .. ok
t/010_dump_connstr.pl ......... ok

Test Summary Report
-------------------
t/002_pg_dump.pl (Wstat: 21504 Tests: 7709 Failed: 84)

This is fixed in the latest version. I need to remind myself to run
make check-world in the future.

Thanks for updating the patch.

--
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

#21Dilip Kumar
dilipbalaut@gmail.com
In reply to: Zheng Li (#8)
hackersgeneral
#22Zheng Li
zhengli10@gmail.com
In reply to: Japin Li (#20)
hackersgeneral
#23Japin Li
japinli@hotmail.com
In reply to: Zheng Li (#22)
hackersgeneral
#24Dilip Kumar
dilipbalaut@gmail.com
In reply to: Dilip Kumar (#21)
hackersgeneral
#25Dilip Kumar
dilipbalaut@gmail.com
In reply to: Dilip Kumar (#24)
hackersgeneral
#26Zheng Li
zhengli10@gmail.com
In reply to: Dilip Kumar (#25)
hackersgeneral
#27Dilip Kumar
dilipbalaut@gmail.com
In reply to: Zheng Li (#26)
hackersgeneral
#28Ajin Cherian
itsajin@gmail.com
In reply to: Japin Li (#23)
hackersgeneral
#29Amit Kapila
amit.kapila16@gmail.com
In reply to: Japin Li (#23)
hackersgeneral
#30Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#27)
hackersgeneral
#31Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#27)
hackersgeneral
#32Amit Kapila
amit.kapila16@gmail.com
In reply to: Alvaro Herrera (#9)
hackersgeneral
#33Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Amit Kapila (#32)
hackersgeneral
#34Robert Haas
robertmhaas@gmail.com
In reply to: Alvaro Herrera (#33)
hackersgeneral
#35Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#29)
hackersgeneral
#36Amit Kapila
amit.kapila16@gmail.com
In reply to: Alvaro Herrera (#33)
hackersgeneral
#37Euler Taveira
euler@eulerto.com
In reply to: Amit Kapila (#35)
hackersgeneral
#38Zheng Li
zhengli10@gmail.com
In reply to: Dilip Kumar (#27)
hackersgeneral
#39Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#29)
hackersgeneral
#40Zheng Li
zhengli10@gmail.com
In reply to: Euler Taveira (#37)
hackersgeneral
#41Amit Kapila
amit.kapila16@gmail.com
In reply to: Euler Taveira (#37)
hackersgeneral
#42Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#39)
hackersgeneral
#43Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#38)
hackersgeneral
#44Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#43)
hackersgeneral
#45Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#41)
hackersgeneral
#46Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#45)
hackersgeneral
#47Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#46)
hackersgeneral
#48Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#31)
hackersgeneral
#49Euler Taveira
euler@eulerto.com
In reply to: Dilip Kumar (#48)
hackersgeneral
#50Zheng Li
zhengli10@gmail.com
In reply to: Euler Taveira (#49)
hackersgeneral
#51Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#38)
hackersgeneral
#52Zheng Li
zhengli10@gmail.com
In reply to: Euler Taveira (#49)
hackersgeneral
#53Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#42)
hackersgeneral
#54Amit Kapila
amit.kapila16@gmail.com
In reply to: Alvaro Herrera (#33)
hackersgeneral
#55Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#54)
hackersgeneral
#56Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#55)
hackersgeneral
#57Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#56)
hackersgeneral
#58Bharath Rupireddy
bharath.rupireddyforpostgres@gmail.com
In reply to: Dilip Kumar (#57)
hackersgeneral
#59Amit Kapila
amit.kapila16@gmail.com
In reply to: Bharath Rupireddy (#58)
hackersgeneral
#60Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Dilip Kumar (#57)
hackersgeneral
#61Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#46)
hackersgeneral
#62Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#61)
hackersgeneral
#63Ajin Cherian
itsajin@gmail.com
In reply to: Amit Kapila (#54)
hackersgeneral
#64Amit Kapila
amit.kapila16@gmail.com
In reply to: Ajin Cherian (#63)
hackersgeneral
#65Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#63)
hackersgeneral
#66Zheng Li
zhengli10@gmail.com
In reply to: Alvaro Herrera (#60)
hackersgeneral
#67Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Zheng Li (#66)
hackersgeneral
#68Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#65)
hackersgeneral
#69Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Alvaro Herrera (#60)
hackersgeneral
#70Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#69)
hackersgeneral
#71Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#70)
hackersgeneral
#72Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#71)
hackersgeneral
#73Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#39)
hackersgeneral
#74Amit Kapila
amit.kapila16@gmail.com
In reply to: Euler Taveira (#49)
hackersgeneral
#75Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#74)
hackersgeneral
#76Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#63)
hackersgeneral
#77Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Zheng Li (#73)
hackersgeneral
#78Zheng Li
zhengli10@gmail.com
In reply to: Masahiko Sawada (#77)
hackersgeneral
#79Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#78)
hackersgeneral
#80Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Ajin Cherian (#76)
hackersgeneral
#81Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Zheng Li (#78)
hackersgeneral
#82Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#79)
hackersgeneral
#83Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Masahiko Sawada (#82)
hackersgeneral
#84Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#83)
hackersgeneral
#85Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#84)
hackersgeneral
#86Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#85)
hackersgeneral
#87Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#86)
hackersgeneral
#88Zheng Li
zhengli10@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#83)
hackersgeneral
#89Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zheng Li (#88)
hackersgeneral
#90Zheng Li
zhengli10@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#89)
hackersgeneral
#91Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#90)
hackersgeneral
#92Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zheng Li (#90)
hackersgeneral
#93Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#91)
hackersgeneral
#94Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zheng Li (#93)
hackersgeneral
#95Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#94)
hackersgeneral
#96Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#91)
hackersgeneral
#97vignesh C
vignesh21@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#95)
hackersgeneral
#98Zheng Li
zhengli10@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#94)
hackersgeneral
#99Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zheng Li (#98)
hackersgeneral
#100Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#96)
hackersgeneral
#101Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Zhijie Hou (Fujitsu) (#92)
hackersgeneral
#102Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#100)
hackersgeneral
#103Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#102)
hackersgeneral
#104Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: vignesh C (#97)
hackersgeneral
#105Amit Kapila
amit.kapila16@gmail.com
In reply to: Alvaro Herrera (#104)
hackersgeneral
#106Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#95)
hackersgeneral
#107vignesh C
vignesh21@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#95)
hackersgeneral
#108Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#106)
hackersgeneral
#109Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#105)
hackersgeneral
#110Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#108)
hackersgeneral
#111Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#110)
hackersgeneral
#112Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#109)
hackersgeneral
#113Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#112)
hackersgeneral
#114vignesh C
vignesh21@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#110)
hackersgeneral
#115Amit Kapila
amit.kapila16@gmail.com
In reply to: vignesh C (#114)
hackersgeneral
#116vignesh C
vignesh21@gmail.com
In reply to: Amit Kapila (#115)
hackersgeneral
#117Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#111)
hackersgeneral
#118Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#117)
hackersgeneral
#119Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Peter Smith (#118)
hackersgeneral
#120Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#119)
hackersgeneral
#121Zheng Li
zhengli10@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#120)
hackersgeneral
#122Joe Conway
mail@joeconway.com
In reply to: Zheng Li (#121)
hackersgeneral
#123Zheng Li
zhengli10@gmail.com
In reply to: Joe Conway (#122)
hackersgeneral
#124Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#121)
hackersgeneral
#125Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#120)
hackersgeneral
#126Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#125)
hackersgeneral
#127Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Peter Smith (#126)
hackersgeneral
#128Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#125)
hackersgeneral
#129Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#127)
hackersgeneral
#130Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#124)
hackersgeneral
#131Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#130)
hackersgeneral
#132Ajin Cherian
itsajin@gmail.com
In reply to: Peter Smith (#129)
hackersgeneral
#133Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Ajin Cherian (#132)
hackersgeneral
#134Ajin Cherian
itsajin@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#133)
hackersgeneral
#135Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#134)
hackersgeneral
#136Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#135)
hackersgeneral
#137Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#136)
hackersgeneral
#138Zheng Li
zhengli10@gmail.com
In reply to: Ajin Cherian (#137)
hackersgeneral
#139vignesh C
vignesh21@gmail.com
In reply to: Zheng Li (#138)
hackersgeneral
#140vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#139)
hackersgeneral
#141Peter Smith
smithpb2250@gmail.com
In reply to: vignesh C (#140)
hackersgeneral
#142Zheng Li
zhengli10@gmail.com
In reply to: vignesh C (#140)
hackersgeneral
#143Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Zheng Li (#142)
hackersgeneral
#144Zheng Li
zhengli10@gmail.com
In reply to: Alvaro Herrera (#143)
hackersgeneral
#145Ajin Cherian
itsajin@gmail.com
In reply to: Zheng Li (#144)
hackersgeneral
#146Zheng Li
zhengli10@gmail.com
In reply to: Ajin Cherian (#145)
hackersgeneral
#147vignesh C
vignesh21@gmail.com
In reply to: Zheng Li (#146)
hackersgeneral
#148Peter Smith
smithpb2250@gmail.com
In reply to: vignesh C (#147)
hackersgeneral
#149Ajin Cherian
itsajin@gmail.com
In reply to: vignesh C (#147)
hackersgeneral
#150Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#149)
hackersgeneral
#151Dilip Kumar
dilipbalaut@gmail.com
In reply to: Ajin Cherian (#150)
hackersgeneral
#152Ajin Cherian
itsajin@gmail.com
In reply to: Peter Smith (#141)
hackersgeneral
#153vignesh C
vignesh21@gmail.com
In reply to: Ajin Cherian (#152)
hackersgeneral
#154Zheng Li
zhengli10@gmail.com
In reply to: vignesh C (#153)
hackersgeneral
#155vignesh C
vignesh21@gmail.com
In reply to: Dilip Kumar (#151)
hackersgeneral
#156Ajin Cherian
itsajin@gmail.com
In reply to: vignesh C (#155)
hackersgeneral
#157Zheng Li
zhengli10@gmail.com
In reply to: Ajin Cherian (#156)
hackersgeneral
#158vignesh C
vignesh21@gmail.com
In reply to: Zheng Li (#157)
hackersgeneral
#159Peter Smith
smithpb2250@gmail.com
In reply to: Zheng Li (#157)
hackersgeneral
#160Zheng Li
zhengli10@gmail.com
In reply to: Peter Smith (#159)
hackersgeneral
#161Peter Smith
smithpb2250@gmail.com
In reply to: Zheng Li (#160)
hackersgeneral
#162Peter Smith
smithpb2250@gmail.com
In reply to: Zheng Li (#157)
hackersgeneral
#163Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Smith (#159)
hackersgeneral
#164Peter Smith
smithpb2250@gmail.com
In reply to: Peter Smith (#162)
hackersgeneral
#165vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#158)
hackersgeneral
#166vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#165)
hackersgeneral
#167Peter Smith
smithpb2250@gmail.com
In reply to: Peter Smith (#164)
hackersgeneral
#168vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#166)
hackersgeneral
#169Ajin Cherian
itsajin@gmail.com
In reply to: vignesh C (#166)
hackersgeneral
#170Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#169)
hackersgeneral
#171Peter Smith
smithpb2250@gmail.com
In reply to: Peter Smith (#167)
hackersgeneral
#172Peter Smith
smithpb2250@gmail.com
In reply to: Peter Smith (#171)
hackersgeneral
#173Peter Smith
smithpb2250@gmail.com
In reply to: Peter Smith (#172)
hackersgeneral
#174Peter Smith
smithpb2250@gmail.com
In reply to: Peter Smith (#173)
hackersgeneral
#175vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#168)
hackersgeneral
#176vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#175)
hackersgeneral
#177Peter Smith
smithpb2250@gmail.com
In reply to: Zheng Li (#157)
hackersgeneral
#178vignesh C
vignesh21@gmail.com
In reply to: Peter Smith (#173)
hackersgeneral
#179Zheng Li
zhengli10@gmail.com
In reply to: Peter Smith (#162)
hackersgeneral
#180vignesh C
vignesh21@gmail.com
In reply to: Peter Smith (#174)
hackersgeneral
#181vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#180)
hackersgeneral
#182li jie
ggysxcq@gmail.com
In reply to: vignesh C (#181)
hackersgeneral
#183vignesh C
vignesh21@gmail.com
In reply to: Peter Smith (#172)
hackersgeneral
#184vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#181)
hackersgeneral
#185Zheng Li
zhengli10@gmail.com
In reply to: li jie (#182)
hackersgeneral
#186li jie
ggysxcq@gmail.com
In reply to: Zheng Li (#185)
hackersgeneral
#187Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#185)
hackersgeneral
#188Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#187)
hackersgeneral
#189rajesh singarapu
rajesh.rs0541@gmail.com
In reply to: Zheng Li (#188)
hackersgeneral
#190Ajin Cherian
itsajin@gmail.com
In reply to: rajesh singarapu (#189)
hackersgeneral
#191rajesh singarapu
rajesh.rs0541@gmail.com
In reply to: Ajin Cherian (#190)
hackersgeneral
#192Ajin Cherian
itsajin@gmail.com
In reply to: rajesh singarapu (#191)
hackersgeneral
#193rajesh singarapu
rajesh.rs0541@gmail.com
In reply to: Ajin Cherian (#192)
hackersgeneral
#194rajesh singarapu
rajesh.rs0541@gmail.com
In reply to: rajesh singarapu (#193)
hackersgeneral
#195Ajin Cherian
itsajin@gmail.com
In reply to: rajesh singarapu (#194)
hackersgeneral
#196li jie
ggysxcq@gmail.com
In reply to: Ajin Cherian (#195)
hackersgeneral
#197vignesh C
vignesh21@gmail.com
In reply to: li jie (#196)
hackersgeneral
#198vignesh C
vignesh21@gmail.com
In reply to: li jie (#196)
hackersgeneral
#199li jie
ggysxcq@gmail.com
In reply to: vignesh C (#198)
hackersgeneral
#200Zheng Li
zhengli10@gmail.com
In reply to: li jie (#199)
hackersgeneral
#201Zheng Li
zhengli10@gmail.com
In reply to: li jie (#182)
hackersgeneral
#202vignesh C
vignesh21@gmail.com
In reply to: li jie (#196)
hackersgeneral
#203vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#166)
hackersgeneral
#204Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: vignesh C (#203)
hackersgeneral
#205vignesh C
vignesh21@gmail.com
In reply to: Alvaro Herrera (#204)
hackersgeneral
#206li jie
ggysxcq@gmail.com
In reply to: vignesh C (#205)
hackersgeneral
#207li jie
ggysxcq@gmail.com
In reply to: Zheng Li (#200)
hackersgeneral
#208Amit Kapila
amit.kapila16@gmail.com
In reply to: li jie (#206)
hackersgeneral
#209Zheng Li
zhengli10@gmail.com
In reply to: li jie (#207)
hackersgeneral
#210Ajin Cherian
itsajin@gmail.com
In reply to: Peter Smith (#177)
hackersgeneral
#211Ajin Cherian
itsajin@gmail.com
In reply to: Peter Smith (#177)
hackersgeneral
#212Zheng Li
zhengli10@gmail.com
In reply to: Ajin Cherian (#211)
hackersgeneral
#213Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#212)
hackersgeneral
#214li jie
ggysxcq@gmail.com
In reply to: Zheng Li (#213)
hackersgeneral
#215vignesh C
vignesh21@gmail.com
In reply to: Peter Smith (#167)
hackersgeneral
#216Zheng Li
zhengli10@gmail.com
In reply to: li jie (#214)
hackersgeneral
#217vignesh C
vignesh21@gmail.com
In reply to: Zheng Li (#216)
hackersgeneral
#218Zheng Li
zhengli10@gmail.com
In reply to: vignesh C (#217)
hackersgeneral
#219vignesh C
vignesh21@gmail.com
In reply to: Peter Smith (#171)
hackersgeneral
#220li jie
ggysxcq@gmail.com
In reply to: vignesh C (#219)
hackersgeneral
#221Ajin Cherian
itsajin@gmail.com
In reply to: Peter Smith (#164)
hackersgeneral
#222Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Smith (#164)
hackersgeneral
#223Zheng Li
zhengli10@gmail.com
In reply to: li jie (#220)
hackersgeneral
#224Peter Smith
smithpb2250@gmail.com
In reply to: Alvaro Herrera (#222)
hackersgeneral
#225vignesh C
vignesh21@gmail.com
In reply to: Zheng Li (#223)
hackersgeneral
#226osumi.takamichi@fujitsu.com
osumi.takamichi@fujitsu.com
In reply to: vignesh C (#225)
hackersgeneral
#227vignesh C
vignesh21@gmail.com
In reply to: osumi.takamichi@fujitsu.com (#226)
hackersgeneral
#228vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#227)
hackersgeneral
#229Zheng Li
zhengli10@gmail.com
In reply to: li jie (#220)
hackersgeneral
#230Zheng Li
zhengli10@gmail.com
In reply to: vignesh C (#225)
hackersgeneral
#231Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#230)
hackersgeneral
#232vignesh C
vignesh21@gmail.com
In reply to: Alvaro Herrera (#204)
hackersgeneral
#233Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#231)
hackersgeneral
#234Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#233)
hackersgeneral
#235vignesh C
vignesh21@gmail.com
In reply to: Zheng Li (#234)
hackersgeneral
#236Ajin Cherian
itsajin@gmail.com
In reply to: vignesh C (#235)
hackersgeneral
#237vignesh C
vignesh21@gmail.com
In reply to: Ajin Cherian (#236)
hackersgeneral
#238Ajin Cherian
itsajin@gmail.com
In reply to: vignesh C (#237)
hackersgeneral
#239Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#234)
hackersgeneral
#240Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#239)
hackersgeneral
#241Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#240)
hackersgeneral
#242vignesh C
vignesh21@gmail.com
In reply to: Ajin Cherian (#238)
hackersgeneral
#243Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#241)
hackersgeneral
#244Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#243)
hackersgeneral
#245Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#244)
hackersgeneral
#246Peter Smith
smithpb2250@gmail.com
In reply to: vignesh C (#242)
hackersgeneral
#247Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Smith (#246)
hackersgeneral
#248Ajin Cherian
itsajin@gmail.com
In reply to: Alvaro Herrera (#247)
hackersgeneral
#249Peter Smith
smithpb2250@gmail.com
In reply to: Alvaro Herrera (#247)
hackersgeneral
#250Peter Smith
smithpb2250@gmail.com
In reply to: vignesh C (#242)
hackersgeneral
#251Ajin Cherian
itsajin@gmail.com
In reply to: Ajin Cherian (#248)
hackersgeneral
#252vignesh C
vignesh21@gmail.com
In reply to: Peter Smith (#250)
hackersgeneral
#253vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#252)
hackersgeneral
#254Peter Smith
smithpb2250@gmail.com
In reply to: vignesh C (#252)
hackersgeneral
#255Ajin Cherian
itsajin@gmail.com
In reply to: Peter Smith (#246)
hackersgeneral
#256Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Ajin Cherian (#255)
hackersgeneral
#257Amit Kapila
amit.kapila16@gmail.com
In reply to: Ajin Cherian (#255)
hackersgeneral
#258Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Ajin Cherian (#255)
hackersgeneral
#259vignesh C
vignesh21@gmail.com
In reply to: Peter Smith (#254)
hackersgeneral
#260vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#253)
hackersgeneral
#261vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#259)
hackersgeneral
#262Zheng Li
zhengli10@gmail.com
In reply to: vignesh C (#261)
hackersgeneral
#263Peter Smith
smithpb2250@gmail.com
In reply to: vignesh C (#261)
hackersgeneral
#264Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Smith (#249)
hackersgeneral
#265Peter Smith
smithpb2250@gmail.com
In reply to: vignesh C (#259)
hackersgeneral
#266Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Smith (#265)
hackersgeneral
#267Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Peter Smith (#265)
hackersgeneral
#268Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#257)
hackersgeneral
#269Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#257)
hackersgeneral
#270Peter Smith
smithpb2250@gmail.com
In reply to: vignesh C (#259)
hackersgeneral
#271Peter Smith
smithpb2250@gmail.com
In reply to: Ajin Cherian (#255)
hackersgeneral
#272Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#258)
hackersgeneral
#273Amit Kapila
amit.kapila16@gmail.com
In reply to: vignesh C (#261)
hackersgeneral
#274Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Smith (#271)
hackersgeneral
#275Amit Kapila
amit.kapila16@gmail.com
In reply to: Alvaro Herrera (#274)
hackersgeneral
#276Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#275)
hackersgeneral
#277Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#276)
hackersgeneral
#278Ajin Cherian
itsajin@gmail.com
In reply to: Alvaro Herrera (#256)
hackersgeneral
#279Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#275)
hackersgeneral
#280Jonathan S. Katz
jkatz@postgresql.org
In reply to: Zhijie Hou (Fujitsu) (#269)
hackersgeneral
#281Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Jonathan S. Katz (#280)
hackersgeneral
#282Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Zhijie Hou (Fujitsu) (#279)
hackersgeneral
#283Jonathan S. Katz
jkatz@postgresql.org
In reply to: Alvaro Herrera (#281)
hackersgeneral
#284Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Jonathan S. Katz (#283)
hackersgeneral
#285Jonathan S. Katz
jkatz@postgresql.org
In reply to: Alvaro Herrera (#284)
hackersgeneral
#286Jonathan S. Katz
jkatz@postgresql.org
In reply to: Jonathan S. Katz (#285)
hackersgeneral
#287Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#277)
hackersgeneral
#288Amit Kapila
amit.kapila16@gmail.com
In reply to: Jonathan S. Katz (#285)
hackersgeneral
#289vignesh C
vignesh21@gmail.com
In reply to: Jonathan S. Katz (#286)
hackersgeneral
#290Jonathan S. Katz
jkatz@postgresql.org
In reply to: Amit Kapila (#288)
hackersgeneral
#291Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#268)
hackersgeneral
#292Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#272)
hackersgeneral
#293Amit Kapila
amit.kapila16@gmail.com
In reply to: Jonathan S. Katz (#290)
hackersgeneral
#294Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Zheng Li (#287)
hackersgeneral
#295Jonathan S. Katz
jkatz@postgresql.org
In reply to: Amit Kapila (#293)
hackersgeneral
#296Zheng Li
zhengli10@gmail.com
In reply to: Masahiko Sawada (#294)
hackersgeneral
#297Zheng Li
zhengli10@gmail.com
In reply to: Zheng Li (#296)
hackersgeneral
#298Ajin Cherian
itsajin@gmail.com
In reply to: vignesh C (#253)
hackersgeneral
#299Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Zheng Li (#296)
hackersgeneral
#300Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Ajin Cherian (#298)
hackersgeneral
#301Ajin Cherian
itsajin@gmail.com
In reply to: Peter Smith (#271)
hackersgeneral
#302wangw.fnst@fujitsu.com
wangw.fnst@fujitsu.com
In reply to: Ajin Cherian (#301)
hackersgeneral
#303vignesh C
vignesh21@gmail.com
In reply to: Ajin Cherian (#301)
hackersgeneral
#304Zheng Li
zhengli10@gmail.com
In reply to: wangw.fnst@fujitsu.com (#302)
hackersgeneral
#305wangw.fnst@fujitsu.com
wangw.fnst@fujitsu.com
In reply to: wangw.fnst@fujitsu.com (#302)
hackersgeneral
#306Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: wangw.fnst@fujitsu.com (#302)
hackersgeneral
#307Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: wangw.fnst@fujitsu.com (#305)
hackersgeneral
#308vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#303)
hackersgeneral
#309Runqi Tian
runqidev@gmail.com
In reply to: vignesh C (#308)
hackersgeneral
#310Zheng Li
zhengli10@gmail.com
In reply to: Runqi Tian (#309)
hackersgeneral
#311Ajin Cherian
itsajin@gmail.com
In reply to: Zheng Li (#310)
hackersgeneral
#312wangw.fnst@fujitsu.com
wangw.fnst@fujitsu.com
In reply to: Ajin Cherian (#311)
hackersgeneral
#313osumi.takamichi@fujitsu.com
osumi.takamichi@fujitsu.com
In reply to: Ajin Cherian (#311)
hackersgeneral
#314Zheng Li
zhengli10@gmail.com
In reply to: osumi.takamichi@fujitsu.com (#313)
hackersgeneral
#315Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: wangw.fnst@fujitsu.com (#312)
hackersgeneral
#316Ajin Cherian
itsajin@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#315)
hackersgeneral
#317vignesh C
vignesh21@gmail.com
In reply to: Ajin Cherian (#316)
hackersgeneral
#318vignesh C
vignesh21@gmail.com
In reply to: Ajin Cherian (#316)
hackersgeneral
#319vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#317)
hackersgeneral
#320Tom Lane
tgl@sss.pgh.pa.us
In reply to: vignesh C (#319)
hackersgeneral
#321vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#318)
hackersgeneral
#322Amit Kapila
amit.kapila16@gmail.com
In reply to: Tom Lane (#320)
hackersgeneral
#323Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#322)
hackersgeneral
#324Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#323)
hackersgeneral
#325Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#323)
hackersgeneral
#326Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#325)
hackersgeneral
#327Jonathan S. Katz
jkatz@postgresql.org
In reply to: Amit Kapila (#322)
hackersgeneral
#328Zheng Li
zhengli10@gmail.com
In reply to: Tom Lane (#320)
hackersgeneral
#329Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#328)
hackersgeneral
#330Zheng Li
zhengli10@gmail.com
In reply to: Amit Kapila (#329)
hackersgeneral
#331Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#324)
hackersgeneral
#332Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#331)
hackersgeneral
#333vignesh C
vignesh21@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#332)
hackersgeneral
#334Amit Kapila
amit.kapila16@gmail.com
In reply to: vignesh C (#333)
hackersgeneral
#335Amit Kapila
amit.kapila16@gmail.com
In reply to: Zheng Li (#330)
hackersgeneral
#336vignesh C
vignesh21@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#332)
hackersgeneral
#337Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#332)
hackersgeneral
#338Phil Florent
philflorent@hotmail.com
In reply to: vignesh C (#336)
hackersgeneral
#339Amit Kapila
amit.kapila16@gmail.com
In reply to: Phil Florent (#338)
hackersgeneral
#340Phil Florent
philflorent@hotmail.com
In reply to: Amit Kapila (#339)
hackersgeneral
#341Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: vignesh C (#333)
hackersgeneral
#342Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Peter Smith (#337)
hackersgeneral
#343shveta malik
shveta.malik@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#341)
hackersgeneral
#344Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: shveta malik (#343)
hackersgeneral
#345Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#344)
hackersgeneral
#346Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#347Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#348shiy.fnst@fujitsu.com
shiy.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#349wangw.fnst@fujitsu.com
wangw.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#350Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#346)
hackersgeneral
#351Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#352Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#351)
hackersgeneral
#353vignesh C
vignesh21@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#354vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#353)
hackersgeneral
#355Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#356vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#354)
hackersgeneral
#357Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#347)
hackersgeneral
#358Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Amit Kapila (#351)
hackersgeneral
#359Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#360Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#345)
hackersgeneral
#361Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: vignesh C (#356)
hackersgeneral
#362Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zhijie Hou (Fujitsu) (#361)
hackersgeneral
#363shveta malik
shveta.malik@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#357)
hackersgeneral
#364shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#363)
hackersgeneral
#365Amit Kapila
amit.kapila16@gmail.com
In reply to: shveta malik (#363)
hackersgeneral
#366shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#364)
hackersgeneral
#367Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#344)
hackersgeneral
#368Amit Kapila
amit.kapila16@gmail.com
In reply to: shveta malik (#364)
hackersgeneral
#369Amit Kapila
amit.kapila16@gmail.com
In reply to: shveta malik (#366)
hackersgeneral
#370shveta malik
shveta.malik@gmail.com
In reply to: Amit Kapila (#365)
hackersgeneral
#371Amit Kapila
amit.kapila16@gmail.com
In reply to: shveta malik (#370)
hackersgeneral
#372Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: shveta malik (#366)
hackersgeneral
#373Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#372)
hackersgeneral
#374Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#373)
hackersgeneral
#375Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#374)
hackersgeneral
#376Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#326)
hackersgeneral
#377Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#375)
hackersgeneral
#378vignesh C
vignesh21@gmail.com
In reply to: Masahiko Sawada (#376)
hackersgeneral
#379Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Masahiko Sawada (#376)
hackersgeneral
#380Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#372)
hackersgeneral
#381Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Peter Smith (#367)
hackersgeneral
#382shveta malik
shveta.malik@gmail.com
In reply to: Amit Kapila (#380)
hackersgeneral
#383Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Zhijie Hou (Fujitsu) (#372)
hackersgeneral
#384Peter Smith
smithpb2250@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#381)
hackersgeneral
#385shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#382)
hackersgeneral
#386shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#385)
hackersgeneral
#387shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#385)
hackersgeneral
#388shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#387)
hackersgeneral
#389shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#388)
hackersgeneral
#390shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#389)
hackersgeneral
#391vignesh C
vignesh21@gmail.com
In reply to: shveta malik (#390)
hackersgeneral
#392shveta malik
shveta.malik@gmail.com
In reply to: vignesh C (#391)
hackersgeneral
#393vignesh C
vignesh21@gmail.com
In reply to: shveta malik (#392)
hackersgeneral
#394shiy.fnst@fujitsu.com
shiy.fnst@fujitsu.com
In reply to: shveta malik (#392)
hackersgeneral
#395vignesh C
vignesh21@gmail.com
In reply to: vignesh C (#393)
hackersgeneral
#396shveta malik
shveta.malik@gmail.com
In reply to: vignesh C (#395)
hackersgeneral
#397vignesh C
vignesh21@gmail.com
In reply to: shveta malik (#396)
hackersgeneral
#398wangw.fnst@fujitsu.com
wangw.fnst@fujitsu.com
In reply to: vignesh C (#397)
hackersgeneral
#399shveta malik
shveta.malik@gmail.com
In reply to: shiy.fnst@fujitsu.com (#394)
hackersgeneral
#400shiy.fnst@fujitsu.com
shiy.fnst@fujitsu.com
In reply to: shveta malik (#399)
hackersgeneral
#401shiy.fnst@fujitsu.com
shiy.fnst@fujitsu.com
In reply to: shveta malik (#399)
hackersgeneral
#402vignesh C
vignesh21@gmail.com
In reply to: wangw.fnst@fujitsu.com (#398)
hackersgeneral
#403shveta malik
shveta.malik@gmail.com
In reply to: shiy.fnst@fujitsu.com (#401)
hackersgeneral
#404wangw.fnst@fujitsu.com
wangw.fnst@fujitsu.com
In reply to: vignesh C (#402)
hackersgeneral
#405vignesh C
vignesh21@gmail.com
In reply to: shiy.fnst@fujitsu.com (#400)
hackersgeneral
#406Amit Kapila
amit.kapila16@gmail.com
In reply to: shveta malik (#403)
hackersgeneral
#407Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#406)
hackersgeneral
#408shveta malik
shveta.malik@gmail.com
In reply to: Amit Kapila (#407)
hackersgeneral
#409shveta malik
shveta.malik@gmail.com
In reply to: Amit Kapila (#406)
hackersgeneral
#410shveta malik
shveta.malik@gmail.com
In reply to: wangw.fnst@fujitsu.com (#404)
hackersgeneral
#411Masahiko Sawada
sawada.mshk@gmail.com
In reply to: shveta malik (#408)
hackersgeneral
#412shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#408)
hackersgeneral
#413Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#411)
hackersgeneral
#414Ajin Cherian
itsajin@gmail.com
In reply to: shveta malik (#408)
hackersgeneral
#415wangw.fnst@fujitsu.com
wangw.fnst@fujitsu.com
In reply to: shveta malik (#408)
hackersgeneral
#416Amit Kapila
amit.kapila16@gmail.com
In reply to: shveta malik (#408)
hackersgeneral
#417Michael Paquier
michael@paquier.xyz
In reply to: wangw.fnst@fujitsu.com (#415)
hackersgeneral
#418Amit Kapila
amit.kapila16@gmail.com
In reply to: Michael Paquier (#417)
hackersgeneral
#419Michael Paquier
michael@paquier.xyz
In reply to: Amit Kapila (#418)
hackersgeneral
#420shveta malik
shveta.malik@gmail.com
In reply to: Michael Paquier (#419)
hackersgeneral
#421shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#420)
hackersgeneral
#422Amit Kapila
amit.kapila16@gmail.com
In reply to: shveta malik (#420)
hackersgeneral
#423Jelte Fennema-Nio
postgres@jeltef.nl
In reply to: Amit Kapila (#422)
hackersgeneral
#424shveta malik
shveta.malik@gmail.com
In reply to: Amit Kapila (#422)
hackersgeneral
#425shveta malik
shveta.malik@gmail.com
In reply to: wangw.fnst@fujitsu.com (#415)
hackersgeneral
#426shveta malik
shveta.malik@gmail.com
In reply to: Jelte Fennema-Nio (#423)
hackersgeneral
#427Amit Kapila
amit.kapila16@gmail.com
In reply to: Michael Paquier (#417)
hackersgeneral
#428vignesh C
vignesh21@gmail.com
In reply to: Amit Kapila (#427)
hackersgeneral
#429shveta malik
shveta.malik@gmail.com
In reply to: shveta malik (#424)
hackersgeneral
#430Zheng Li
zhengli10@gmail.com
In reply to: vignesh C (#428)
hackersgeneral
#431Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Zheng Li (#430)
hackersgeneral
#432Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: shveta malik (#429)
hackersgeneral
#433Amit Kapila
amit.kapila16@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#432)
hackersgeneral
#434Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Zhijie Hou (Fujitsu) (#432)
hackersgeneral
#435Michael Paquier
michael@paquier.xyz
In reply to: Masahiko Sawada (#434)
hackersgeneral
#436Zhijie Hou (Fujitsu)
houzj.fnst@fujitsu.com
In reply to: Masahiko Sawada (#434)
hackersgeneral
#437Andrey Borodin
amborodin@acm.org
In reply to: Zhijie Hou (Fujitsu) (#436)
hackersgeneral
#438Amit Kapila
amit.kapila16@gmail.com
In reply to: Andrey Borodin (#437)
hackersgeneral
#439Konstantin Berkaev
konstantinberkaev@gmail.com
In reply to: Amit Kapila (#438)
hackersgeneral
#440Vitaly Davydov
v.davydov@postgrespro.ru
In reply to: Amit Kapila (#438)
hackersgeneral
#441Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Vitaly Davydov (#440)
hackersgeneral
#442Ashutosh Bapat
ashutosh.bapat@enterprisedb.com
In reply to: Masahiko Sawada (#441)
hackersgeneral
#443Vitaly Davydov
v.davydov@postgrespro.ru
In reply to: Ashutosh Bapat (#442)
hackersgeneral
#444Andreas Karlsson
andreas.karlsson@percona.com
In reply to: Vitaly Davydov (#440)
hackersgeneral
#445Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#441)
hackersgeneral
#446Amit Kapila
amit.kapila16@gmail.com
In reply to: Bruce Momjian (#445)
hackersgeneral
#447Bruce Momjian
bruce@momjian.us
In reply to: Amit Kapila (#446)
hackersgeneral
#448Vitaly Davydov
v.davydov@postgrespro.ru
In reply to: Andreas Karlsson (#444)
hackersgeneral
#449Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Vitaly Davydov (#443)
hackersgeneral