agora inbox for [email protected]  
help / color / mirror / Atom feed
[PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
103+ messages / 6 participants
[nested] [flat]

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..4856504045 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does not exists in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v4-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 27 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 19 +++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..f0412220bc 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,33 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..ffb93f084d 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,25 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v3 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-01-26 09:43  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-01-26 09:43 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 30 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 22 ++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 2fa9bce66a..2b83beed11 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,36 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" do not in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 RESET SESSION AUTHORIZATION;
 DROP ROLE regress_subscription_user;
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 14fa0b247e..a0178cfb7e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,28 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 RESET SESSION AUTHORIZATION;
-- 
2.30.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v3-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-13 05:49  Japin Li <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Japin Li @ 2021-02-13 05:49 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..eaffe1351f 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication name "testpub" is already in subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publication names "testpub1, testpub2" are already in subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication name "testpub3" does no exist in subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publication names "testpub3, testpub4" do no exist in subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v5-0004-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v8 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 42 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 34 ++++++++++++++++++
 2 files changed, 76 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..9368a9c206 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,48 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- fail - publication used more than once
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub1 WITH (refresh = false);
+ERROR:  publication name "testpub1" used more than once
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - publication use more then once
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub1 WITH (refresh = false);
+ERROR:  publication name "testpub1" used more than once
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..cc0ed4fe77 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,40 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- fail - publication used more than once
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub1 WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - publication use more then once
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub1 WITH (refresh = false);
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v8-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
@ 2021-02-16 01:50  Bharath Rupireddy <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Bharath Rupireddy @ 2021-02-16 01:50 UTC (permalink / raw)

---
 src/test/regress/expected/subscription.out | 36 ++++++++++++++++++++++
 src/test/regress/sql/subscription.sql      | 28 +++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 14a430221d..d7df579069 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -200,6 +200,42 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
  regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
 (1 row)
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+ERROR:  publication "testpub" is already present in the subscription
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+ERROR:  publications "testpub1", "testpub2" are already present in the subscription
+\dRs+
+                                                                    List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+ERROR:  subscription must contain at least one publication
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+ERROR:  publication "testpub3" doesn't exist in the subscription
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+ERROR:  publications "testpub3", "testpub4" do not exist in the subscription
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+ERROR:  unrecognized subscription parameter: "copy_data"
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+\dRs+
+                                                            List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Synchronous commit |          Conninfo           
+-----------------+---------------------------+---------+-------------+--------+-----------+--------------------+-----------------------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | f         | off                | dbname=regress_doesnotexist
+(1 row)
+
 DROP SUBSCRIPTION regress_testsub;
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
        WITH (connect = false, create_slot = false, copy_data = false);
diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql
index 81e65e5e64..746a589a8e 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -145,6 +145,34 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 
 \dRs+
 
+-- fail - publication already exists
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub WITH (refresh = false);
+
+-- ok - add two publications into subscription
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+-- fail - publications already exist
+ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
+-- fail - all publications are deleted
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub, testpub1, testpub2 WITH (refresh = false);
+
+-- fail - the deleted publication does not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3 WITH (refresh = false);
+
+-- fail - the deleted publications do not in subscription
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub3, testpub4 WITH (refresh = false);
+
+-- fail - do not support copy_data option
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1 WITH (refresh = false, copy_data = true);
+
+-- ok - delete publications
+ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
+
+\dRs+
+
 DROP SUBSCRIPTION regress_testsub;
 
 CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUBLICATION mypub
-- 
2.25.1


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v7-0003-Add-documentation-for-ALTER-SUBSCRIPTION.ADD-DROP.patch



^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* race condition in pg_class
@ 2023-10-25 10:39  Smolkin Grigory <[email protected]>
  0 siblings, 3 replies; 103+ messages in thread

From: Smolkin Grigory @ 2023-10-25 10:39 UTC (permalink / raw)
  To: pgsql-hackers

Hello, hackers!
We are running PG13.10 and recently we have encountered what appears to be
a bug due to some race condition between ALTER TABLE ... ADD CONSTRAINT and
some other catalog-writer, possibly ANALYZE.
The problem is that after successfully creating index on relation (which
previosly didnt have any indexes), its pg_class.relhasindex remains set to
"false", which is illegal, I think.
Index was built using the following statement:
ALTER TABLE "example" ADD constraint "example_pkey" PRIMARY KEY (id);

PG_CLASS:
# select ctid,oid,xmin,xmax, * from pg_class where oid = 3566558198;
-[ RECORD 1
]-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ctid                | (12,49)
oid                 | 3566558198
xmin                | 1202298791
xmax                | 0
relname             | example
relnamespace        | 16479
reltype             | 3566558200
reloftype           | 0
relowner            | 16386
relam               | 2
relfilenode         | 3566558198
reltablespace       | 0
relpages            | 152251
reltuples           | 1.1565544e+07
relallvisible       | 127837
reltoastrelid       | 3566558203
relhasindex         | f
relisshared         | f
relpersistence      | p
relkind             | r
relnatts            | 12
relchecks           | 0
relhasrules         | f
relhastriggers      | f
relhassubclass      | f
relrowsecurity      | f
relforcerowsecurity | f
relispopulated      | t
relreplident        | d
relispartition      | f
relrewrite          | 0
relfrozenxid        | 1201647807
relminmxid          | 1
relacl              |
reloptions          |
relpartbound        |

PG_INDEX:
# select ctid,xmin,xmax,indexrelid::regclass,indrelid::regclass, * from
pg_index where indexrelid = 3569625749;
-[ RECORD 1 ]--+---------------------------------------------
ctid           | (3,30)
xmin           | 1202295045
xmax           | 0
indexrelid     | "example_pkey"
indrelid       | "example"
indexrelid     | 3569625749
indrelid       | 3566558198
indnatts       | 1
indnkeyatts    | 1
indisunique    | t
indisprimary   | t
indisexclusion | f
indimmediate   | t
indisclustered | f
indisvalid     | t
indcheckxmin   | f
indisready     | t
indislive      | t
indisreplident | f
indkey         | 1
indcollation   | 0
indclass       | 3124
indoption      | 0
indexprs       |
indpred        |

Looking into the WAL via waldump given us the following picture (full
waldump output is attached):

tx: 1202295045, lsn: AAB1/D38378D0, prev AAB1/D3837208, desc: FPI , blkref
#0: rel 1663/16387/3569625749 blk 0 FPW
tx: 1202298790, lsn: AAB1/D3912EC0, prev AAB1/D3912E80, desc: NEW_CID rel
1663/16387/1259; tid 6/24; cmin: 0, cmax: 4294967295, combo: 4294967295
tx: 1202298790, lsn: AAB1/D3927580, prev AAB1/D3926988, desc: COMMIT
2023-10-04 22:41:23.863979 UTC
tx: 1202298791, lsn: AAB1/D393C230, prev AAB1/D393C1F0, desc: HOT_UPDATE
off 24 xmax 1202298791 flags 0x20 ; new off 45 xmax 0, blkref #0: rel
1663/16387/1259 blk 6
tx: 1202298791, lsn: AAB1/D394ADA0, prev AAB1/D394AD60, desc: UPDATE off 45
xmax 1202298791 flags 0x00 ; new off 28 xmax 0, blkref #0: rel
1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 6
tx: 1202298791, lsn: AAB1/D3961088, prev AAB1/D3961048, desc: NEW_CID rel
1663/16387/1259; tid 12/49; cmin: 50, cmax: 4294967295, combo: 4294967295
tx: 1202295045, lsn: AAB1/D3962E78, prev AAB1/D3962E28, desc: INPLACE off
24, blkref #0: rel 1663/16387/1259 blk 6
tx: 1202295045, lsn: AAB1/D39632A0, prev AAB1/D3963250, desc: COMMIT
2023-10-04 22:41:23.878565 UTC
tx: 1202298791, lsn: AAB1/D3973420, prev AAB1/D39733D0, desc: COMMIT
2023-10-04 22:41:23.884951 UTC

1202295045 - create index statement
1202298790 and 1202298791 are some other concurrent operations,
unfortunately I wasnt able to determine what are they

So looks like 1202295045, updated tuple (6,24) in pg_class INPLACE, in
which at this point xmax was already set by 1202298791 and new tuple in
(12,49) was in created.
So after 1202298791 was commited, that inplace update was effectively lost.
If we do an inclusive PITR with (recovery_target_xid = 1202295045), we can
see the following picture (notice relhasindex and xmax):

# select ctid,oid, xmin,xmax,relhasindex,cmin,cmax from pg_class where oid
= 3566558198;
-[ RECORD 1 ]-----------
ctid        | (6,24)
oid         | 3566558198
xmin        | 1202298790
xmax        | 1202298791
relhasindex | t
cmin        | 0
cmax        | 0

I've tried to reproduce this scenario with CREATE INDEX and various
concurrent statements, but no luck.
Attached full waldump output for the relevant WAL segment.

rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D3000598, prev AAB1/D2FFF458, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31130 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3003B50, prev AAB1/D3003028, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31131 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D3008350, prev AAB1/D3008310, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31132 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D3009F48, prev AAB1/D3009F08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31133 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D3010DB8, prev AAB1/D3010D78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31134 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D30159E8, prev AAB1/D30159A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31135 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D3016B08, prev AAB1/D30159E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31136 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D3019608, prev AAB1/D30195D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31137 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D301B3D0, prev AAB1/D301B398, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31138 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D301C4F8, prev AAB1/D301B3D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31139 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D301FEB0, prev AAB1/D301FE70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31140 FPW
rmgr: XLOG        len (rec/tot):     51/  4393, tx: 1202295045, lsn: AAB1/D3022E58, prev AAB1/D3022E18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31141 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D30279B8, prev AAB1/D3027978, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31142 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D302FD68, prev AAB1/D302FD28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31143 FPW
rmgr: XLOG        len (rec/tot):     51/  4398, tx: 1202295045, lsn: AAB1/D3033A28, prev AAB1/D30329E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31144 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D30369B0, prev AAB1/D3036978, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31145 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D303BA98, prev AAB1/D3039E58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31146 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D303EA48, prev AAB1/D303EA18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31147 FPW
rmgr: XLOG        len (rec/tot):     51/  4383, tx: 1202295045, lsn: AAB1/D303FB60, prev AAB1/D303EA48, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31148 FPW
rmgr: XLOG        len (rec/tot):     51/  4383, tx: 1202295045, lsn: AAB1/D3040C98, prev AAB1/D303FB60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31149 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D3041DB8, prev AAB1/D3040C98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31150 FPW
rmgr: XLOG        len (rec/tot):     51/  4392, tx: 1202295045, lsn: AAB1/D3046270, prev AAB1/D3044938, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31151 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D3047398, prev AAB1/D3046270, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31152 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D3048FD0, prev AAB1/D30484C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31153 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D304A100, prev AAB1/D3048FD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31154 FPW
rmgr: XLOG        len (rec/tot):     51/  4404, tx: 1202295045, lsn: AAB1/D304B230, prev AAB1/D304A100, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31155 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D304CDF0, prev AAB1/D304C380, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31156 FPW
rmgr: XLOG        len (rec/tot):     51/  4389, tx: 1202295045, lsn: AAB1/D304DEF8, prev AAB1/D304CDF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31157 FPW
rmgr: XLOG        len (rec/tot):     51/  4386, tx: 1202295045, lsn: AAB1/D304F038, prev AAB1/D304DEF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31158 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D3050178, prev AAB1/D304F038, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31159 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D3051288, prev AAB1/D3050178, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31160 FPW
rmgr: XLOG        len (rec/tot):     51/  4385, tx: 1202295045, lsn: AAB1/D3053E10, prev AAB1/D3053DD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31161 FPW
rmgr: XLOG        len (rec/tot):     51/  4394, tx: 1202295045, lsn: AAB1/D305A670, prev AAB1/D305A630, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31162 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D305F1F0, prev AAB1/D305F1B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31163 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D3060320, prev AAB1/D305F1F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31164 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D3061440, prev AAB1/D3060320, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31165 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D3062570, prev AAB1/D3061440, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31166 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D3063680, prev AAB1/D3062570, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31167 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D30647A0, prev AAB1/D3063680, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31168 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D30658B8, prev AAB1/D30647A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31169 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D30669C8, prev AAB1/D30658B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31170 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D3067AC8, prev AAB1/D30669C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31171 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D3068BE8, prev AAB1/D3067AC8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31172 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D3069CE0, prev AAB1/D3068BE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31173 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D306ADF0, prev AAB1/D3069CE0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31174 FPW
rmgr: XLOG        len (rec/tot):     51/  4328, tx: 1202295045, lsn: AAB1/D306BEE8, prev AAB1/D306ADF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31175 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D306CFE8, prev AAB1/D306BEE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31176 FPW
rmgr: XLOG        len (rec/tot):     51/  4324, tx: 1202295045, lsn: AAB1/D306E0F8, prev AAB1/D306CFE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31177 FPW
rmgr: XLOG        len (rec/tot):     51/  4307, tx: 1202295045, lsn: AAB1/D306F1E0, prev AAB1/D306E0F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31178 FPW
rmgr: XLOG        len (rec/tot):     51/  4309, tx: 1202295045, lsn: AAB1/D30702D0, prev AAB1/D306F1E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31179 FPW
rmgr: XLOG        len (rec/tot):     51/  4313, tx: 1202295045, lsn: AAB1/D3071EA8, prev AAB1/D30713A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31180 FPW
rmgr: XLOG        len (rec/tot):     51/  4343, tx: 1202295045, lsn: AAB1/D3072FA0, prev AAB1/D3071EA8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31181 FPW
rmgr: XLOG        len (rec/tot):     51/  4300, tx: 1202295045, lsn: AAB1/D3079230, prev AAB1/D30791F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31182 FPW
rmgr: XLOG        len (rec/tot):     51/  4337, tx: 1202295045, lsn: AAB1/D30804E8, prev AAB1/D30804A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31183 FPW
rmgr: XLOG        len (rec/tot):     51/  4321, tx: 1202295045, lsn: AAB1/D30815E0, prev AAB1/D30804E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31184 FPW
rmgr: XLOG        len (rec/tot):     51/  4319, tx: 1202295045, lsn: AAB1/D3083210, prev AAB1/D30826E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31185 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D3084308, prev AAB1/D3083210, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31186 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D3088CD0, prev AAB1/D3088C90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31187 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D3089DC0, prev AAB1/D3088CD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31188 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D308B9C0, prev AAB1/D308AED8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31189 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D308CAE8, prev AAB1/D308B9C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31190 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D308E6C0, prev AAB1/D308DBF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31191 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D308F7C8, prev AAB1/D308E6C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31192 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D30908F0, prev AAB1/D308F7C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31193 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D30919F0, prev AAB1/D30908F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31194 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D3092B10, prev AAB1/D30919F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31195 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D3093C08, prev AAB1/D3092B10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31196 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D3094D28, prev AAB1/D3093C08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31197 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3095E28, prev AAB1/D3094D28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31198 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D3096F60, prev AAB1/D3095E28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31199 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D30980E8, prev AAB1/D30980B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31200 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D309B258, prev AAB1/D309B218, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31201 FPW
rmgr: XLOG        len (rec/tot):     51/  4323, tx: 1202295045, lsn: AAB1/D30A4370, prev AAB1/D30A4330, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31202 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D30AAD28, prev AAB1/D30AACE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31203 FPW
rmgr: XLOG        len (rec/tot):     51/  4311, tx: 1202295045, lsn: AAB1/D30ABE20, prev AAB1/D30AAD28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31204 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D30B2F20, prev AAB1/D30B2EE0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31205 FPW
rmgr: XLOG        len (rec/tot):     51/  4312, tx: 1202295045, lsn: AAB1/D30B5FB0, prev AAB1/D30B5ED8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31206 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D30B70A0, prev AAB1/D30B5FB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31207 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D30B8C48, prev AAB1/D30B8C10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31208 FPW
rmgr: XLOG        len (rec/tot):     51/  4320, tx: 1202295045, lsn: AAB1/D30BC5A8, prev AAB1/D30BC568, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31209 FPW
rmgr: XLOG        len (rec/tot):     51/  4314, tx: 1202295045, lsn: AAB1/D30BF970, prev AAB1/D30BD688, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31210 FPW
rmgr: XLOG        len (rec/tot):     51/  4330, tx: 1202295045, lsn: AAB1/D30C2B40, prev AAB1/D30C2B00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31211 FPW
rmgr: XLOG        len (rec/tot):     51/  4328, tx: 1202295045, lsn: AAB1/D30C4708, prev AAB1/D30C3C30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31212 FPW
rmgr: XLOG        len (rec/tot):     51/  4308, tx: 1202295045, lsn: AAB1/D30C6888, prev AAB1/D30C6850, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31213 FPW
rmgr: XLOG        len (rec/tot):     51/  4323, tx: 1202295045, lsn: AAB1/D30C99D0, prev AAB1/D30C9998, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31214 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D30CAAD0, prev AAB1/D30C99D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31215 FPW
rmgr: XLOG        len (rec/tot):     51/  4323, tx: 1202295045, lsn: AAB1/D30CDF90, prev AAB1/D30CDF18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31216 FPW
rmgr: XLOG        len (rec/tot):     51/  4327, tx: 1202295045, lsn: AAB1/D30CF0C0, prev AAB1/D30CF090, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31217 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D30D0BE8, prev AAB1/D30D01C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31218 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D30D1CF0, prev AAB1/D30D0BE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31219 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D30D2E08, prev AAB1/D30D1CF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31220 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D30D5A68, prev AAB1/D30D5A28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31221 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D30DC2E8, prev AAB1/D30DC2A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31222 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D30E2CF8, prev AAB1/D30E2CB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31223 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D30E3DF8, prev AAB1/D30E2CF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31224 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D30E4F18, prev AAB1/D30E3DF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31225 FPW
rmgr: XLOG        len (rec/tot):     51/  4348, tx: 1202295045, lsn: AAB1/D30E6030, prev AAB1/D30E4F18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31226 FPW
rmgr: XLOG        len (rec/tot):     51/  4336, tx: 1202295045, lsn: AAB1/D30E7130, prev AAB1/D30E6030, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31227 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D30EA298, prev AAB1/D30EA258, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31228 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D30EB3A8, prev AAB1/D30EA298, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31229 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D30EC4E0, prev AAB1/D30EB3A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31230 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D30ED5F0, prev AAB1/D30EC4E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31231 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D30EE720, prev AAB1/D30ED5F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31232 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D30EF840, prev AAB1/D30EE720, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31233 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D30F0970, prev AAB1/D30EF840, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31234 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D30F1A90, prev AAB1/D30F0970, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31235 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D30F2BB0, prev AAB1/D30F1A90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31236 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D30F3CB8, prev AAB1/D30F2BB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31237 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D30F4DD0, prev AAB1/D30F3CB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31238 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D30F5ED8, prev AAB1/D30F4DD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31239 FPW
rmgr: XLOG        len (rec/tot):     51/  4347, tx: 1202295045, lsn: AAB1/D30F7000, prev AAB1/D30F5ED8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31240 FPW
rmgr: XLOG        len (rec/tot):     51/  4326, tx: 1202295045, lsn: AAB1/D30FCC58, prev AAB1/D30FC0E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31241 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D31013B0, prev AAB1/D3101370, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31242 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D31024C8, prev AAB1/D31013B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31243 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D31035D0, prev AAB1/D31024C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31244 FPW
rmgr: XLOG        len (rec/tot):     51/  4302, tx: 1202295045, lsn: AAB1/D3105038, prev AAB1/D31046D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31245 FPW
rmgr: XLOG        len (rec/tot):     51/  4326, tx: 1202295045, lsn: AAB1/D3106120, prev AAB1/D3105038, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31246 FPW
rmgr: XLOG        len (rec/tot):     51/  4321, tx: 1202295045, lsn: AAB1/D310AAC0, prev AAB1/D310AA80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31247 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D310FC18, prev AAB1/D310FBD8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31248 FPW
rmgr: XLOG        len (rec/tot):     51/  4328, tx: 1202295045, lsn: AAB1/D3114B00, prev AAB1/D3114AC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31249 FPW
rmgr: XLOG        len (rec/tot):     51/  4305, tx: 1202295045, lsn: AAB1/D3115BE8, prev AAB1/D3114B00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31250 FPW
rmgr: XLOG        len (rec/tot):     51/  4306, tx: 1202295045, lsn: AAB1/D3116CD8, prev AAB1/D3115BE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31251 FPW
rmgr: XLOG        len (rec/tot):     51/  4328, tx: 1202295045, lsn: AAB1/D3117DB0, prev AAB1/D3116CD8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31252 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D3118EB0, prev AAB1/D3117DB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31253 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D3119FA0, prev AAB1/D3118EB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31254 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D311B0B0, prev AAB1/D3119FA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31255 FPW
rmgr: XLOG        len (rec/tot):     51/  4336, tx: 1202295045, lsn: AAB1/D311C1B8, prev AAB1/D311B0B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31256 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D311D2A8, prev AAB1/D311C1B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31257 FPW
rmgr: XLOG        len (rec/tot):     51/  4326, tx: 1202295045, lsn: AAB1/D311E3B0, prev AAB1/D311D2A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31258 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D31212B8, prev AAB1/D3121278, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31259 FPW
rmgr: XLOG        len (rec/tot):     51/  4313, tx: 1202295045, lsn: AAB1/D31223B8, prev AAB1/D31212B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31260 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D3123498, prev AAB1/D31223B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31261 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D3124598, prev AAB1/D3123498, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31262 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D31256A0, prev AAB1/D3124598, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31263 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D31267D0, prev AAB1/D31256A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31264 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D3128388, prev AAB1/D31278D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31265 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D3129480, prev AAB1/D3128388, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31266 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D312A5B0, prev AAB1/D3129480, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31267 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D312F6C8, prev AAB1/D312F688, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31268 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D3134310, prev AAB1/D31342D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31269 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D3138FE0, prev AAB1/D3138FA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31270 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D313A108, prev AAB1/D3138FE0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31271 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D313B210, prev AAB1/D313A108, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31272 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D313C330, prev AAB1/D313B210, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31273 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D313D450, prev AAB1/D313C330, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31274 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D313E570, prev AAB1/D313D450, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31275 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D3141068, prev AAB1/D3141028, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31276 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D31480F8, prev AAB1/D31460D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31277 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D314AEA0, prev AAB1/D314AE60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31278 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D314BFC0, prev AAB1/D314AEA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31279 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D314D0D8, prev AAB1/D314BFC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31280 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D314E208, prev AAB1/D314D0D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31281 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D314F320, prev AAB1/D314E208, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31282 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D3150440, prev AAB1/D314F320, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31283 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D3151538, prev AAB1/D3150440, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31284 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D3153050, prev AAB1/D3152650, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31285 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D3154170, prev AAB1/D3153050, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31286 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3155278, prev AAB1/D3154170, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31287 FPW
rmgr: XLOG        len (rec/tot):     51/  4330, tx: 1202295045, lsn: AAB1/D31563A0, prev AAB1/D3155278, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31288 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D31594E0, prev AAB1/D31594A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31289 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D315E4B8, prev AAB1/D315E478, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31290 FPW
rmgr: XLOG        len (rec/tot):     51/  4324, tx: 1202295045, lsn: AAB1/D3165458, prev AAB1/D3165418, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31291 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D3166558, prev AAB1/D3165458, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31292 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D3167650, prev AAB1/D3166558, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31293 FPW
rmgr: XLOG        len (rec/tot):     51/  4314, tx: 1202295045, lsn: AAB1/D3168750, prev AAB1/D3167650, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31294 FPW
rmgr: XLOG        len (rec/tot):     51/  4301, tx: 1202295045, lsn: AAB1/D3169830, prev AAB1/D3168750, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31295 FPW
rmgr: XLOG        len (rec/tot):     51/  4316, tx: 1202295045, lsn: AAB1/D316A918, prev AAB1/D3169830, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31296 FPW
rmgr: XLOG        len (rec/tot):     51/  4324, tx: 1202295045, lsn: AAB1/D316F800, prev AAB1/D316F7C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31297 FPW
rmgr: XLOG        len (rec/tot):     51/  4321, tx: 1202295045, lsn: AAB1/D3172560, prev AAB1/D3172520, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31298 FPW
rmgr: XLOG        len (rec/tot):     51/  4319, tx: 1202295045, lsn: AAB1/D3173648, prev AAB1/D3172560, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31299 FPW
rmgr: XLOG        len (rec/tot):     51/  4324, tx: 1202295045, lsn: AAB1/D3174740, prev AAB1/D3173648, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31300 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D3175828, prev AAB1/D3174740, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31301 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D3176930, prev AAB1/D3175828, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31302 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D3177A30, prev AAB1/D3176930, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31303 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D3179570, prev AAB1/D3178B40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31304 FPW
rmgr: XLOG        len (rec/tot):     51/  4332, tx: 1202295045, lsn: AAB1/D317A680, prev AAB1/D3179570, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31305 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D317B770, prev AAB1/D317A680, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31306 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D317C890, prev AAB1/D317B770, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31307 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D317D980, prev AAB1/D317C890, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31308 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D3182448, prev AAB1/D3182408, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31309 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3188CA0, prev AAB1/D3188C60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31310 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D318BA90, prev AAB1/D318BA50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31311 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D318CBB8, prev AAB1/D318BA90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31312 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D318DCB0, prev AAB1/D318CBB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31313 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D3190AA0, prev AAB1/D3190A60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31314 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D3191BA8, prev AAB1/D3190AA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31315 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D3192CB0, prev AAB1/D3191BA8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31316 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D3193DB0, prev AAB1/D3192CB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31317 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D31956B8, prev AAB1/D3195678, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31318 FPW
rmgr: XLOG        len (rec/tot):     51/  4330, tx: 1202295045, lsn: AAB1/D31967E8, prev AAB1/D31956B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31319 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D3198388, prev AAB1/D3198348, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31320 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D3199488, prev AAB1/D3198388, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31321 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D319A598, prev AAB1/D3199488, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31322 FPW
rmgr: XLOG        len (rec/tot):     51/  4323, tx: 1202295045, lsn: AAB1/D319C0B8, prev AAB1/D319C078, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31323 FPW
rmgr: XLOG        len (rec/tot):     51/  4305, tx: 1202295045, lsn: AAB1/D31A10C0, prev AAB1/D31A1088, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31324 FPW
rmgr: XLOG        len (rec/tot):     51/  4314, tx: 1202295045, lsn: AAB1/D31A21B0, prev AAB1/D31A10C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31325 FPW
rmgr: XLOG        len (rec/tot):     51/  4295, tx: 1202295045, lsn: AAB1/D31A3CA0, prev AAB1/D31A3C60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31326 FPW
rmgr: XLOG        len (rec/tot):     51/  4293, tx: 1202295045, lsn: AAB1/D31A4D80, prev AAB1/D31A3CA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31327 FPW
rmgr: XLOG        len (rec/tot):     51/  4314, tx: 1202295045, lsn: AAB1/D31A96A0, prev AAB1/D31A9660, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31328 FPW
rmgr: XLOG        len (rec/tot):     51/  4320, tx: 1202295045, lsn: AAB1/D31B1A38, prev AAB1/D31B0FF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31329 FPW
rmgr: XLOG        len (rec/tot):     51/  4307, tx: 1202295045, lsn: AAB1/D31B5290, prev AAB1/D31B5250, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31330 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D31B7900, prev AAB1/D31B6F28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31331 FPW
rmgr: XLOG        len (rec/tot):     51/  4336, tx: 1202295045, lsn: AAB1/D31B8A08, prev AAB1/D31B7900, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31332 FPW
rmgr: XLOG        len (rec/tot):     51/  4313, tx: 1202295045, lsn: AAB1/D31BB9F0, prev AAB1/D31BB9B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31333 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D31BD598, prev AAB1/D31BCAE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31334 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D31BF120, prev AAB1/D31BF0E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31335 FPW
rmgr: XLOG        len (rec/tot):     51/  4347, tx: 1202295045, lsn: AAB1/D31C0248, prev AAB1/D31BF120, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31336 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D31C1348, prev AAB1/D31C0248, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31337 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D31C2478, prev AAB1/D31C1348, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31338 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D31C4848, prev AAB1/D31C3F58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31339 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D31C6480, prev AAB1/D31C5968, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31340 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D31CA970, prev AAB1/D31C9F60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31341 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D31CE438, prev AAB1/D31CE3F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31342 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D31CFF08, prev AAB1/D31CF550, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31343 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D31D1040, prev AAB1/D31CFF08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31344 FPW
rmgr: XLOG        len (rec/tot):     51/  4385, tx: 1202295045, lsn: AAB1/D31D3810, prev AAB1/D31D37D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31345 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D31D4950, prev AAB1/D31D3810, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31346 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D31D9F60, prev AAB1/D31D9F20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31347 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D31DEAD8, prev AAB1/D31DEA98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31348 FPW
rmgr: XLOG        len (rec/tot):     51/  4383, tx: 1202295045, lsn: AAB1/D31E3600, prev AAB1/D31E35C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31349 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D31E50F8, prev AAB1/D31E4738, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31350 FPW
rmgr: XLOG        len (rec/tot):     51/  4394, tx: 1202295045, lsn: AAB1/D31E6CD0, prev AAB1/D31E6C90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31351 FPW
rmgr: XLOG        len (rec/tot):     51/  4407, tx: 1202295045, lsn: AAB1/D31E7E00, prev AAB1/D31E6CD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31352 FPW
rmgr: XLOG        len (rec/tot):     51/  3510, tx: 1202295045, lsn: AAB1/D31E8F50, prev AAB1/D31E7E00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31070 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D31E9D08, prev AAB1/D31E8F50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31353 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D31EAE48, prev AAB1/D31E9D08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31354 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D31EBF60, prev AAB1/D31EAE48, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31356 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D31EF0C0, prev AAB1/D31ED088, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31357 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D31F4630, prev AAB1/D31F45F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31358 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D31F5748, prev AAB1/D31F4630, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31359 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D31F6878, prev AAB1/D31F5748, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31360 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D31F7998, prev AAB1/D31F6878, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31361 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D31F8AB8, prev AAB1/D31F7998, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31362 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D31F9BC0, prev AAB1/D31F8AB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31363 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D31FB808, prev AAB1/D31FACE0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31364 FPW
rmgr: XLOG        len (rec/tot):     51/  4374, tx: 1202295045, lsn: AAB1/D32003C0, prev AAB1/D3200380, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31365 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D3206C90, prev AAB1/D3206C50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31366 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D3209D00, prev AAB1/D3209CC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31367 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D320AE28, prev AAB1/D3209D00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31368 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D320BF28, prev AAB1/D320AE28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31369 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D320D048, prev AAB1/D320BF28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31370 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D320E158, prev AAB1/D320D048, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31371 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D320F248, prev AAB1/D320E158, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31372 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D3210350, prev AAB1/D320F248, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31373 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D3213250, prev AAB1/D3213210, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31374 FPW
rmgr: XLOG        len (rec/tot):     51/  4339, tx: 1202295045, lsn: AAB1/D3214360, prev AAB1/D3213250, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31375 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D3215458, prev AAB1/D3214360, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31376 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D3216560, prev AAB1/D3215458, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31377 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D32180A0, prev AAB1/D3218060, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31378 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D32191B0, prev AAB1/D32180A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31379 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D321AC80, prev AAB1/D321A2C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31380 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D321BD88, prev AAB1/D321AC80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31381 FPW
rmgr: XLOG        len (rec/tot):     51/  4347, tx: 1202295045, lsn: AAB1/D321D878, prev AAB1/D321D838, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31382 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D321F438, prev AAB1/D321E990, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31383 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D32261C0, prev AAB1/D3226180, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31384 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D322C348, prev AAB1/D322C308, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31385 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D322D450, prev AAB1/D322C348, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31386 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D322E578, prev AAB1/D322D450, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31387 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D3230A90, prev AAB1/D322FFA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31388 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D3232478, prev AAB1/D3231B98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31389 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3236FA0, prev AAB1/D3236F60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31390 FPW
rmgr: XLOG        len (rec/tot):     51/  4336, tx: 1202295045, lsn: AAB1/D32380C8, prev AAB1/D3236FA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31391 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D32391B8, prev AAB1/D32380C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31392 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D323AE40, prev AAB1/D323A2D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31393 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D323BF40, prev AAB1/D323AE40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31394 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D323D950, prev AAB1/D323D918, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31395 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D323EA60, prev AAB1/D323D950, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31396 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D323FB58, prev AAB1/D323EA60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31397 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D32417A8, prev AAB1/D3241768, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31398 FPW
rmgr: XLOG        len (rec/tot):     51/  4327, tx: 1202295045, lsn: AAB1/D32428B0, prev AAB1/D32417A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31399 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D3243998, prev AAB1/D32428B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31400 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3248458, prev AAB1/D3248418, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31401 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D324D240, prev AAB1/D324D200, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31402 FPW
rmgr: XLOG        len (rec/tot):     51/  4311, tx: 1202295045, lsn: AAB1/D3252070, prev AAB1/D3252030, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31403 FPW
rmgr: XLOG        len (rec/tot):     51/  4322, tx: 1202295045, lsn: AAB1/D3255178, prev AAB1/D3253148, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31404 FPW
rmgr: XLOG        len (rec/tot):     51/  4334, tx: 1202295045, lsn: AAB1/D3259F18, prev AAB1/D3259ED8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31405 FPW
rmgr: XLOG        len (rec/tot):     51/  4295, tx: 1202295045, lsn: AAB1/D325CF08, prev AAB1/D325B020, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31406 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D325EA68, prev AAB1/D325DFD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31407 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D325FB50, prev AAB1/D325EA68, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31408 FPW
rmgr: XLOG        len (rec/tot):     51/  4308, tx: 1202295045, lsn: AAB1/D3260C58, prev AAB1/D325FB50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31409 FPW
rmgr: XLOG        len (rec/tot):     51/  4316, tx: 1202295045, lsn: AAB1/D32627B0, prev AAB1/D3261D30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31410 FPW
rmgr: XLOG        len (rec/tot):     51/  4323, tx: 1202295045, lsn: AAB1/D3263890, prev AAB1/D32627B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31411 FPW
rmgr: XLOG        len (rec/tot):     51/  4321, tx: 1202295045, lsn: AAB1/D3264990, prev AAB1/D3263890, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31412 FPW
rmgr: XLOG        len (rec/tot):     51/  4304, tx: 1202295045, lsn: AAB1/D3265A78, prev AAB1/D3264990, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31413 FPW
rmgr: XLOG        len (rec/tot):     51/  4312, tx: 1202295045, lsn: AAB1/D3267698, prev AAB1/D3266B60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31414 FPW
rmgr: XLOG        len (rec/tot):     51/  4324, tx: 1202295045, lsn: AAB1/D3268788, prev AAB1/D3267698, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31415 FPW
rmgr: XLOG        len (rec/tot):     51/  4330, tx: 1202295045, lsn: AAB1/D3269870, prev AAB1/D3268788, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31416 FPW
rmgr: XLOG        len (rec/tot):     51/  4314, tx: 1202295045, lsn: AAB1/D326A978, prev AAB1/D3269870, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31417 FPW
rmgr: XLOG        len (rec/tot):     51/  4332, tx: 1202295045, lsn: AAB1/D326F8D8, prev AAB1/D326F898, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31418 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D3274908, prev AAB1/D32748C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31419 FPW
rmgr: XLOG        len (rec/tot):     51/  4334, tx: 1202295045, lsn: AAB1/D3279598, prev AAB1/D3279558, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31420 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D327A6A0, prev AAB1/D3279598, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31421 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D327F2C8, prev AAB1/D327D4A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31422 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D32803D8, prev AAB1/D327F2C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31423 FPW
rmgr: XLOG        len (rec/tot):     51/  4348, tx: 1202295045, lsn: AAB1/D32814F0, prev AAB1/D32803D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31424 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D3282608, prev AAB1/D32814F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31425 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D3283718, prev AAB1/D3282608, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31426 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D3284900, prev AAB1/D3284888, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31427 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D3285A30, prev AAB1/D3285A00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31428 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D3286C28, prev AAB1/D3286BF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31429 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D3287D40, prev AAB1/D3286C28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31430 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D3288E60, prev AAB1/D3287D40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31431 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D3289F68, prev AAB1/D3288E60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31432 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D328B090, prev AAB1/D3289F68, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31433 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D328C1C0, prev AAB1/D328B090, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31434 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D328D2B8, prev AAB1/D328C1C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31435 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D328EF78, prev AAB1/D328E3E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31436 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D3293CC8, prev AAB1/D3293C88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31437 FPW
rmgr: XLOG        len (rec/tot):     51/  4337, tx: 1202295045, lsn: AAB1/D329ACD0, prev AAB1/D329AC90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31438 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D329DBF8, prev AAB1/D329DBB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31439 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D329F860, prev AAB1/D329ED30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31440 FPW
rmgr: XLOG        len (rec/tot):     51/  4347, tx: 1202295045, lsn: AAB1/D32A0980, prev AAB1/D329F860, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31441 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D32A1A80, prev AAB1/D32A0980, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31442 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D32A4C10, prev AAB1/D32A4BD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31443 FPW
rmgr: XLOG        len (rec/tot):     51/  4327, tx: 1202295045, lsn: AAB1/D32A7CA0, prev AAB1/D32A7C60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31444 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D32A8DA0, prev AAB1/D32A7CA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31445 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D32AAA00, prev AAB1/D32AA9C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31446 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D32ABB00, prev AAB1/D32AAA00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31447 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D32ACC18, prev AAB1/D32ABB00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31448 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D32ADD10, prev AAB1/D32ACC18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31449 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D32AEE38, prev AAB1/D32ADD10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31450 FPW
rmgr: XLOG        len (rec/tot):     51/  4347, tx: 1202295045, lsn: AAB1/D32AFF48, prev AAB1/D32AEE38, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31451 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D32B1060, prev AAB1/D32AFF48, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31452 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D32B2180, prev AAB1/D32B1060, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31453 FPW
rmgr: XLOG        len (rec/tot):     51/  4399, tx: 1202295045, lsn: AAB1/D32B3C98, prev AAB1/D32B3298, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31454 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D32B8A38, prev AAB1/D32B89F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31455 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D32BECF0, prev AAB1/D32BECB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31456 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D32C1B80, prev AAB1/D32C1B40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31457 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D32C2CB0, prev AAB1/D32C1B80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31458 FPW
rmgr: XLOG        len (rec/tot):     51/  4394, tx: 1202295045, lsn: AAB1/D32C8E30, prev AAB1/D32C8DF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31459 FPW
rmgr: XLOG        len (rec/tot):     51/  4389, tx: 1202295045, lsn: AAB1/D32CAA48, prev AAB1/D32C9F60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31460 FPW
rmgr: XLOG        len (rec/tot):     51/  4399, tx: 1202295045, lsn: AAB1/D32CC578, prev AAB1/D32CC538, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31461 FPW
rmgr: XLOG        len (rec/tot):     51/  4385, tx: 1202295045, lsn: AAB1/D32CD6A8, prev AAB1/D32CC578, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31462 FPW
rmgr: XLOG        len (rec/tot):     51/  4413, tx: 1202295045, lsn: AAB1/D32CE7E8, prev AAB1/D32CD6A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31463 FPW
rmgr: XLOG        len (rec/tot):     51/  4405, tx: 1202295045, lsn: AAB1/D32CF928, prev AAB1/D32CE7E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31464 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D32D0A78, prev AAB1/D32CF928, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31465 FPW
rmgr: XLOG        len (rec/tot):     51/  4403, tx: 1202295045, lsn: AAB1/D32D1BA0, prev AAB1/D32D0A78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31466 FPW
rmgr: XLOG        len (rec/tot):     51/  4395, tx: 1202295045, lsn: AAB1/D32D2CF0, prev AAB1/D32D1BA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31467 FPW
rmgr: XLOG        len (rec/tot):     51/  4407, tx: 1202295045, lsn: AAB1/D32D3E20, prev AAB1/D32D2CF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31468 FPW
rmgr: XLOG        len (rec/tot):     51/  4398, tx: 1202295045, lsn: AAB1/D32D4F70, prev AAB1/D32D3E20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31469 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D32D60B8, prev AAB1/D32D4F70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31470 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D32D71E0, prev AAB1/D32D60B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31471 FPW
rmgr: XLOG        len (rec/tot):     51/  4403, tx: 1202295045, lsn: AAB1/D32D8318, prev AAB1/D32D71E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31472 FPW
rmgr: XLOG        len (rec/tot):     51/  4428, tx: 1202295045, lsn: AAB1/D32DCF78, prev AAB1/D32DCF38, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31473 FPW
rmgr: XLOG        len (rec/tot):     51/  4401, tx: 1202295045, lsn: AAB1/D32E3D20, prev AAB1/D32E3CE0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31474 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D32E6EB0, prev AAB1/D32E6E70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31475 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D32EBAB8, prev AAB1/D32E9D30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31476 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D32EE568, prev AAB1/D32ECC00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31477 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D32EF688, prev AAB1/D32EE568, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31478 FPW
rmgr: XLOG        len (rec/tot):     51/  4406, tx: 1202295045, lsn: AAB1/D32F12C8, prev AAB1/D32F07C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31479 FPW
rmgr: XLOG        len (rec/tot):     51/  4399, tx: 1202295045, lsn: AAB1/D32F2418, prev AAB1/D32F12C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31480 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D32F3548, prev AAB1/D32F2418, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31481 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D32F4670, prev AAB1/D32F3548, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31482 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D32F5788, prev AAB1/D32F4670, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31483 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D32F68D0, prev AAB1/D32F5788, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31484 FPW
rmgr: XLOG        len (rec/tot):     51/  4404, tx: 1202295045, lsn: AAB1/D32F79E0, prev AAB1/D32F68D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31485 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D32F8B30, prev AAB1/D32F79E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31486 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D32F9C40, prev AAB1/D32F8B30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31487 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D32FAD78, prev AAB1/D32F9C40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31488 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D32FBE98, prev AAB1/D32FAD78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31489 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D32FCFC0, prev AAB1/D32FBE98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31490 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D32FE0E0, prev AAB1/D32FCFC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31491 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D3301028, prev AAB1/D32FF1D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31492 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D3303EA0, prev AAB1/D3303E60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31493 FPW
rmgr: XLOG        len (rec/tot):     51/  4337, tx: 1202295045, lsn: AAB1/D3308C58, prev AAB1/D3308C18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31494 FPW
rmgr: XLOG        len (rec/tot):     51/  4317, tx: 1202295045, lsn: AAB1/D330F8B8, prev AAB1/D330F878, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31495 FPW
rmgr: XLOG        len (rec/tot):     51/  4330, tx: 1202295045, lsn: AAB1/D33109B0, prev AAB1/D330F8B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31496 FPW
rmgr: XLOG        len (rec/tot):     51/  4322, tx: 1202295045, lsn: AAB1/D3311AA0, prev AAB1/D33109B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31497 FPW
rmgr: XLOG        len (rec/tot):     51/  4337, tx: 1202295045, lsn: AAB1/D3313610, prev AAB1/D3312BA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31498 FPW
rmgr: XLOG        len (rec/tot):     51/  4314, tx: 1202295045, lsn: AAB1/D3315008, prev AAB1/D3314F88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31499 FPW
rmgr: XLOG        len (rec/tot):     51/  4328, tx: 1202295045, lsn: AAB1/D3316100, prev AAB1/D3315008, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31500 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D3318D90, prev AAB1/D3318D60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31501 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D3319E90, prev AAB1/D3318D90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31502 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D331AFA0, prev AAB1/D3319E90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31503 FPW
rmgr: XLOG        len (rec/tot):     51/  4390, tx: 1202295045, lsn: AAB1/D331C0C0, prev AAB1/D331AFA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31504 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D331D1E8, prev AAB1/D331C0C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31505 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D331E300, prev AAB1/D331D1E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31506 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D331F3F8, prev AAB1/D331E300, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31507 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3320518, prev AAB1/D331F3F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31508 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D3321628, prev AAB1/D3320518, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31509 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D33245D8, prev AAB1/D3324598, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31510 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D33274E8, prev AAB1/D33274B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31511 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D332E138, prev AAB1/D332E0F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31512 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D3335B58, prev AAB1/D3335AE0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31513 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D3337698, prev AAB1/D3337618, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31514 FPW
rmgr: XLOG        len (rec/tot):     51/  4347, tx: 1202295045, lsn: AAB1/D3339538, prev AAB1/D3339500, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31515 FPW
rmgr: XLOG        len (rec/tot):     51/  4323, tx: 1202295045, lsn: AAB1/D333A6F8, prev AAB1/D333A6C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31516 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D333B7E0, prev AAB1/D333A6F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31517 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D333C900, prev AAB1/D333B7E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31518 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D333DA18, prev AAB1/D333C900, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31519 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D333EB40, prev AAB1/D333DA18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31520 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D333FC58, prev AAB1/D333EB40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31521 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D3340D88, prev AAB1/D333FC58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31522 FPW
rmgr: XLOG        len (rec/tot):     51/  4330, tx: 1202295045, lsn: AAB1/D3341E90, prev AAB1/D3340D88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31523 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3342F98, prev AAB1/D3341E90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31524 FPW
rmgr: XLOG        len (rec/tot):     51/  4348, tx: 1202295045, lsn: AAB1/D3347A98, prev AAB1/D3347A58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31525 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D3348BB0, prev AAB1/D3347A98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31526 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D3349CB8, prev AAB1/D3348BB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31527 FPW
rmgr: XLOG        len (rec/tot):     51/  4339, tx: 1202295045, lsn: AAB1/D334ADD8, prev AAB1/D3349CB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31528 FPW
rmgr: XLOG        len (rec/tot):     51/  4343, tx: 1202295045, lsn: AAB1/D334DF00, prev AAB1/D334DEC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31529 FPW
rmgr: XLOG        len (rec/tot):     51/  4309, tx: 1202295045, lsn: AAB1/D3352EB8, prev AAB1/D3352E78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31530 FPW
rmgr: XLOG        len (rec/tot):     51/  4332, tx: 1202295045, lsn: AAB1/D3357FF8, prev AAB1/D3357FB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31531 FPW
rmgr: XLOG        len (rec/tot):     51/  4348, tx: 1202295045, lsn: AAB1/D335B098, prev AAB1/D335B058, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31532 FPW
rmgr: XLOG        len (rec/tot):     51/  4332, tx: 1202295045, lsn: AAB1/D335C1B0, prev AAB1/D335B098, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31533 FPW
rmgr: XLOG        len (rec/tot):     51/  4322, tx: 1202295045, lsn: AAB1/D335D2A0, prev AAB1/D335C1B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31534 FPW
rmgr: XLOG        len (rec/tot):     51/  4307, tx: 1202295045, lsn: AAB1/D335E3A0, prev AAB1/D335D2A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31535 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D335F478, prev AAB1/D335E3A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31536 FPW
rmgr: XLOG        len (rec/tot):     51/  4327, tx: 1202295045, lsn: AAB1/D3360580, prev AAB1/D335F478, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31537 FPW
rmgr: XLOG        len (rec/tot):     51/  4320, tx: 1202295045, lsn: AAB1/D3361748, prev AAB1/D3361718, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31538 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D3362840, prev AAB1/D3361748, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31539 FPW
rmgr: XLOG        len (rec/tot):     51/  4322, tx: 1202295045, lsn: AAB1/D3363950, prev AAB1/D3362840, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31540 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D33665A8, prev AAB1/D3366568, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31541 FPW
rmgr: XLOG        len (rec/tot):     51/  4327, tx: 1202295045, lsn: AAB1/D336CD48, prev AAB1/D336CD10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31542 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D336DE30, prev AAB1/D336CD48, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31543 FPW
rmgr: XLOG        len (rec/tot):     51/  4348, tx: 1202295045, lsn: AAB1/D336EF48, prev AAB1/D336DE30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31544 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D3370060, prev AAB1/D336EF48, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31545 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D3371168, prev AAB1/D3370060, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31546 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D3375C60, prev AAB1/D3375C20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31547 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D337C8E0, prev AAB1/D337C8A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31548 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D337F770, prev AAB1/D337F730, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31549 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D33808A8, prev AAB1/D337F770, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31550 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D33824F8, prev AAB1/D33819C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31551 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D3383608, prev AAB1/D33824F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31552 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D3384730, prev AAB1/D3383608, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31553 FPW
rmgr: XLOG        len (rec/tot):     51/  4374, tx: 1202295045, lsn: AAB1/D3385860, prev AAB1/D3384730, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31554 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3386990, prev AAB1/D3385860, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31555 FPW
rmgr: XLOG        len (rec/tot):     51/  4394, tx: 1202295045, lsn: AAB1/D3387AB0, prev AAB1/D3386990, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31556 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D3388BF8, prev AAB1/D3387AB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31557 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D338C828, prev AAB1/D338B7C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31558 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D338FC98, prev AAB1/D338F298, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31559 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D3390DC8, prev AAB1/D338FC98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31560 FPW
rmgr: XLOG        len (rec/tot):     51/  4386, tx: 1202295045, lsn: AAB1/D3391EE0, prev AAB1/D3390DC8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31561 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D3393020, prev AAB1/D3391EE0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31562 FPW
rmgr: XLOG        len (rec/tot):     51/  4392, tx: 1202295045, lsn: AAB1/D3397D08, prev AAB1/D3397CC8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31563 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D339ECF0, prev AAB1/D339ECB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31564 FPW
rmgr: XLOG        len (rec/tot):     51/  4391, tx: 1202295045, lsn: AAB1/D33A1CE8, prev AAB1/D33A1CA8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31565 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D33A2E28, prev AAB1/D33A1CE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31566 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D33A3FB0, prev AAB1/D33A3F40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31567 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D33A5E70, prev AAB1/D33A5E40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31568 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D33A6F88, prev AAB1/D33A5E70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31569 FPW
rmgr: XLOG        len (rec/tot):     51/  4337, tx: 1202295045, lsn: AAB1/D33A80A8, prev AAB1/D33A6F88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31570 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D33A91A0, prev AAB1/D33A80A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31571 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D33AFF10, prev AAB1/D33AFED0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31572 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D33B3060, prev AAB1/D33B3020, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31573 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D33B4C48, prev AAB1/D33B4168, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31574 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D33B5DA8, prev AAB1/D33B5D70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31575 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D33B97B0, prev AAB1/D33B9770, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31576 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D33BD4A8, prev AAB1/D33BC918, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31577 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D33C0598, prev AAB1/D33C0558, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31578 FPW
rmgr: XLOG        len (rec/tot):     51/  4317, tx: 1202295045, lsn: AAB1/D33C9378, prev AAB1/D33C9338, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31579 FPW
rmgr: XLOG        len (rec/tot):     51/  4312, tx: 1202295045, lsn: AAB1/D33D01E8, prev AAB1/D33D01A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31580 FPW
rmgr: XLOG        len (rec/tot):     51/  4334, tx: 1202295045, lsn: AAB1/D33D5268, prev AAB1/D33D5230, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31581 FPW
rmgr: XLOG        len (rec/tot):     51/  4328, tx: 1202295045, lsn: AAB1/D33D8B30, prev AAB1/D33D8AF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31582 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D33D9C18, prev AAB1/D33D8B30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31583 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D33DCA48, prev AAB1/D33DCA10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31584 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D33E0278, prev AAB1/D33E0238, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31585 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D33E1378, prev AAB1/D33E0278, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31586 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D33E63F8, prev AAB1/D33E44C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31587 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D33E9780, prev AAB1/D33E9740, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31588 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D33ECD90, prev AAB1/D33ECD50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31589 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D33EDEA8, prev AAB1/D33ECD90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31590 FPW
rmgr: XLOG        len (rec/tot):     51/  4348, tx: 1202295045, lsn: AAB1/D33F1000, prev AAB1/D33F0FC8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31591 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D33F4288, prev AAB1/D33F4250, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31592 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D33F5390, prev AAB1/D33F4288, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31593 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D33F8B18, prev AAB1/D33F8AD8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31594 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D33FE820, prev AAB1/D33FE7E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31595 FPW
rmgr: XLOG        len (rec/tot):     51/  4334, tx: 1202295045, lsn: AAB1/D3407490, prev AAB1/D3407450, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31596 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D340C458, prev AAB1/D340C420, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31597 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D340FE80, prev AAB1/D340FE40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31598 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D3413DC8, prev AAB1/D3413290, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31599 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D3416AC8, prev AAB1/D3416A90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31600 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D341B660, prev AAB1/D341B588, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31601 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D341D4C8, prev AAB1/D341D450, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31602 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D341E5E0, prev AAB1/D341D4C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31603 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D34228F8, prev AAB1/D34228B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31604 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D34253B8, prev AAB1/D3425378, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31605 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D3427D40, prev AAB1/D3427CC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31606 FPW
rmgr: XLOG        len (rec/tot):     51/  4348, tx: 1202295045, lsn: AAB1/D3429AC8, prev AAB1/D3428E50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31607 FPW
rmgr: XLOG        len (rec/tot):     51/  4334, tx: 1202295045, lsn: AAB1/D342ACC0, prev AAB1/D342AC90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31608 FPW
rmgr: XLOG        len (rec/tot):     51/  4332, tx: 1202295045, lsn: AAB1/D342BDB0, prev AAB1/D342ACC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31609 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D342D9E8, prev AAB1/D342CEB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31610 FPW
rmgr: XLOG        len (rec/tot):     51/  4327, tx: 1202295045, lsn: AAB1/D3432440, prev AAB1/D3430438, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31611 FPW
rmgr: XLOG        len (rec/tot):     51/  4288, tx: 1202295045, lsn: AAB1/D3438D08, prev AAB1/D3438CC8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31612 FPW
rmgr: XLOG        len (rec/tot):     51/  4308, tx: 1202295045, lsn: AAB1/D343E4E0, prev AAB1/D343E4A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31613 FPW
rmgr: XLOG        len (rec/tot):     51/  4310, tx: 1202295045, lsn: AAB1/D343F5B8, prev AAB1/D343E4E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31614 FPW
rmgr: XLOG        len (rec/tot):     51/  4303, tx: 1202295045, lsn: AAB1/D34406A8, prev AAB1/D343F5B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31615 FPW
rmgr: XLOG        len (rec/tot):     51/  4288, tx: 1202295045, lsn: AAB1/D3441778, prev AAB1/D34406A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31616 FPW
rmgr: XLOG        len (rec/tot):     51/  4323, tx: 1202295045, lsn: AAB1/D3442850, prev AAB1/D3441778, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31617 FPW
rmgr: XLOG        len (rec/tot):     51/  4302, tx: 1202295045, lsn: AAB1/D3443938, prev AAB1/D3442850, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31618 FPW
rmgr: XLOG        len (rec/tot):     51/  4319, tx: 1202295045, lsn: AAB1/D3444A20, prev AAB1/D3443938, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31619 FPW
rmgr: XLOG        len (rec/tot):     51/  4310, tx: 1202295045, lsn: AAB1/D3449AD0, prev AAB1/D3449A90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31620 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D344CA90, prev AAB1/D344CA58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31621 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D344DB78, prev AAB1/D344CA90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31622 FPW
rmgr: XLOG        len (rec/tot):     51/  4304, tx: 1202295045, lsn: AAB1/D344EC88, prev AAB1/D344DB78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31623 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D344FD58, prev AAB1/D344EC88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31624 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D3450E80, prev AAB1/D344FD58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31625 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D3451F88, prev AAB1/D3450E80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31626 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D34530A8, prev AAB1/D3451F88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31627 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D34541C8, prev AAB1/D34530A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31628 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D34552E8, prev AAB1/D34541C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31629 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D3458120, prev AAB1/D34580E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31630 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D345CAF0, prev AAB1/D345CAB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31631 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D345FC18, prev AAB1/D345FBD8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31632 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D3463FD0, prev AAB1/D3463F90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31633 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D3465C48, prev AAB1/D34650F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31634 FPW
rmgr: XLOG        len (rec/tot):     51/  4392, tx: 1202295045, lsn: AAB1/D3466D80, prev AAB1/D3465C48, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31635 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D3468A70, prev AAB1/D3467EA8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31636 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D346B948, prev AAB1/D346B908, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31637 FPW
rmgr: XLOG        len (rec/tot):     51/  3502, tx: 1202295045, lsn: AAB1/D346E740, prev AAB1/D346CA70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31355 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D346F4F0, prev AAB1/D346E740, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31638 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D3470628, prev AAB1/D346F4F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31639 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D3471738, prev AAB1/D3470628, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31641 FPW
rmgr: XLOG        len (rec/tot):     51/  4389, tx: 1202295045, lsn: AAB1/D3472858, prev AAB1/D3471738, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31642 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D3473980, prev AAB1/D3472858, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31643 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D3474AB8, prev AAB1/D3473980, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31644 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3475CB0, prev AAB1/D3475C80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31645 FPW
rmgr: XLOG        len (rec/tot):     51/  4386, tx: 1202295045, lsn: AAB1/D3476DE8, prev AAB1/D3475CB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31646 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3477F10, prev AAB1/D3476DE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31647 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D347CC30, prev AAB1/D347CBF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31648 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D347F680, prev AAB1/D347F640, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31649 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D34866D0, prev AAB1/D3486690, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31650 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D34877E0, prev AAB1/D34866D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31651 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D34888F0, prev AAB1/D34877E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31652 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D348D3B8, prev AAB1/D348D380, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31653 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D348E4E0, prev AAB1/D348D3B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31654 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D348F5E8, prev AAB1/D348E4E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31655 FPW
rmgr: XLOG        len (rec/tot):     51/  4394, tx: 1202295045, lsn: AAB1/D34908A0, prev AAB1/D3490870, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31656 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D34919D0, prev AAB1/D34908A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31657 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D3492B00, prev AAB1/D34919D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31658 FPW
rmgr: XLOG        len (rec/tot):     51/  4386, tx: 1202295045, lsn: AAB1/D3493C20, prev AAB1/D3492B00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31659 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D3494D60, prev AAB1/D3493C20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31660 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D3495E60, prev AAB1/D3494D60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31661 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D3496F90, prev AAB1/D3495E60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31662 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D34980C0, prev AAB1/D3496F90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31663 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D34991C8, prev AAB1/D34980C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31664 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D349A2F8, prev AAB1/D34991C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31665 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D349B408, prev AAB1/D349A2F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31666 FPW
rmgr: XLOG        len (rec/tot):     51/  4385, tx: 1202295045, lsn: AAB1/D349FDB8, prev AAB1/D349FD78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31667 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D34A2F30, prev AAB1/D34A2EF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31668 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D34A9A60, prev AAB1/D34A9A20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31669 FPW
rmgr: XLOG        len (rec/tot):     51/  4391, tx: 1202295045, lsn: AAB1/D34AC6B0, prev AAB1/D34AC670, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31670 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D34AD7D8, prev AAB1/D34AC6B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31671 FPW
rmgr: XLOG        len (rec/tot):     51/  4390, tx: 1202295045, lsn: AAB1/D34AE910, prev AAB1/D34AD7D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31672 FPW
rmgr: XLOG        len (rec/tot):     51/  4399, tx: 1202295045, lsn: AAB1/D34AFA38, prev AAB1/D34AE910, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31673 FPW
rmgr: XLOG        len (rec/tot):     51/  4398, tx: 1202295045, lsn: AAB1/D34B0B80, prev AAB1/D34AFA38, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31674 FPW
rmgr: XLOG        len (rec/tot):     51/  4391, tx: 1202295045, lsn: AAB1/D34B2878, prev AAB1/D34B2838, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31675 FPW
rmgr: XLOG        len (rec/tot):     51/  4414, tx: 1202295045, lsn: AAB1/D34B39A0, prev AAB1/D34B2878, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31676 FPW
rmgr: XLOG        len (rec/tot):     51/  4400, tx: 1202295045, lsn: AAB1/D34B4AF8, prev AAB1/D34B39A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31677 FPW
rmgr: XLOG        len (rec/tot):     51/  4411, tx: 1202295045, lsn: AAB1/D34B5C28, prev AAB1/D34B4AF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31678 FPW
rmgr: XLOG        len (rec/tot):     51/  4390, tx: 1202295045, lsn: AAB1/D34B6D80, prev AAB1/D34B5C28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31679 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D34B7EA8, prev AAB1/D34B6D80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31680 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D34B9AF0, prev AAB1/D34B8FE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31681 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D34BB7E0, prev AAB1/D34BAC18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31682 FPW
rmgr: XLOG        len (rec/tot):     51/  4397, tx: 1202295045, lsn: AAB1/D34BC910, prev AAB1/D34BB7E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31683 FPW
rmgr: XLOG        len (rec/tot):     51/  4402, tx: 1202295045, lsn: AAB1/D34BE558, prev AAB1/D34BDA40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31684 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D34BF690, prev AAB1/D34BE558, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31685 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D34C2820, prev AAB1/D34C27E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31686 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D34C7728, prev AAB1/D34C76E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31687 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D34CC078, prev AAB1/D34CC038, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31688 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D34CD1A0, prev AAB1/D34CC078, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31689 FPW
rmgr: XLOG        len (rec/tot):     51/  4385, tx: 1202295045, lsn: AAB1/D34CFED8, prev AAB1/D34CFE98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31690 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D34D1018, prev AAB1/D34CFED8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31691 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D34D2150, prev AAB1/D34D1018, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31692 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D34D3270, prev AAB1/D34D2150, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31693 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D34D43A8, prev AAB1/D34D3270, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31694 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D34D54B8, prev AAB1/D34D43A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31695 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D34D65D0, prev AAB1/D34D54B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31696 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D34D76C8, prev AAB1/D34D65D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31697 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D34D87F0, prev AAB1/D34D76C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31698 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D34D98F8, prev AAB1/D34D87F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31699 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D34DAA28, prev AAB1/D34D98F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31700 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D34DDA10, prev AAB1/D34DD9D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31701 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D34E0B58, prev AAB1/D34E0B18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31702 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D34E1C60, prev AAB1/D34E0B58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31703 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D34E3818, prev AAB1/D34E2D80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31704 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D34E5370, prev AAB1/D34E4950, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31705 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D34E6488, prev AAB1/D34E5370, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31706 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D34E8F30, prev AAB1/D34E8EF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31707 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D34EDDC0, prev AAB1/D34EDD80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31708 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D34F4748, prev AAB1/D34F4708, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31709 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D34F5858, prev AAB1/D34F4748, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31710 FPW
rmgr: XLOG        len (rec/tot):     51/  4433, tx: 1202295045, lsn: AAB1/D34F6990, prev AAB1/D34F5858, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31711 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D34F7AE8, prev AAB1/D34F6990, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31712 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D34F8C18, prev AAB1/D34F7AE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31713 FPW
rmgr: XLOG        len (rec/tot):     51/  4398, tx: 1202295045, lsn: AAB1/D34F9D30, prev AAB1/D34F8C18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31714 FPW
rmgr: XLOG        len (rec/tot):     51/  4416, tx: 1202295045, lsn: AAB1/D34FAE78, prev AAB1/D34F9D30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31715 FPW
rmgr: XLOG        len (rec/tot):     51/  4390, tx: 1202295045, lsn: AAB1/D34FBFB8, prev AAB1/D34FAE78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31716 FPW
rmgr: XLOG        len (rec/tot):     51/  4402, tx: 1202295045, lsn: AAB1/D3501068, prev AAB1/D34FF078, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31717 FPW
rmgr: XLOG        len (rec/tot):     51/  4389, tx: 1202295045, lsn: AAB1/D35021B8, prev AAB1/D3501068, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31718 FPW
rmgr: XLOG        len (rec/tot):     51/  4406, tx: 1202295045, lsn: AAB1/D35032E0, prev AAB1/D35021B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31719 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D3504FC8, prev AAB1/D3504F88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31720 FPW
rmgr: XLOG        len (rec/tot):     51/  4401, tx: 1202295045, lsn: AAB1/D3506110, prev AAB1/D3504FC8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31721 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D350E6F0, prev AAB1/D350E6B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31722 FPW
rmgr: XLOG        len (rec/tot):     51/  4410, tx: 1202295045, lsn: AAB1/D351A0C0, prev AAB1/D351A080, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31723 FPW
rmgr: XLOG        len (rec/tot):     51/  4391, tx: 1202295045, lsn: AAB1/D351B200, prev AAB1/D351A0C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31724 FPW
rmgr: XLOG        len (rec/tot):     51/  4390, tx: 1202295045, lsn: AAB1/D351C340, prev AAB1/D351B200, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31725 FPW
rmgr: XLOG        len (rec/tot):     51/  4406, tx: 1202295045, lsn: AAB1/D351D468, prev AAB1/D351C340, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31726 FPW
rmgr: XLOG        len (rec/tot):     51/  4406, tx: 1202295045, lsn: AAB1/D351E5B8, prev AAB1/D351D468, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31727 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D351F6F0, prev AAB1/D351E5B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31728 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D3520830, prev AAB1/D351F6F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31729 FPW
rmgr: XLOG        len (rec/tot):     51/  4401, tx: 1202295045, lsn: AAB1/D3521958, prev AAB1/D3520830, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31730 FPW
rmgr: XLOG        len (rec/tot):     51/  4395, tx: 1202295045, lsn: AAB1/D3522AA8, prev AAB1/D3521958, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31731 FPW
rmgr: XLOG        len (rec/tot):     51/  4430, tx: 1202295045, lsn: AAB1/D3525B98, prev AAB1/D3525B58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31732 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D3526D00, prev AAB1/D3525B98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31733 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D3527E20, prev AAB1/D3526D00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31734 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D3528F50, prev AAB1/D3527E20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31735 FPW
rmgr: XLOG        len (rec/tot):     51/  4386, tx: 1202295045, lsn: AAB1/D352BF90, prev AAB1/D352BF50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31736 FPW
rmgr: XLOG        len (rec/tot):     51/  4394, tx: 1202295045, lsn: AAB1/D3532D40, prev AAB1/D3532D00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31737 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D3536108, prev AAB1/D35360C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31738 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D35398D8, prev AAB1/D3538D98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31739 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D353AA00, prev AAB1/D35398D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31740 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D353C660, prev AAB1/D353C620, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31741 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D353D768, prev AAB1/D353C660, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31742 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D353E888, prev AAB1/D353D768, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31743 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D353F998, prev AAB1/D353E888, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31744 FPW
rmgr: XLOG        len (rec/tot):     51/  4343, tx: 1202295045, lsn: AAB1/D3542328, prev AAB1/D35422E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31745 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D3543420, prev AAB1/D3542328, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31746 FPW
rmgr: XLOG        len (rec/tot):     51/  4331, tx: 1202295045, lsn: AAB1/D354B760, prev AAB1/D354AD30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31747 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D354C868, prev AAB1/D354B760, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31748 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D354D960, prev AAB1/D354C868, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31749 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D354F7A0, prev AAB1/D354F760, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31750 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D3556030, prev AAB1/D3555FD8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31751 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D355A8F0, prev AAB1/D355A8B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31752 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D355E310, prev AAB1/D355E2D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31753 FPW
rmgr: XLOG        len (rec/tot):     51/  4343, tx: 1202295045, lsn: AAB1/D355F420, prev AAB1/D355E310, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31754 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D3560F10, prev AAB1/D3560ED0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31755 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D3562020, prev AAB1/D3560F10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31756 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D3563BD0, prev AAB1/D3563B90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31757 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D3564CF0, prev AAB1/D3563BD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31758 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D3565DF0, prev AAB1/D3564CF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31759 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D35679B0, prev AAB1/D3566F18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31760 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3568AE8, prev AAB1/D35679B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31761 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D356C2B8, prev AAB1/D356A698, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31762 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D356D3C0, prev AAB1/D356C2B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31763 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D356EFB8, prev AAB1/D356EF78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31764 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D3570C08, prev AAB1/D35700E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31765 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D3571D10, prev AAB1/D3570C08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31766 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3572E20, prev AAB1/D3571D10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31767 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D35749F0, prev AAB1/D3573F40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31768 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D3579968, prev AAB1/D3579928, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31769 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D35803F8, prev AAB1/D35803B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31770 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D3584C40, prev AAB1/D3584160, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31771 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D3585D50, prev AAB1/D3584C40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31772 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D3586E68, prev AAB1/D3585D50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31773 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D3588AC8, prev AAB1/D3587F68, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31774 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D3589BC8, prev AAB1/D3588AC8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31775 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D358ACF8, prev AAB1/D3589BC8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31776 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D358DE28, prev AAB1/D358BDF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31777 FPW
rmgr: XLOG        len (rec/tot):     51/  4334, tx: 1202295045, lsn: AAB1/D3590F68, prev AAB1/D358EF50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31778 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D3592070, prev AAB1/D3590F68, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31779 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D3593180, prev AAB1/D3592070, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31780 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D35942A8, prev AAB1/D3593180, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31781 FPW
rmgr: XLOG        len (rec/tot):     51/  4334, tx: 1202295045, lsn: AAB1/D35953A0, prev AAB1/D35942A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31782 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D3596918, prev AAB1/D35968A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31783 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D3597BA0, prev AAB1/D3597B70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31784 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D3598CB0, prev AAB1/D3597BA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31785 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D3599DA8, prev AAB1/D3598CB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31786 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D359C870, prev AAB1/D359AEB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31787 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D35A14F0, prev AAB1/D35A14B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31788 FPW
rmgr: XLOG        len (rec/tot):     51/  4338, tx: 1202295045, lsn: AAB1/D35A83A0, prev AAB1/D35A8360, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31789 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D35A9498, prev AAB1/D35A83A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31790 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D35AA5A8, prev AAB1/D35A9498, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31791 FPW
rmgr: XLOG        len (rec/tot):     51/  4322, tx: 1202295045, lsn: AAB1/D35AB6A0, prev AAB1/D35AA5A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31792 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D35AC7A0, prev AAB1/D35AB6A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31793 FPW
rmgr: XLOG        len (rec/tot):     51/  4337, tx: 1202295045, lsn: AAB1/D35AD898, prev AAB1/D35AC7A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31794 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D35B04C8, prev AAB1/D35AE9A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31795 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D35B15C0, prev AAB1/D35B04C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31796 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D35B26C0, prev AAB1/D35B15C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31797 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D35B37D8, prev AAB1/D35B26C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31798 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D35B4900, prev AAB1/D35B37D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31799 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D35B5A10, prev AAB1/D35B4900, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31800 FPW
rmgr: XLOG        len (rec/tot):     51/  4392, tx: 1202295045, lsn: AAB1/D35B6B30, prev AAB1/D35B5A10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31801 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D35B7C58, prev AAB1/D35B6B30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31802 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D35B8D80, prev AAB1/D35B7C58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31803 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D35B9E88, prev AAB1/D35B8D80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31804 FPW
rmgr: XLOG        len (rec/tot):     51/  4383, tx: 1202295045, lsn: AAB1/D35BAFB0, prev AAB1/D35B9E88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31805 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D35BDDE8, prev AAB1/D35BDDA8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31806 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D35C2CE8, prev AAB1/D35C2CA8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31807 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D35C7688, prev AAB1/D35C7648, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31808 FPW
rmgr: XLOG        len (rec/tot):     51/  4383, tx: 1202295045, lsn: AAB1/D35CA560, prev AAB1/D35CA520, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31809 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D35CD638, prev AAB1/D35CB680, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31810 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D35D1278, prev AAB1/D35D0720, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31811 FPW
rmgr: XLOG        len (rec/tot):     51/  4383, tx: 1202295045, lsn: AAB1/D35D23B0, prev AAB1/D35D1278, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31812 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D35D34D0, prev AAB1/D35D23B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31813 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D35D45E8, prev AAB1/D35D34D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31814 FPW
rmgr: XLOG        len (rec/tot):     51/  4374, tx: 1202295045, lsn: AAB1/D35D5700, prev AAB1/D35D45E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31815 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D35D6830, prev AAB1/D35D5700, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31816 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D35D7940, prev AAB1/D35D6830, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31817 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D35D8A70, prev AAB1/D35D7940, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31818 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D35DA6A0, prev AAB1/D35D9B88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31819 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D35DB7C0, prev AAB1/D35DA6A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31820 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D35DC8E0, prev AAB1/D35DB7C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31821 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D35DD9E8, prev AAB1/D35DC8E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31822 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D35DEB08, prev AAB1/D35DD9E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31823 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D35DFC20, prev AAB1/D35DEB08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31824 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D35E0D38, prev AAB1/D35DFC20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31825 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D35E7BA0, prev AAB1/D35E7B60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31826 FPW
rmgr: XLOG        len (rec/tot):     51/  4336, tx: 1202295045, lsn: AAB1/D35EE090, prev AAB1/D35EC740, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31827 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D35F5148, prev AAB1/D35F3170, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31828 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D35F6258, prev AAB1/D35F5148, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31829 FPW
rmgr: XLOG        len (rec/tot):     51/  4330, tx: 1202295045, lsn: AAB1/D35F7360, prev AAB1/D35F6258, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31830 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D35F8468, prev AAB1/D35F7360, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31831 FPW
rmgr: XLOG        len (rec/tot):     51/  4323, tx: 1202295045, lsn: AAB1/D35F9550, prev AAB1/D35F8468, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31832 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D35FA650, prev AAB1/D35F9550, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31833 FPW
rmgr: XLOG        len (rec/tot):     51/  4320, tx: 1202295045, lsn: AAB1/D35FB750, prev AAB1/D35FA650, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31834 FPW
rmgr: XLOG        len (rec/tot):     51/  4341, tx: 1202295045, lsn: AAB1/D35FC928, prev AAB1/D35FC8F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31835 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D35FDA50, prev AAB1/D35FDA20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31836 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D35FEB78, prev AAB1/D35FDA50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31837 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D35FFC90, prev AAB1/D35FEB78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31838 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D3600DB0, prev AAB1/D35FFC90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31839 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D3601EB8, prev AAB1/D3600DB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31840 FPW
rmgr: XLOG        len (rec/tot):     51/  4374, tx: 1202295045, lsn: AAB1/D3602FF0, prev AAB1/D3601EB8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31841 FPW
rmgr: XLOG        len (rec/tot):     51/  4344, tx: 1202295045, lsn: AAB1/D3604120, prev AAB1/D3602FF0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31842 FPW
rmgr: XLOG        len (rec/tot):     51/  4389, tx: 1202295045, lsn: AAB1/D3605218, prev AAB1/D3604120, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31843 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D3606358, prev AAB1/D3605218, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31844 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D3608C40, prev AAB1/D3607460, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31845 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D360D5F0, prev AAB1/D360D5B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31846 FPW
rmgr: XLOG        len (rec/tot):     51/  4392, tx: 1202295045, lsn: AAB1/D3612560, prev AAB1/D3612520, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31847 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D3617628, prev AAB1/D36175E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31848 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D3618750, prev AAB1/D3617628, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31849 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D3619858, prev AAB1/D3618750, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31850 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D361A998, prev AAB1/D3619858, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31851 FPW
rmgr: XLOG        len (rec/tot):     51/  4385, tx: 1202295045, lsn: AAB1/D361C690, prev AAB1/D361BAB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31852 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D361E2A0, prev AAB1/D361D7B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31853 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D361F3B8, prev AAB1/D361E2A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31854 FPW
rmgr: XLOG        len (rec/tot):     51/  4398, tx: 1202295045, lsn: AAB1/D36204E8, prev AAB1/D361F3B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31855 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D3621618, prev AAB1/D36204E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31856 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D3622820, prev AAB1/D36227F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31857 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D3623950, prev AAB1/D3622820, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31858 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D3624A90, prev AAB1/D3623950, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31859 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D3625BA8, prev AAB1/D3624A90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31860 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D3626CE8, prev AAB1/D3625BA8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31861 FPW
rmgr: XLOG        len (rec/tot):     51/  4386, tx: 1202295045, lsn: AAB1/D3627DF8, prev AAB1/D3626CE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31862 FPW
rmgr: XLOG        len (rec/tot):     51/  4400, tx: 1202295045, lsn: AAB1/D3628F38, prev AAB1/D3627DF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31863 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D362A080, prev AAB1/D3628F38, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31864 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D362B198, prev AAB1/D362A080, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31865 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D362E238, prev AAB1/D362E1F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31866 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D36312A0, prev AAB1/D3631260, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31867 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D36380D0, prev AAB1/D3638090, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31868 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D363B230, prev AAB1/D363B1F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31869 FPW
rmgr: XLOG        len (rec/tot):     51/  4340, tx: 1202295045, lsn: AAB1/D363C368, prev AAB1/D363B230, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31870 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D363D460, prev AAB1/D363C368, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31871 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D363E588, prev AAB1/D363D460, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31872 FPW
rmgr: XLOG        len (rec/tot):     51/  4375, tx: 1202295045, lsn: AAB1/D3640288, prev AAB1/D363F698, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31873 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D36413A0, prev AAB1/D3640288, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31874 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D36424D8, prev AAB1/D36413A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31875 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D36474E8, prev AAB1/D3645588, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31876 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D364A110, prev AAB1/D364A0D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31877 FPW
rmgr: XLOG        len (rec/tot):     51/  4378, tx: 1202295045, lsn: AAB1/D364B230, prev AAB1/D364A110, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31878 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D364C368, prev AAB1/D364B230, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31879 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D364D470, prev AAB1/D364C368, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31880 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D364E5A0, prev AAB1/D364D470, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31881 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D364F6B0, prev AAB1/D364E5A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31882 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D36507D8, prev AAB1/D364F6B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31883 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D36518E0, prev AAB1/D36507D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31884 FPW
rmgr: XLOG        len (rec/tot):     51/  4370, tx: 1202295045, lsn: AAB1/D3652A08, prev AAB1/D36518E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31885 FPW
rmgr: XLOG        len (rec/tot):     51/  4386, tx: 1202295045, lsn: AAB1/D36558B8, prev AAB1/D3655878, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31886 FPW
rmgr: XLOG        len (rec/tot):     51/  4393, tx: 1202295045, lsn: AAB1/D365C2A8, prev AAB1/D365C268, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31887 FPW
rmgr: XLOG        len (rec/tot):     51/  4393, tx: 1202295045, lsn: AAB1/D3660D40, prev AAB1/D3660D00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31888 FPW
rmgr: XLOG        len (rec/tot):     51/  4405, tx: 1202295045, lsn: AAB1/D3661E70, prev AAB1/D3660D40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31889 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D3662FC0, prev AAB1/D3661E70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31890 FPW
rmgr: XLOG        len (rec/tot):     51/  4390, tx: 1202295045, lsn: AAB1/D36644C8, prev AAB1/D3664498, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31891 FPW
rmgr: XLOG        len (rec/tot):     51/  4401, tx: 1202295045, lsn: AAB1/D36655F0, prev AAB1/D36644C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31892 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3666740, prev AAB1/D36655F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31893 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D366C418, prev AAB1/D366A438, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31894 FPW
rmgr: XLOG        len (rec/tot):     51/  4393, tx: 1202295045, lsn: AAB1/D366D530, prev AAB1/D366C418, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31895 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D366E678, prev AAB1/D366D530, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31896 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D366F780, prev AAB1/D366E678, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31897 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D3670898, prev AAB1/D366F780, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31898 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3671A08, prev AAB1/D36719D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31899 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D3673678, prev AAB1/D3672B30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31900 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D3677038, prev AAB1/D3676FF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31901 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D3679968, prev AAB1/D3679928, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31902 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D367C7C0, prev AAB1/D367AAA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31903 FPW
rmgr: XLOG        len (rec/tot):     51/  4337, tx: 1202295045, lsn: AAB1/D367F900, prev AAB1/D367D8C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31904 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D3682A98, prev AAB1/D36829C0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31905 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D3688308, prev AAB1/D36882C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31906 FPW
rmgr: XLOG        len (rec/tot):     51/  4342, tx: 1202295045, lsn: AAB1/D368EA98, prev AAB1/D368EA58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31907 FPW
rmgr: XLOG        len (rec/tot):     51/  4319, tx: 1202295045, lsn: AAB1/D3692A40, prev AAB1/D3692A10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31908 FPW
rmgr: XLOG        len (rec/tot):     51/  4336, tx: 1202295045, lsn: AAB1/D3693B20, prev AAB1/D3692A40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31909 FPW
rmgr: XLOG        len (rec/tot):     51/  4355, tx: 1202295045, lsn: AAB1/D3694C28, prev AAB1/D3693B20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31910 FPW
rmgr: XLOG        len (rec/tot):     51/  4324, tx: 1202295045, lsn: AAB1/D3699750, prev AAB1/D3699710, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31911 FPW
rmgr: XLOG        len (rec/tot):     51/  4327, tx: 1202295045, lsn: AAB1/D369A850, prev AAB1/D3699750, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31912 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D369B938, prev AAB1/D369A850, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31913 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D369CA50, prev AAB1/D369B938, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31914 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D369DB50, prev AAB1/D369CA50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31915 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D369EC58, prev AAB1/D369DB50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31916 FPW
rmgr: XLOG        len (rec/tot):     51/  4333, tx: 1202295045, lsn: AAB1/D369FD60, prev AAB1/D369EC58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31917 FPW
rmgr: XLOG        len (rec/tot):     51/  4346, tx: 1202295045, lsn: AAB1/D36A0E68, prev AAB1/D369FD60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31918 FPW
rmgr: XLOG        len (rec/tot):     51/  4349, tx: 1202295045, lsn: AAB1/D36A1F68, prev AAB1/D36A0E68, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31919 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D36A3080, prev AAB1/D36A1F68, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31920 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D36A41B8, prev AAB1/D36A3080, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31921 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D36A52D0, prev AAB1/D36A41B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31922 FPW
rmgr: XLOG        len (rec/tot):     51/  3494, tx: 1202295045, lsn: AAB1/D36A63F0, prev AAB1/D36A52D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31640 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D36A7278, prev AAB1/D36A7248, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31923 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D36ADD60, prev AAB1/D36ADD20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31924 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D36B4A48, prev AAB1/D36B4A08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31926 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D36B7BD0, prev AAB1/D36B7B90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31927 FPW
rmgr: XLOG        len (rec/tot):     51/  4398, tx: 1202295045, lsn: AAB1/D36B8D08, prev AAB1/D36B7BD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31928 FPW
rmgr: XLOG        len (rec/tot):     51/  4395, tx: 1202295045, lsn: AAB1/D36B9E38, prev AAB1/D36B8D08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31929 FPW
rmgr: XLOG        len (rec/tot):     51/  4361, tx: 1202295045, lsn: AAB1/D36BAFF0, prev AAB1/D36BAF80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31930 FPW
rmgr: XLOG        len (rec/tot):     51/  4383, tx: 1202295045, lsn: AAB1/D36BD1A0, prev AAB1/D36BD170, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31931 FPW
rmgr: XLOG        len (rec/tot):     51/  4392, tx: 1202295045, lsn: AAB1/D36BEE80, prev AAB1/D36BEE50, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31932 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D36BFFA8, prev AAB1/D36BEE80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31933 FPW
rmgr: XLOG        len (rec/tot):     51/  4376, tx: 1202295045, lsn: AAB1/D36C1CF8, prev AAB1/D36C1C78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31934 FPW
rmgr: XLOG        len (rec/tot):     51/  4409, tx: 1202295045, lsn: AAB1/D36C3A40, prev AAB1/D36C3A10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31935 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D36C4B98, prev AAB1/D36C3A40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31936 FPW
rmgr: XLOG        len (rec/tot):     51/  4385, tx: 1202295045, lsn: AAB1/D36C5CC0, prev AAB1/D36C4B98, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31937 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D36C6F90, prev AAB1/D36C6F18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31938 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D36C80F8, prev AAB1/D36C80C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31939 FPW
rmgr: XLOG        len (rec/tot):     51/  4397, tx: 1202295045, lsn: AAB1/D36C9210, prev AAB1/D36C80F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31940 FPW
rmgr: XLOG        len (rec/tot):     51/  4389, tx: 1202295045, lsn: AAB1/D36CAED8, prev AAB1/D36CA358, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31941 FPW
rmgr: XLOG        len (rec/tot):     51/  4410, tx: 1202295045, lsn: AAB1/D36CC018, prev AAB1/D36CAED8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31942 FPW
rmgr: XLOG        len (rec/tot):     51/  4385, tx: 1202295045, lsn: AAB1/D36D6A08, prev AAB1/D36D5FD8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31943 FPW
rmgr: XLOG        len (rec/tot):     51/  4411, tx: 1202295045, lsn: AAB1/D36DC7D0, prev AAB1/D36DBA90, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31944 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D36E17E0, prev AAB1/D36E17A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31945 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D36E3498, prev AAB1/D36E2918, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31946 FPW
rmgr: XLOG        len (rec/tot):     51/  4405, tx: 1202295045, lsn: AAB1/D36E45C8, prev AAB1/D36E3498, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31947 FPW
rmgr: XLOG        len (rec/tot):     51/  4391, tx: 1202295045, lsn: AAB1/D36E5700, prev AAB1/D36E45C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31948 FPW
rmgr: XLOG        len (rec/tot):     51/  4413, tx: 1202295045, lsn: AAB1/D36E7358, prev AAB1/D36E6840, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31949 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D36E84B0, prev AAB1/D36E7358, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31950 FPW
rmgr: XLOG        len (rec/tot):     51/  4402, tx: 1202295045, lsn: AAB1/D36E95D0, prev AAB1/D36E84B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31951 FPW
rmgr: XLOG        len (rec/tot):     51/  4395, tx: 1202295045, lsn: AAB1/D36EA720, prev AAB1/D36E95D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31952 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D36EB850, prev AAB1/D36EA720, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31953 FPW
rmgr: XLOG        len (rec/tot):     51/  4388, tx: 1202295045, lsn: AAB1/D36EC988, prev AAB1/D36EB850, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31954 FPW
rmgr: XLOG        len (rec/tot):     51/  4393, tx: 1202295045, lsn: AAB1/D36EDAB0, prev AAB1/D36EC988, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31955 FPW
rmgr: XLOG        len (rec/tot):     51/  4422, tx: 1202295045, lsn: AAB1/D36EEBF8, prev AAB1/D36EDAB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31956 FPW
rmgr: XLOG        len (rec/tot):     51/  4391, tx: 1202295045, lsn: AAB1/D36EFD40, prev AAB1/D36EEBF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31957 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D36F0E80, prev AAB1/D36EFD40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31958 FPW
rmgr: XLOG        len (rec/tot):     51/  4395, tx: 1202295045, lsn: AAB1/D36F1FA0, prev AAB1/D36F0E80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31959 FPW
rmgr: XLOG        len (rec/tot):     51/  4403, tx: 1202295045, lsn: AAB1/D36F30E8, prev AAB1/D36F1FA0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31960 FPW
rmgr: XLOG        len (rec/tot):     51/  4407, tx: 1202295045, lsn: AAB1/D36F4238, prev AAB1/D36F30E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31961 FPW
rmgr: XLOG        len (rec/tot):     51/  4389, tx: 1202295045, lsn: AAB1/D36F8EB0, prev AAB1/D36F8E70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31962 FPW
rmgr: XLOG        len (rec/tot):     51/  4408, tx: 1202295045, lsn: AAB1/D36FBE18, prev AAB1/D36FBDD8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31963 FPW
rmgr: XLOG        len (rec/tot):     51/  4389, tx: 1202295045, lsn: AAB1/D3702A60, prev AAB1/D3702A20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31964 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D3703B88, prev AAB1/D3702A60, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31965 FPW
rmgr: XLOG        len (rec/tot):     51/  4390, tx: 1202295045, lsn: AAB1/D3704CC0, prev AAB1/D3703B88, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31966 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D3705DE8, prev AAB1/D3704CC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31967 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3706F20, prev AAB1/D3705DE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31968 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3708058, prev AAB1/D3706F20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31969 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D3709178, prev AAB1/D3708058, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31970 FPW
rmgr: XLOG        len (rec/tot):     51/  4398, tx: 1202295045, lsn: AAB1/D370A2B0, prev AAB1/D3709178, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31971 FPW
rmgr: XLOG        len (rec/tot):     51/  4386, tx: 1202295045, lsn: AAB1/D370B3E0, prev AAB1/D370A2B0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31972 FPW
rmgr: XLOG        len (rec/tot):     51/  4380, tx: 1202295045, lsn: AAB1/D370C520, prev AAB1/D370B3E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31973 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D370D640, prev AAB1/D370C520, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31974 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D370E768, prev AAB1/D370D640, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31975 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D370F970, prev AAB1/D370F940, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31976 FPW
rmgr: XLOG        len (rec/tot):     51/  4374, tx: 1202295045, lsn: AAB1/D3710AA8, prev AAB1/D370F970, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31977 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D3711BC0, prev AAB1/D3710AA8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31978 FPW
rmgr: XLOG        len (rec/tot):     51/  4408, tx: 1202295045, lsn: AAB1/D3712CF8, prev AAB1/D3711BC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31979 FPW
rmgr: XLOG        len (rec/tot):     51/  4395, tx: 1202295045, lsn: AAB1/D3713E30, prev AAB1/D3712CF8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31980 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D3714F78, prev AAB1/D3713E30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31981 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D3719B68, prev AAB1/D3719B28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31982 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D371EB28, prev AAB1/D371EAE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31983 FPW
rmgr: XLOG        len (rec/tot):     51/  4368, tx: 1202295045, lsn: AAB1/D3723A58, prev AAB1/D3723A18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31984 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D3724B80, prev AAB1/D3723A58, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31985 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3725C98, prev AAB1/D3724B80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31986 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D37278D8, prev AAB1/D3726DD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31987 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D3728A00, prev AAB1/D37278D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31988 FPW
rmgr: XLOG        len (rec/tot):     51/  4329, tx: 1202295045, lsn: AAB1/D372A608, prev AAB1/D3729B08, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31989 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D372B6F8, prev AAB1/D372A608, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31990 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D372E4C8, prev AAB1/D372C810, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31991 FPW
rmgr: XLOG        len (rec/tot):     51/  4354, tx: 1202295045, lsn: AAB1/D3730188, prev AAB1/D372F5E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31992 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3731290, prev AAB1/D3730188, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31993 FPW
rmgr: XLOG        len (rec/tot):     51/  4335, tx: 1202295045, lsn: AAB1/D37323B8, prev AAB1/D3731290, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31994 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D37334A8, prev AAB1/D37323B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31995 FPW
rmgr: XLOG        len (rec/tot):     51/  4364, tx: 1202295045, lsn: AAB1/D37345D0, prev AAB1/D37334A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31996 FPW
rmgr: XLOG        len (rec/tot):     51/  4325, tx: 1202295045, lsn: AAB1/D37356E0, prev AAB1/D37345D0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31997 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D37367E0, prev AAB1/D37356E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31998 FPW
rmgr: XLOG        len (rec/tot):     51/  4322, tx: 1202295045, lsn: AAB1/D3737A58, prev AAB1/D37379E0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31999 FPW
rmgr: XLOG        len (rec/tot):     51/  4366, tx: 1202295045, lsn: AAB1/D373A1C0, prev AAB1/D373A188, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32000 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D373B428, prev AAB1/D373B3F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32001 FPW
rmgr: XLOG        len (rec/tot):     51/  4371, tx: 1202295045, lsn: AAB1/D373C808, prev AAB1/D373C790, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32002 FPW
rmgr: XLOG        len (rec/tot):     51/  4350, tx: 1202295045, lsn: AAB1/D3741460, prev AAB1/D3741420, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32003 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D3745DB0, prev AAB1/D3745D70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32004 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D3748870, prev AAB1/D3748830, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32005 FPW
rmgr: XLOG        len (rec/tot):     51/  4345, tx: 1202295045, lsn: AAB1/D374B678, prev AAB1/D374B638, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32006 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D374E7C8, prev AAB1/D374C790, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32007 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D3751728, prev AAB1/D374F8C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32008 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D3754808, prev AAB1/D3752848, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32009 FPW
rmgr: XLOG        len (rec/tot):     51/  4351, tx: 1202295045, lsn: AAB1/D3755918, prev AAB1/D3754808, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32010 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D3756A30, prev AAB1/D3755918, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32011 FPW
rmgr: XLOG        len (rec/tot):     51/  4365, tx: 1202295045, lsn: AAB1/D3757B38, prev AAB1/D3756A30, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32012 FPW
rmgr: XLOG        len (rec/tot):     51/  4367, tx: 1202295045, lsn: AAB1/D3758C60, prev AAB1/D3757B38, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32013 FPW
rmgr: XLOG        len (rec/tot):     51/  4379, tx: 1202295045, lsn: AAB1/D375A980, prev AAB1/D3759D70, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32014 FPW
rmgr: XLOG        len (rec/tot):     51/  4393, tx: 1202295045, lsn: AAB1/D375C638, prev AAB1/D375C5F8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32015 FPW
rmgr: XLOG        len (rec/tot):     51/  4404, tx: 1202295045, lsn: AAB1/D375E2E8, prev AAB1/D375D768, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32016 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D375F420, prev AAB1/D375E2E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32017 FPW
rmgr: XLOG        len (rec/tot):     51/  4394, tx: 1202295045, lsn: AAB1/D3760550, prev AAB1/D375F420, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32018 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D3761730, prev AAB1/D37616B8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32019 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D3763288, prev AAB1/D3763218, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32020 FPW
rmgr: XLOG        len (rec/tot):     51/  4416, tx: 1202295045, lsn: AAB1/D37688C0, prev AAB1/D3768880, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32021 FPW
rmgr: XLOG        len (rec/tot):     51/  4414, tx: 1202295045, lsn: AAB1/D376F800, prev AAB1/D376D898, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32022 FPW
rmgr: XLOG        len (rec/tot):     51/  4396, tx: 1202295045, lsn: AAB1/D37728E8, prev AAB1/D37728A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32023 FPW
rmgr: XLOG        len (rec/tot):     51/  4418, tx: 1202295045, lsn: AAB1/D3773A18, prev AAB1/D37728E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32024 FPW
rmgr: XLOG        len (rec/tot):     51/  4421, tx: 1202295045, lsn: AAB1/D3774B78, prev AAB1/D3773A18, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32025 FPW
rmgr: XLOG        len (rec/tot):     51/  4407, tx: 1202295045, lsn: AAB1/D3775CC0, prev AAB1/D3774B78, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32026 FPW
rmgr: XLOG        len (rec/tot):     51/  4381, tx: 1202295045, lsn: AAB1/D3776E10, prev AAB1/D3775CC0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32027 FPW
rmgr: XLOG        len (rec/tot):     51/  4384, tx: 1202295045, lsn: AAB1/D3777F30, prev AAB1/D3776E10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32028 FPW
rmgr: XLOG        len (rec/tot):     51/  4400, tx: 1202295045, lsn: AAB1/D377B0A0, prev AAB1/D3779068, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32029 FPW
rmgr: XLOG        len (rec/tot):     51/  4406, tx: 1202295045, lsn: AAB1/D377C1E8, prev AAB1/D377B0A0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32030 FPW
rmgr: XLOG        len (rec/tot):     51/  4402, tx: 1202295045, lsn: AAB1/D377D320, prev AAB1/D377C1E8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32031 FPW
rmgr: XLOG        len (rec/tot):     51/  4374, tx: 1202295045, lsn: AAB1/D3782338, prev AAB1/D3780428, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32032 FPW
rmgr: XLOG        len (rec/tot):     51/  4410, tx: 1202295045, lsn: AAB1/D3783450, prev AAB1/D3782338, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32033 FPW
rmgr: XLOG        len (rec/tot):     51/  4420, tx: 1202295045, lsn: AAB1/D37845A8, prev AAB1/D3783450, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32034 FPW
rmgr: XLOG        len (rec/tot):     51/  4390, tx: 1202295045, lsn: AAB1/D37856F0, prev AAB1/D37845A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32035 FPW
rmgr: XLOG        len (rec/tot):     51/  4406, tx: 1202295045, lsn: AAB1/D3787478, prev AAB1/D3786830, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32036 FPW
rmgr: XLOG        len (rec/tot):     51/  4387, tx: 1202295045, lsn: AAB1/D37885C8, prev AAB1/D3787478, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32037 FPW
rmgr: XLOG        len (rec/tot):     51/  4422, tx: 1202295045, lsn: AAB1/D37896F0, prev AAB1/D37885C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32038 FPW
rmgr: XLOG        len (rec/tot):     51/  4382, tx: 1202295045, lsn: AAB1/D378B368, prev AAB1/D378B330, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32039 FPW
rmgr: XLOG        len (rec/tot):     51/  4393, tx: 1202295045, lsn: AAB1/D378E4D8, prev AAB1/D378E498, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32040 FPW
rmgr: XLOG        len (rec/tot):     51/  4391, tx: 1202295045, lsn: AAB1/D3795868, prev AAB1/D3795828, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32041 FPW
rmgr: XLOG        len (rec/tot):     51/  4377, tx: 1202295045, lsn: AAB1/D379C970, prev AAB1/D379C930, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32042 FPW
rmgr: XLOG        len (rec/tot):     51/  4411, tx: 1202295045, lsn: AAB1/D379FFD8, prev AAB1/D379F438, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32043 FPW
rmgr: XLOG        len (rec/tot):     51/  4373, tx: 1202295045, lsn: AAB1/D37A2EF0, prev AAB1/D37A1130, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32044 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D37A5C60, prev AAB1/D37A5C28, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32045 FPW
rmgr: XLOG        len (rec/tot):     51/  4362, tx: 1202295045, lsn: AAB1/D37A7960, prev AAB1/D37A6D80, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32046 FPW
rmgr: XLOG        len (rec/tot):     51/  4409, tx: 1202295045, lsn: AAB1/D37A9CE8, prev AAB1/D37A9CB0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32047 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D37AAE40, prev AAB1/D37A9CE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32048 FPW
rmgr: XLOG        len (rec/tot):     51/  4357, tx: 1202295045, lsn: AAB1/D37B02D0, prev AAB1/D37B0298, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32049 FPW
rmgr: XLOG        len (rec/tot):     51/  4359, tx: 1202295045, lsn: AAB1/D37B1410, prev AAB1/D37B13D8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32050 FPW
rmgr: XLOG        len (rec/tot):     51/  4369, tx: 1202295045, lsn: AAB1/D37B6C58, prev AAB1/D37B6C20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32051 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D37BB860, prev AAB1/D37B9CD0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32052 FPW
rmgr: XLOG        len (rec/tot):     51/  4358, tx: 1202295045, lsn: AAB1/D37C11D0, prev AAB1/D37C1198, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32053 FPW
rmgr: XLOG        len (rec/tot):     51/  4360, tx: 1202295045, lsn: AAB1/D37C4C50, prev AAB1/D37C4C10, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32054 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D37CA128, prev AAB1/D37CA0F0, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32055 FPW
rmgr: XLOG        len (rec/tot):     51/  4372, tx: 1202295045, lsn: AAB1/D37CF5A8, prev AAB1/D37CF570, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32056 FPW
rmgr: XLOG        len (rec/tot):     51/  4356, tx: 1202295045, lsn: AAB1/D37D2A40, prev AAB1/D37D2A00, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32057 FPW
rmgr: XLOG        len (rec/tot):     51/  4353, tx: 1202295045, lsn: AAB1/D37D5A78, prev AAB1/D37D5A40, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32058 FPW
rmgr: XLOG        len (rec/tot):     51/  4363, tx: 1202295045, lsn: AAB1/D37DAA58, prev AAB1/D37DAA20, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32059 FPW
rmgr: XLOG        len (rec/tot):     51/  4352, tx: 1202295045, lsn: AAB1/D37DFB28, prev AAB1/D37DFAE8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32060 FPW
rmgr: XLOG        len (rec/tot):     51/  2499, tx: 1202295045, lsn: AAB1/D38354A8, prev AAB1/D3835468, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 32061 FPW
rmgr: XLOG        len (rec/tot):     51/  1773, tx: 1202295045, lsn: AAB1/D3835E70, prev AAB1/D38354A8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 31925 FPW
rmgr: XLOG        len (rec/tot):     51/  1729, tx: 1202295045, lsn: AAB1/D3837208, prev AAB1/D38371C8, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 290 FPW
rmgr: XLOG        len (rec/tot):     51/    96, tx: 1202295045, lsn: AAB1/D38378D0, prev AAB1/D3837208, desc: FPI , blkref #0: rel 1663/16387/3569625749 blk 0 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3912E80, prev AAB1/D3912320, desc: NEW_CID rel 1663/16387/1259; tid 6/25; cmin: 4294967295, cmax: 0, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3912EC0, prev AAB1/D3912E80, desc: NEW_CID rel 1663/16387/1259; tid 6/24; cmin: 0, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     67/  1452, tx: 1202298790, lsn: AAB1/D3912F00, prev AAB1/D3912EC0, desc: HOT_UPDATE off 25 xmax 1202298790 flags 0x01 ; new off 24 xmax 0, blkref #0: rel 1663/16387/1259 blk 6 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39134B0, prev AAB1/D3912F00, desc: NEW_CID rel 1663/16387/1259; tid 6/27; cmin: 4294967295, cmax: 1, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39134F0, prev AAB1/D39134B0, desc: NEW_CID rel 1663/16387/1259; tid 6/36; cmin: 1, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3913530, prev AAB1/D39134F0, desc: HOT_UPDATE off 27 xmax 1202298790 flags 0x20 ; new off 36 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913580, prev AAB1/D3913530, desc: NEW_CID rel 1663/16387/1259; tid 6/28; cmin: 4294967295, cmax: 2, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39135C0, prev AAB1/D3913580, desc: NEW_CID rel 1663/16387/1259; tid 6/37; cmin: 2, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3913600, prev AAB1/D39135C0, desc: HOT_UPDATE off 28 xmax 1202298790 flags 0x20 ; new off 37 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913650, prev AAB1/D3913600, desc: NEW_CID rel 1663/16387/1259; tid 6/29; cmin: 4294967295, cmax: 3, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913690, prev AAB1/D3913650, desc: NEW_CID rel 1663/16387/1259; tid 6/38; cmin: 3, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D39136D0, prev AAB1/D3913690, desc: HOT_UPDATE off 29 xmax 1202298790 flags 0x20 ; new off 38 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913720, prev AAB1/D39136D0, desc: NEW_CID rel 1663/16387/1259; tid 6/30; cmin: 4294967295, cmax: 4, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913760, prev AAB1/D3913720, desc: NEW_CID rel 1663/16387/1259; tid 6/39; cmin: 4, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D39137A0, prev AAB1/D3913760, desc: HOT_UPDATE off 30 xmax 1202298790 flags 0x20 ; new off 39 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39137F0, prev AAB1/D39137A0, desc: NEW_CID rel 1663/16387/1259; tid 6/31; cmin: 4294967295, cmax: 5, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913830, prev AAB1/D39137F0, desc: NEW_CID rel 1663/16387/1259; tid 6/40; cmin: 5, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3913870, prev AAB1/D3913830, desc: HOT_UPDATE off 31 xmax 1202298790 flags 0x20 ; new off 40 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39138C0, prev AAB1/D3913870, desc: NEW_CID rel 1663/16387/1259; tid 6/32; cmin: 4294967295, cmax: 6, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913900, prev AAB1/D39138C0, desc: NEW_CID rel 1663/16387/1259; tid 6/41; cmin: 6, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3913940, prev AAB1/D3913900, desc: HOT_UPDATE off 32 xmax 1202298790 flags 0x20 ; new off 41 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913990, prev AAB1/D3913940, desc: NEW_CID rel 1663/16387/1259; tid 6/33; cmin: 4294967295, cmax: 7, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39139D0, prev AAB1/D3913990, desc: NEW_CID rel 1663/16387/1259; tid 6/42; cmin: 7, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3913A10, prev AAB1/D39139D0, desc: HOT_UPDATE off 33 xmax 1202298790 flags 0x20 ; new off 42 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913A60, prev AAB1/D3913A10, desc: NEW_CID rel 1663/16387/1259; tid 6/34; cmin: 4294967295, cmax: 8, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913AA0, prev AAB1/D3913A60, desc: NEW_CID rel 1663/16387/1259; tid 6/43; cmin: 8, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3913AE0, prev AAB1/D3913AA0, desc: HOT_UPDATE off 34 xmax 1202298790 flags 0x20 ; new off 43 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913B30, prev AAB1/D3913AE0, desc: NEW_CID rel 1663/16387/1259; tid 6/35; cmin: 4294967295, cmax: 9, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913B70, prev AAB1/D3913B30, desc: NEW_CID rel 1663/16387/1259; tid 6/44; cmin: 9, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3913BB0, prev AAB1/D3913B70, desc: HOT_UPDATE off 35 xmax 1202298790 flags 0x20 ; new off 44 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913C00, prev AAB1/D3913BB0, desc: NEW_CID rel 1663/16387/1259; tid 13/7; cmin: 4294967295, cmax: 10, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3913C40, prev AAB1/D3913C00, desc: NEW_CID rel 1663/16387/1259; tid 13/2; cmin: 10, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     67/   290, tx: 1202298790, lsn: AAB1/D3913C80, prev AAB1/D3913C40, desc: HOT_UPDATE off 7 xmax 1202298790 flags 0x01 ; new off 2 xmax 0, blkref #0: rel 1663/16387/1259 blk 13 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3915D90, prev AAB1/D3915D50, desc: NEW_CID rel 1663/16387/2615; tid 0/16; cmin: 4294967295, cmax: 11, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3915DD0, prev AAB1/D3915D90, desc: NEW_CID rel 1663/16387/2615; tid 0/19; cmin: 11, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     67/   647, tx: 1202298790, lsn: AAB1/D3917B20, prev AAB1/D3917AE0, desc: HOT_UPDATE off 16 xmax 1202298790 flags 0x00 ; new off 19 xmax 0, blkref #0: rel 1663/16387/2615 blk 0 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3925190, prev AAB1/D3925150, desc: NEW_CID rel 1663/16387/1259; tid 14/19; cmin: 4294967295, cmax: 12, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39251D0, prev AAB1/D3925190, desc: NEW_CID rel 1663/16387/1259; tid 14/4; cmin: 12, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     67/   400, tx: 1202298790, lsn: AAB1/D3925210, prev AAB1/D39251D0, desc: HOT_UPDATE off 19 xmax 1202298790 flags 0x01 ; new off 4 xmax 0, blkref #0: rel 1663/16387/1259 blk 14 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39253A0, prev AAB1/D3925210, desc: NEW_CID rel 1663/16387/1259; tid 14/20; cmin: 4294967295, cmax: 13, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39253E0, prev AAB1/D39253A0, desc: NEW_CID rel 1663/16387/1259; tid 14/5; cmin: 13, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3925420, prev AAB1/D39253E0, desc: HOT_UPDATE off 20 xmax 1202298790 flags 0x20 ; new off 5 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3925470, prev AAB1/D3925420, desc: NEW_CID rel 1663/16387/1259; tid 14/24; cmin: 4294967295, cmax: 14, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39254B0, prev AAB1/D3925470, desc: NEW_CID rel 1663/16387/1259; tid 14/6; cmin: 14, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D39254F0, prev AAB1/D39254B0, desc: HOT_UPDATE off 24 xmax 1202298790 flags 0x20 ; new off 6 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3925540, prev AAB1/D39254F0, desc: NEW_CID rel 1663/16387/2615; tid 0/17; cmin: 4294967295, cmax: 15, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3925580, prev AAB1/D3925540, desc: NEW_CID rel 1663/16387/2615; tid 0/20; cmin: 15, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     68/    68, tx: 1202298790, lsn: AAB1/D39255C0, prev AAB1/D3925580, desc: HOT_UPDATE off 17 xmax 1202298790 flags 0x20 ; new off 20 xmax 0, blkref #0: rel 1663/16387/2615 blk 0
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3925608, prev AAB1/D39255C0, desc: NEW_CID rel 1663/16387/1259; tid 21/13; cmin: 4294967295, cmax: 16, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3925648, prev AAB1/D3925608, desc: NEW_CID rel 1663/16387/1259; tid 21/3; cmin: 16, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     67/   314, tx: 1202298790, lsn: AAB1/D3925688, prev AAB1/D3925648, desc: HOT_UPDATE off 13 xmax 1202298790 flags 0x01 ; new off 3 xmax 0, blkref #0: rel 1663/16387/1259 blk 21 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39257C8, prev AAB1/D3925688, desc: NEW_CID rel 1663/16387/1259; tid 21/14; cmin: 4294967295, cmax: 17, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3925808, prev AAB1/D39257C8, desc: NEW_CID rel 1663/16387/1259; tid 21/4; cmin: 17, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3925848, prev AAB1/D3925808, desc: HOT_UPDATE off 14 xmax 1202298790 flags 0x20 ; new off 4 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39264A0, prev AAB1/D3925898, desc: NEW_CID rel 1663/16387/1259; tid 22/7; cmin: 4294967295, cmax: 18, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39264E0, prev AAB1/D39264A0, desc: NEW_CID rel 1663/16387/1259; tid 22/2; cmin: 18, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     67/   257, tx: 1202298790, lsn: AAB1/D3926520, prev AAB1/D39264E0, desc: HOT_UPDATE off 7 xmax 1202298790 flags 0x01 ; new off 2 xmax 0, blkref #0: rel 1663/16387/1259 blk 22 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3926628, prev AAB1/D3926520, desc: NEW_CID rel 1663/16387/1259; tid 17/7; cmin: 4294967295, cmax: 19, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3926668, prev AAB1/D3926628, desc: NEW_CID rel 1663/16387/1259; tid 17/3; cmin: 19, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     67/   322, tx: 1202298790, lsn: AAB1/D39266A8, prev AAB1/D3926668, desc: HOT_UPDATE off 7 xmax 1202298790 flags 0x01 ; new off 3 xmax 0, blkref #0: rel 1663/16387/1259 blk 17 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39267F0, prev AAB1/D39266A8, desc: NEW_CID rel 1663/16387/1259; tid 17/8; cmin: 4294967295, cmax: 20, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3926830, prev AAB1/D39267F0, desc: NEW_CID rel 1663/16387/1259; tid 17/4; cmin: 20, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298790, lsn: AAB1/D3926870, prev AAB1/D3926830, desc: HOT_UPDATE off 8 xmax 1202298790 flags 0x20 ; new off 4 xmax 0, blkref #0: rel 1663/16387/1259 blk 17
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D39268C0, prev AAB1/D3926870, desc: NEW_CID rel 1663/16387/2615; tid 0/18; cmin: 4294967295, cmax: 21, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298790, lsn: AAB1/D3926900, prev AAB1/D39268C0, desc: NEW_CID rel 1663/16387/2615; tid 0/21; cmin: 21, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     68/    68, tx: 1202298790, lsn: AAB1/D3926940, prev AAB1/D3926900, desc: HOT_UPDATE off 18 xmax 1202298790 flags 0x20 ; new off 21 xmax 0, blkref #0: rel 1663/16387/2615 blk 0
rmgr: Transaction len (rec/tot):   1061/  1061, tx: 1202298790, lsn: AAB1/D3927580, prev AAB1/D3926988, desc: COMMIT 2023-10-04 22:41:23.863979 UTC; inval msgs: catcache 36 catcache 35 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 36 catcache 35 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 36 catcache 35 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 relcache 132091617 relcache 132091644 relcache 132091635 relcache 132091646 relcache 132091619 relcache 3498102916 relcache 16407 relcache 16400 relcache 3484880351 relcache 3561211565 relcache 3552097563 relcache 3562785676 relcache 3553852461 relcache 3546526549 relcache 3481184220 relcache 3550681910 relcache 3557956661 relcache 3561879248 relcache 3566558198
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C1B0, prev AAB1/D393C170, desc: NEW_CID rel 1663/16387/1259; tid 6/24; cmin: 4294967295, cmax: 0, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C1F0, prev AAB1/D393C1B0, desc: NEW_CID rel 1663/16387/1259; tid 6/45; cmin: 0, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D393C230, prev AAB1/D393C1F0, desc: HOT_UPDATE off 24 xmax 1202298791 flags 0x20 ; new off 45 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C280, prev AAB1/D393C230, desc: NEW_CID rel 1663/16387/1259; tid 6/36; cmin: 4294967295, cmax: 1, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C2C0, prev AAB1/D393C280, desc: NEW_CID rel 1663/16387/1259; tid 6/46; cmin: 1, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D393C300, prev AAB1/D393C2C0, desc: HOT_UPDATE off 36 xmax 1202298791 flags 0x20 ; new off 46 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C350, prev AAB1/D393C300, desc: NEW_CID rel 1663/16387/1259; tid 6/37; cmin: 4294967295, cmax: 2, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C390, prev AAB1/D393C350, desc: NEW_CID rel 1663/16387/1259; tid 6/47; cmin: 2, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D393C3D0, prev AAB1/D393C390, desc: HOT_UPDATE off 37 xmax 1202298791 flags 0x20 ; new off 47 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C420, prev AAB1/D393C3D0, desc: NEW_CID rel 1663/16387/1259; tid 6/38; cmin: 4294967295, cmax: 3, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C460, prev AAB1/D393C420, desc: NEW_CID rel 1663/16387/1259; tid 6/48; cmin: 3, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D393C4A0, prev AAB1/D393C460, desc: HOT_UPDATE off 38 xmax 1202298791 flags 0x20 ; new off 48 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C4F0, prev AAB1/D393C4A0, desc: NEW_CID rel 1663/16387/1259; tid 6/39; cmin: 4294967295, cmax: 4, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C530, prev AAB1/D393C4F0, desc: NEW_CID rel 1663/16387/1259; tid 6/49; cmin: 4, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D393C570, prev AAB1/D393C530, desc: HOT_UPDATE off 39 xmax 1202298791 flags 0x20 ; new off 49 xmax 0, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D393C5C0, prev AAB1/D393C570, desc: LOCK off 40: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C5F8, prev AAB1/D393C5C0, desc: NEW_CID rel 1663/16387/1259; tid 6/40; cmin: 4294967295, cmax: 5, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393C638, prev AAB1/D393C5F8, desc: NEW_CID rel 1663/16387/1259; tid 1/4; cmin: 5, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     75/  1532, tx: 1202298791, lsn: AAB1/D393D218, prev AAB1/D393C678, desc: UPDATE off 40 xmax 1202298791 flags 0x02 ; new off 4 xmax 0, blkref #0: rel 1663/16387/1259 blk 1 FPW, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393D818, prev AAB1/D393D218, desc: INSERT_LEAF off 10, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D393D858, prev AAB1/D393D818, desc: INSERT_LEAF off 18, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393E2E8, prev AAB1/D393D8B8, desc: INSERT_LEAF off 65, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D393E368, prev AAB1/D393E328, desc: LOCK off 41: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393E3A0, prev AAB1/D393E368, desc: NEW_CID rel 1663/16387/1259; tid 6/41; cmin: 4294967295, cmax: 6, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393E3E0, prev AAB1/D393E3A0, desc: NEW_CID rel 1663/16387/1259; tid 1/5; cmin: 6, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D393E420, prev AAB1/D393E3E0, desc: UPDATE off 41 xmax 1202298791 flags 0x00 ; new off 5 xmax 0, blkref #0: rel 1663/16387/1259 blk 1, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393E538, prev AAB1/D393E420, desc: INSERT_LEAF off 23, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D393E578, prev AAB1/D393E538, desc: INSERT_LEAF off 8, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393E5D8, prev AAB1/D393E578, desc: INSERT_LEAF off 78, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D393E618, prev AAB1/D393E5D8, desc: LOCK off 42: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393E650, prev AAB1/D393E618, desc: NEW_CID rel 1663/16387/1259; tid 6/42; cmin: 4294967295, cmax: 7, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393E690, prev AAB1/D393E650, desc: NEW_CID rel 1663/16387/1259; tid 1/6; cmin: 7, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D393E6D0, prev AAB1/D393E690, desc: UPDATE off 42 xmax 1202298791 flags 0x00 ; new off 6 xmax 0, blkref #0: rel 1663/16387/1259 blk 1, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393E7E8, prev AAB1/D393E6D0, desc: INSERT_LEAF off 40, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D393E828, prev AAB1/D393E7E8, desc: INSERT_LEAF off 11, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393E888, prev AAB1/D393E828, desc: INSERT_LEAF off 95, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D393E8C8, prev AAB1/D393E888, desc: LOCK off 43: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393E900, prev AAB1/D393E8C8, desc: NEW_CID rel 1663/16387/1259; tid 6/43; cmin: 4294967295, cmax: 8, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393E940, prev AAB1/D393E900, desc: NEW_CID rel 1663/16387/1259; tid 1/7; cmin: 8, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D393E980, prev AAB1/D393E940, desc: UPDATE off 43 xmax 1202298791 flags 0x00 ; new off 7 xmax 0, blkref #0: rel 1663/16387/1259 blk 1, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393EA98, prev AAB1/D393E980, desc: INSERT_LEAF off 19, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     55/   809, tx: 1202298791, lsn: AAB1/D393EAD8, prev AAB1/D393EA98, desc: INSERT_LEAF off 22, blkref #0: rel 1663/16387/2663 blk 7 FPW
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393EE08, prev AAB1/D393EAD8, desc: INSERT_LEAF off 74, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D393EE48, prev AAB1/D393EE08, desc: LOCK off 44: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393EE80, prev AAB1/D393EE48, desc: NEW_CID rel 1663/16387/1259; tid 6/44; cmin: 4294967295, cmax: 9, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393EEC0, prev AAB1/D393EE80, desc: NEW_CID rel 1663/16387/1259; tid 1/9; cmin: 9, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D393EF00, prev AAB1/D393EEC0, desc: UPDATE off 44 xmax 1202298791 flags 0x00 ; new off 9 xmax 0, blkref #0: rel 1663/16387/1259 blk 1, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393F018, prev AAB1/D393EF00, desc: INSERT_LEAF off 33, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D393F058, prev AAB1/D393F018, desc: INSERT_LEAF off 29, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D393F0B8, prev AAB1/D393F058, desc: INSERT_LEAF off 88, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393F0F8, prev AAB1/D393F0B8, desc: NEW_CID rel 1663/16387/1259; tid 13/2; cmin: 4294967295, cmax: 10, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D393F138, prev AAB1/D393F0F8, desc: NEW_CID rel 1663/16387/1259; tid 13/3; cmin: 10, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D393F178, prev AAB1/D393F138, desc: HOT_UPDATE off 2 xmax 1202298791 flags 0x20 ; new off 3 xmax 0, blkref #0: rel 1663/16387/1259 blk 13
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3942FB8, prev AAB1/D3941180, desc: NEW_CID rel 1663/16387/2615; tid 0/19; cmin: 4294967295, cmax: 11, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3942FF8, prev AAB1/D3942FB8, desc: NEW_CID rel 1663/16387/2615; tid 0/22; cmin: 11, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     68/    68, tx: 1202298791, lsn: AAB1/D3943038, prev AAB1/D3942FF8, desc: HOT_UPDATE off 19 xmax 1202298791 flags 0x20 ; new off 22 xmax 0, blkref #0: rel 1663/16387/2615 blk 0
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39461E0, prev AAB1/D39461A0, desc: NEW_CID rel 1663/16387/1259; tid 1/4; cmin: 5, cmax: 12, combo: 0
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3946220, prev AAB1/D39461E0, desc: NEW_CID rel 1663/16387/1259; tid 1/10; cmin: 12, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3946260, prev AAB1/D3946220, desc: HOT_UPDATE off 4 xmax 1202298791 flags 0x20 ; new off 10 xmax 0, blkref #0: rel 1663/16387/1259 blk 1
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39462B0, prev AAB1/D3946260, desc: NEW_CID rel 1663/16387/1259; tid 1/5; cmin: 6, cmax: 13, combo: 1
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39462F0, prev AAB1/D39462B0, desc: NEW_CID rel 1663/16387/1259; tid 1/11; cmin: 13, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3946330, prev AAB1/D39462F0, desc: HOT_UPDATE off 5 xmax 1202298791 flags 0x20 ; new off 11 xmax 0, blkref #0: rel 1663/16387/1259 blk 1
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3946380, prev AAB1/D3946330, desc: NEW_CID rel 1663/16387/1259; tid 1/6; cmin: 7, cmax: 14, combo: 2
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39463C0, prev AAB1/D3946380, desc: NEW_CID rel 1663/16387/1259; tid 1/12; cmin: 14, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3946400, prev AAB1/D39463C0, desc: HOT_UPDATE off 6 xmax 1202298791 flags 0x20 ; new off 12 xmax 0, blkref #0: rel 1663/16387/1259 blk 1
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3946450, prev AAB1/D3946400, desc: NEW_CID rel 1663/16387/1259; tid 1/7; cmin: 8, cmax: 15, combo: 3
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3946490, prev AAB1/D3946450, desc: NEW_CID rel 1663/16387/1259; tid 1/13; cmin: 15, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D39464D0, prev AAB1/D3946490, desc: HOT_UPDATE off 7 xmax 1202298791 flags 0x20 ; new off 13 xmax 0, blkref #0: rel 1663/16387/1259 blk 1
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3946520, prev AAB1/D39464D0, desc: LOCK off 9: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 1
rmgr: XLOG        len (rec/tot):     49/   257, tx: 1202298791, lsn: AAB1/D3947040, prev AAB1/D3947000, desc: FPI_FOR_HINT , blkref #0: rel 1663/16387/1259 fork fsm blk 2 FPW
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3947148, prev AAB1/D3947040, desc: NEW_CID rel 1663/16387/1259; tid 1/9; cmin: 9, cmax: 16, combo: 4
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3947188, prev AAB1/D3947148, desc: NEW_CID rel 1663/16387/1259; tid 5/26; cmin: 16, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     75/  1455, tx: 1202298791, lsn: AAB1/D394A658, prev AAB1/D394A618, desc: UPDATE off 9 xmax 1202298791 flags 0x02 ; new off 26 xmax 0, blkref #0: rel 1663/16387/1259 blk 5 FPW, blkref #1: rel 1663/16387/1259 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394AC08, prev AAB1/D394A658, desc: INSERT_LEAF off 34, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D394AC48, prev AAB1/D394AC08, desc: INSERT_LEAF off 30, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394ACA8, prev AAB1/D394AC48, desc: INSERT_LEAF off 89, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D394ACE8, prev AAB1/D394ACA8, desc: LOCK off 45: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394AD20, prev AAB1/D394ACE8, desc: NEW_CID rel 1663/16387/1259; tid 6/45; cmin: 0, cmax: 17, combo: 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394AD60, prev AAB1/D394AD20, desc: NEW_CID rel 1663/16387/1259; tid 5/28; cmin: 17, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D394ADA0, prev AAB1/D394AD60, desc: UPDATE off 45 xmax 1202298791 flags 0x00 ; new off 28 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394AEB8, prev AAB1/D394ADA0, desc: INSERT_LEAF off 48, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D394AEF8, prev AAB1/D394AEB8, desc: INSERT_LEAF off 25, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394AF58, prev AAB1/D394AEF8, desc: INSERT_LEAF off 103, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D394AF98, prev AAB1/D394AF58, desc: LOCK off 46: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394AFD0, prev AAB1/D394AF98, desc: NEW_CID rel 1663/16387/1259; tid 6/46; cmin: 1, cmax: 18, combo: 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394B010, prev AAB1/D394AFD0, desc: NEW_CID rel 1663/16387/1259; tid 5/29; cmin: 18, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D394B050, prev AAB1/D394B010, desc: UPDATE off 46 xmax 1202298791 flags 0x00 ; new off 29 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394B168, prev AAB1/D394B050, desc: INSERT_LEAF off 39, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     88/    88, tx: 1202298791, lsn: AAB1/D394B1A8, prev AAB1/D394B168, desc: INSERT_LEAF off 25, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394B200, prev AAB1/D394B1A8, desc: INSERT_LEAF off 94, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D394B240, prev AAB1/D394B200, desc: LOCK off 47: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394B278, prev AAB1/D394B240, desc: NEW_CID rel 1663/16387/1259; tid 6/47; cmin: 2, cmax: 19, combo: 7
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394B2B8, prev AAB1/D394B278, desc: NEW_CID rel 1663/16387/1259; tid 5/30; cmin: 19, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D394B2F8, prev AAB1/D394B2B8, desc: UPDATE off 47 xmax 1202298791 flags 0x00 ; new off 30 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394B410, prev AAB1/D394B2F8, desc: INSERT_LEAF off 29, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D394B450, prev AAB1/D394B410, desc: INSERT_LEAF off 23, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394B4B0, prev AAB1/D394B450, desc: INSERT_LEAF off 84, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D394B4F0, prev AAB1/D394B4B0, desc: LOCK off 48: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394B528, prev AAB1/D394B4F0, desc: NEW_CID rel 1663/16387/1259; tid 6/48; cmin: 3, cmax: 20, combo: 8
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394B568, prev AAB1/D394B528, desc: NEW_CID rel 1663/16387/1259; tid 5/31; cmin: 20, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D394B5A8, prev AAB1/D394B568, desc: UPDATE off 48 xmax 1202298791 flags 0x00 ; new off 31 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394B6C0, prev AAB1/D394B5A8, desc: INSERT_LEAF off 15, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D394B700, prev AAB1/D394B6C0, desc: INSERT_LEAF off 28, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394B760, prev AAB1/D394B700, desc: INSERT_LEAF off 70, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D394C468, prev AAB1/D394B7A0, desc: LOCK off 49: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394C4A0, prev AAB1/D394C468, desc: NEW_CID rel 1663/16387/1259; tid 6/49; cmin: 4, cmax: 21, combo: 9
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394C4E0, prev AAB1/D394C4A0, desc: NEW_CID rel 1663/16387/1259; tid 5/32; cmin: 21, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D394C520, prev AAB1/D394C4E0, desc: UPDATE off 49 xmax 1202298791 flags 0x00 ; new off 32 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 6
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394C638, prev AAB1/D394C520, desc: INSERT_LEAF off 1, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D394C6B8, prev AAB1/D394C678, desc: INSERT_LEAF off 16, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D394C718, prev AAB1/D394C6B8, desc: INSERT_LEAF off 57, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394C758, prev AAB1/D394C718, desc: NEW_CID rel 1663/16387/1259; tid 13/3; cmin: 10, cmax: 22, combo: 10
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D394C798, prev AAB1/D394C758, desc: NEW_CID rel 1663/16387/1259; tid 13/4; cmin: 22, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D394C7D8, prev AAB1/D394C798, desc: HOT_UPDATE off 3 xmax 1202298791 flags 0x20 ; new off 4 xmax 0, blkref #0: rel 1663/16387/1259 blk 13
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3954968, prev AAB1/D3954928, desc: LOCK off 10: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 1
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39549A0, prev AAB1/D3954968, desc: NEW_CID rel 1663/16387/1259; tid 1/10; cmin: 12, cmax: 23, combo: 11
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39549E0, prev AAB1/D39549A0, desc: NEW_CID rel 1663/16387/1259; tid 5/33; cmin: 23, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3954A20, prev AAB1/D39549E0, desc: UPDATE off 10 xmax 1202298791 flags 0x00 ; new off 33 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3954B38, prev AAB1/D3954A20, desc: INSERT_LEAF off 12, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3954B78, prev AAB1/D3954B38, desc: INSERT_LEAF off 22, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3954BD8, prev AAB1/D3954B78, desc: INSERT_LEAF off 67, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3954C18, prev AAB1/D3954BD8, desc: LOCK off 11: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 1
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3954C50, prev AAB1/D3954C18, desc: NEW_CID rel 1663/16387/1259; tid 1/11; cmin: 13, cmax: 24, combo: 12
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3954C90, prev AAB1/D3954C50, desc: NEW_CID rel 1663/16387/1259; tid 5/34; cmin: 24, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3954CD0, prev AAB1/D3954C90, desc: UPDATE off 11 xmax 1202298791 flags 0x00 ; new off 34 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3954DE8, prev AAB1/D3954CD0, desc: INSERT_LEAF off 28, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3954E28, prev AAB1/D3954DE8, desc: INSERT_LEAF off 9, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3954E88, prev AAB1/D3954E28, desc: INSERT_LEAF off 83, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3954EC8, prev AAB1/D3954E88, desc: LOCK off 12: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 1
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3954F00, prev AAB1/D3954EC8, desc: NEW_CID rel 1663/16387/1259; tid 1/12; cmin: 14, cmax: 25, combo: 13
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3954F40, prev AAB1/D3954F00, desc: NEW_CID rel 1663/16387/1259; tid 5/35; cmin: 25, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3954F80, prev AAB1/D3954F40, desc: UPDATE off 12 xmax 1202298791 flags 0x00 ; new off 35 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3955098, prev AAB1/D3954F80, desc: INSERT_LEAF off 50, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D39550D8, prev AAB1/D3955098, desc: INSERT_LEAF off 13, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3955138, prev AAB1/D39550D8, desc: INSERT_LEAF off 105, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3955178, prev AAB1/D3955138, desc: LOCK off 13: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 1
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39551B0, prev AAB1/D3955178, desc: NEW_CID rel 1663/16387/1259; tid 1/13; cmin: 15, cmax: 26, combo: 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39551F0, prev AAB1/D39551B0, desc: NEW_CID rel 1663/16387/1259; tid 5/36; cmin: 26, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3955230, prev AAB1/D39551F0, desc: UPDATE off 13 xmax 1202298791 flags 0x00 ; new off 36 xmax 0, blkref #0: rel 1663/16387/1259 blk 5, blkref #1: rel 1663/16387/1259 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3955348, prev AAB1/D3955230, desc: INSERT_LEAF off 23, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     88/    88, tx: 1202298791, lsn: AAB1/D3955388, prev AAB1/D3955348, desc: INSERT_LEAF off 23, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D39553E0, prev AAB1/D3955388, desc: INSERT_LEAF off 78, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3955420, prev AAB1/D39553E0, desc: NEW_CID rel 1663/16387/1259; tid 5/26; cmin: 16, cmax: 27, combo: 15
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3955460, prev AAB1/D3955420, desc: NEW_CID rel 1663/16387/1259; tid 5/37; cmin: 27, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D39554A0, prev AAB1/D3955460, desc: HOT_UPDATE off 26 xmax 1202298791 flags 0x20 ; new off 37 xmax 0, blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39554F0, prev AAB1/D39554A0, desc: NEW_CID rel 1663/16387/1259; tid 5/28; cmin: 17, cmax: 28, combo: 16
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3955530, prev AAB1/D39554F0, desc: NEW_CID rel 1663/16387/1259; tid 5/38; cmin: 28, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3955570, prev AAB1/D3955530, desc: HOT_UPDATE off 28 xmax 1202298791 flags 0x20 ; new off 38 xmax 0, blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39555C0, prev AAB1/D3955570, desc: NEW_CID rel 1663/16387/1259; tid 5/29; cmin: 18, cmax: 29, combo: 17
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3955600, prev AAB1/D39555C0, desc: NEW_CID rel 1663/16387/1259; tid 5/39; cmin: 29, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3955640, prev AAB1/D3955600, desc: HOT_UPDATE off 29 xmax 1202298791 flags 0x20 ; new off 39 xmax 0, blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3955690, prev AAB1/D3955640, desc: LOCK off 30: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39556C8, prev AAB1/D3955690, desc: NEW_CID rel 1663/16387/1259; tid 5/30; cmin: 19, cmax: 30, combo: 18
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3955708, prev AAB1/D39556C8, desc: NEW_CID rel 1663/16387/1259; tid 7/4; cmin: 30, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     75/  1768, tx: 1202298791, lsn: AAB1/D39563B0, prev AAB1/D3956378, desc: UPDATE off 30 xmax 1202298791 flags 0x02 ; new off 4 xmax 0, blkref #0: rel 1663/16387/1259 blk 7 FPW, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3956A98, prev AAB1/D39563B0, desc: INSERT_LEAF off 36, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3956AD8, prev AAB1/D3956A98, desc: INSERT_LEAF off 29, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3956B38, prev AAB1/D3956AD8, desc: INSERT_LEAF off 91, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3956B78, prev AAB1/D3956B38, desc: LOCK off 31: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3956BB0, prev AAB1/D3956B78, desc: NEW_CID rel 1663/16387/1259; tid 5/31; cmin: 20, cmax: 31, combo: 19
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3956BF0, prev AAB1/D3956BB0, desc: NEW_CID rel 1663/16387/1259; tid 7/6; cmin: 31, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3956C30, prev AAB1/D3956BF0, desc: UPDATE off 31 xmax 1202298791 flags 0x00 ; new off 6 xmax 0, blkref #0: rel 1663/16387/1259 blk 7, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3956D48, prev AAB1/D3956C30, desc: INSERT_LEAF off 19, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3956D88, prev AAB1/D3956D48, desc: INSERT_LEAF off 31, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3956DE8, prev AAB1/D3956D88, desc: INSERT_LEAF off 74, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3956E28, prev AAB1/D3956DE8, desc: LOCK off 32: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3956E60, prev AAB1/D3956E28, desc: NEW_CID rel 1663/16387/1259; tid 5/32; cmin: 21, cmax: 32, combo: 20
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3956EA0, prev AAB1/D3956E60, desc: NEW_CID rel 1663/16387/1259; tid 7/8; cmin: 32, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3956EE0, prev AAB1/D3956EA0, desc: UPDATE off 32 xmax 1202298791 flags 0x00 ; new off 8 xmax 0, blkref #0: rel 1663/16387/1259 blk 7, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3956FF8, prev AAB1/D3956EE0, desc: INSERT_LEAF off 3, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3957038, prev AAB1/D3956FF8, desc: INSERT_LEAF off 20, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3957098, prev AAB1/D3957038, desc: INSERT_LEAF off 59, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39570D8, prev AAB1/D3957098, desc: NEW_CID rel 1663/16387/1259; tid 13/4; cmin: 22, cmax: 33, combo: 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3957118, prev AAB1/D39570D8, desc: NEW_CID rel 1663/16387/1259; tid 13/5; cmin: 33, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3957158, prev AAB1/D3957118, desc: HOT_UPDATE off 4 xmax 1202298791 flags 0x20 ; new off 5 xmax 0, blkref #0: rel 1663/16387/1259 blk 13
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3959238, prev AAB1/D39591F8, desc: LOCK off 33: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3959270, prev AAB1/D3959238, desc: NEW_CID rel 1663/16387/1259; tid 5/33; cmin: 23, cmax: 34, combo: 22
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39592B0, prev AAB1/D3959270, desc: NEW_CID rel 1663/16387/1259; tid 7/10; cmin: 34, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D39592F0, prev AAB1/D39592B0, desc: UPDATE off 33 xmax 1202298791 flags 0x00 ; new off 10 xmax 0, blkref #0: rel 1663/16387/1259 blk 7, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3959408, prev AAB1/D39592F0, desc: INSERT_LEAF off 15, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3959448, prev AAB1/D3959408, desc: INSERT_LEAF off 27, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D39594A8, prev AAB1/D3959448, desc: INSERT_LEAF off 70, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D39594E8, prev AAB1/D39594A8, desc: LOCK off 34: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3959520, prev AAB1/D39594E8, desc: NEW_CID rel 1663/16387/1259; tid 5/34; cmin: 24, cmax: 35, combo: 23
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3959560, prev AAB1/D3959520, desc: NEW_CID rel 1663/16387/1259; tid 10/46; cmin: 35, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     75/  1603, tx: 1202298791, lsn: AAB1/D39595A0, prev AAB1/D3959560, desc: UPDATE off 34 xmax 1202298791 flags 0x02 ; new off 46 xmax 0, blkref #0: rel 1663/16387/1259 blk 10 FPW, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3959BE8, prev AAB1/D39595A0, desc: INSERT_LEAF off 34, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3959C28, prev AAB1/D3959BE8, desc: INSERT_LEAF off 11, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3959C88, prev AAB1/D3959C28, desc: INSERT_LEAF off 89, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3959CC8, prev AAB1/D3959C88, desc: LOCK off 35: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3959D00, prev AAB1/D3959CC8, desc: NEW_CID rel 1663/16387/1259; tid 5/35; cmin: 25, cmax: 36, combo: 24
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3959D40, prev AAB1/D3959D00, desc: NEW_CID rel 1663/16387/1259; tid 11/2; cmin: 36, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     75/  1840, tx: 1202298791, lsn: AAB1/D395BDC0, prev AAB1/D3959D80, desc: UPDATE off 35 xmax 1202298791 flags 0x02 ; new off 2 xmax 0, blkref #0: rel 1663/16387/1259 blk 11 FPW, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395C508, prev AAB1/D395BDC0, desc: INSERT_LEAF off 58, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D395C548, prev AAB1/D395C508, desc: INSERT_LEAF off 16, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395C5A8, prev AAB1/D395C548, desc: INSERT_LEAF off 113, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D395C5E8, prev AAB1/D395C5A8, desc: LOCK off 36: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395C620, prev AAB1/D395C5E8, desc: NEW_CID rel 1663/16387/1259; tid 5/36; cmin: 26, cmax: 37, combo: 25
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395C660, prev AAB1/D395C620, desc: NEW_CID rel 1663/16387/1259; tid 12/2; cmin: 37, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     75/   990, tx: 1202298791, lsn: AAB1/D395E640, prev AAB1/D395E568, desc: UPDATE off 36 xmax 1202298791 flags 0x02 ; new off 2 xmax 0, blkref #0: rel 1663/16387/1259 blk 12 FPW, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395EA20, prev AAB1/D395E640, desc: INSERT_LEAF off 28, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     88/    88, tx: 1202298791, lsn: AAB1/D395EA60, prev AAB1/D395EA20, desc: INSERT_LEAF off 25, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395EAB8, prev AAB1/D395EA60, desc: INSERT_LEAF off 83, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D395EAF8, prev AAB1/D395EAB8, desc: LOCK off 37: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395EB30, prev AAB1/D395EAF8, desc: NEW_CID rel 1663/16387/1259; tid 5/37; cmin: 27, cmax: 38, combo: 26
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395EB70, prev AAB1/D395EB30, desc: NEW_CID rel 1663/16387/1259; tid 12/21; cmin: 38, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D395EBB0, prev AAB1/D395EB70, desc: UPDATE off 37 xmax 1202298791 flags 0x00 ; new off 21 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395ECC8, prev AAB1/D395EBB0, desc: INSERT_LEAF off 48, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D395ED08, prev AAB1/D395ECC8, desc: INSERT_LEAF off 37, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395ED68, prev AAB1/D395ED08, desc: INSERT_LEAF off 103, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D395EDA8, prev AAB1/D395ED68, desc: LOCK off 38: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395EDE0, prev AAB1/D395EDA8, desc: NEW_CID rel 1663/16387/1259; tid 5/38; cmin: 28, cmax: 39, combo: 27
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395EE20, prev AAB1/D395EDE0, desc: NEW_CID rel 1663/16387/1259; tid 12/32; cmin: 39, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D395EE60, prev AAB1/D395EE20, desc: UPDATE off 38 xmax 1202298791 flags 0x00 ; new off 32 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395EF78, prev AAB1/D395EE60, desc: INSERT_LEAF off 66, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D395EFB8, prev AAB1/D395EF78, desc: INSERT_LEAF off 37, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395F018, prev AAB1/D395EFB8, desc: INSERT_LEAF off 121, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D395F058, prev AAB1/D395F018, desc: LOCK off 39: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 5
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395F090, prev AAB1/D395F058, desc: NEW_CID rel 1663/16387/1259; tid 5/39; cmin: 29, cmax: 40, combo: 28
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395F0D0, prev AAB1/D395F090, desc: NEW_CID rel 1663/16387/1259; tid 12/40; cmin: 40, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D395F110, prev AAB1/D395F0D0, desc: UPDATE off 39 xmax 1202298791 flags 0x00 ; new off 40 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 5
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395F228, prev AAB1/D395F110, desc: INSERT_LEAF off 54, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     88/    88, tx: 1202298791, lsn: AAB1/D395F268, prev AAB1/D395F228, desc: INSERT_LEAF off 29, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395F2C0, prev AAB1/D395F268, desc: INSERT_LEAF off 109, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D395F300, prev AAB1/D395F2C0, desc: LOCK off 4: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 7
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395F338, prev AAB1/D395F300, desc: NEW_CID rel 1663/16387/1259; tid 7/4; cmin: 30, cmax: 41, combo: 29
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395F378, prev AAB1/D395F338, desc: NEW_CID rel 1663/16387/1259; tid 12/41; cmin: 41, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D395F3B8, prev AAB1/D395F378, desc: UPDATE off 4 xmax 1202298791 flags 0x00 ; new off 41 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395F4D0, prev AAB1/D395F3B8, desc: INSERT_LEAF off 42, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D395F510, prev AAB1/D395F4D0, desc: INSERT_LEAF off 34, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395F570, prev AAB1/D395F510, desc: INSERT_LEAF off 97, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D395F5B0, prev AAB1/D395F570, desc: LOCK off 6: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 7
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395F5E8, prev AAB1/D395F5B0, desc: NEW_CID rel 1663/16387/1259; tid 7/6; cmin: 31, cmax: 42, combo: 30
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395F628, prev AAB1/D395F5E8, desc: NEW_CID rel 1663/16387/1259; tid 12/42; cmin: 42, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D395F668, prev AAB1/D395F628, desc: UPDATE off 6 xmax 1202298791 flags 0x00 ; new off 42 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395F780, prev AAB1/D395F668, desc: INSERT_LEAF off 22, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D395F7C0, prev AAB1/D395F780, desc: INSERT_LEAF off 34, blkref #0: rel 1663/16387/2663 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395F820, prev AAB1/D395F7C0, desc: INSERT_LEAF off 77, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D395F860, prev AAB1/D395F820, desc: LOCK off 8: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 7
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395F898, prev AAB1/D395F860, desc: NEW_CID rel 1663/16387/1259; tid 7/8; cmin: 32, cmax: 43, combo: 31
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395F8D8, prev AAB1/D395F898, desc: NEW_CID rel 1663/16387/1259; tid 12/43; cmin: 43, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D395F918, prev AAB1/D395F8D8, desc: UPDATE off 8 xmax 1202298791 flags 0x00 ; new off 43 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395FA30, prev AAB1/D395F918, desc: INSERT_LEAF off 4, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D395FA70, prev AAB1/D395FA30, desc: INSERT_LEAF off 23, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D395FAD0, prev AAB1/D395FA70, desc: INSERT_LEAF off 60, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395FB10, prev AAB1/D395FAD0, desc: NEW_CID rel 1663/16387/1259; tid 13/5; cmin: 33, cmax: 44, combo: 32
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D395FB50, prev AAB1/D395FB10, desc: NEW_CID rel 1663/16387/1259; tid 13/6; cmin: 44, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D395FB90, prev AAB1/D395FB50, desc: HOT_UPDATE off 5 xmax 1202298791 flags 0x20 ; new off 6 xmax 0, blkref #0: rel 1663/16387/1259 blk 13
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3960698, prev AAB1/D3960668, desc: LOCK off 10: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 7
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39606D0, prev AAB1/D3960698, desc: NEW_CID rel 1663/16387/1259; tid 7/10; cmin: 34, cmax: 45, combo: 33
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3960710, prev AAB1/D39606D0, desc: NEW_CID rel 1663/16387/1259; tid 12/44; cmin: 45, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3960750, prev AAB1/D3960710, desc: UPDATE off 10 xmax 1202298791 flags 0x00 ; new off 44 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 7
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3960868, prev AAB1/D3960750, desc: INSERT_LEAF off 17, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D39608A8, prev AAB1/D3960868, desc: INSERT_LEAF off 31, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3960908, prev AAB1/D39608A8, desc: INSERT_LEAF off 72, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3960948, prev AAB1/D3960908, desc: LOCK off 46: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 10
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3960980, prev AAB1/D3960948, desc: NEW_CID rel 1663/16387/1259; tid 10/46; cmin: 35, cmax: 46, combo: 34
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39609C0, prev AAB1/D3960980, desc: NEW_CID rel 1663/16387/1259; tid 12/45; cmin: 46, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3960A00, prev AAB1/D39609C0, desc: UPDATE off 46 xmax 1202298791 flags 0x00 ; new off 45 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 10
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3960B18, prev AAB1/D3960A00, desc: INSERT_LEAF off 39, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3960B58, prev AAB1/D3960B18, desc: INSERT_LEAF off 12, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3960BB8, prev AAB1/D3960B58, desc: INSERT_LEAF off 94, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap        len (rec/tot):     54/    54, tx: 1202298791, lsn: AAB1/D3960BF8, prev AAB1/D3960BB8, desc: LOCK off 2: xid 1202298791: flags 0x00 LOCK_ONLY EXCL_LOCK , blkref #0: rel 1663/16387/1259 blk 11
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3960C30, prev AAB1/D3960BF8, desc: NEW_CID rel 1663/16387/1259; tid 11/2; cmin: 36, cmax: 47, combo: 35
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3960C70, prev AAB1/D3960C30, desc: NEW_CID rel 1663/16387/1259; tid 12/46; cmin: 47, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):    279/   279, tx: 1202298791, lsn: AAB1/D3960CB0, prev AAB1/D3960C70, desc: UPDATE off 2 xmax 1202298791 flags 0x00 ; new off 46 xmax 0, blkref #0: rel 1663/16387/1259 blk 12, blkref #1: rel 1663/16387/1259 blk 11
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3960DC8, prev AAB1/D3960CB0, desc: INSERT_LEAF off 67, blkref #0: rel 1663/16387/2662 blk 4
rmgr: Btree       len (rec/tot):     96/    96, tx: 1202298791, lsn: AAB1/D3960E08, prev AAB1/D3960DC8, desc: INSERT_LEAF off 18, blkref #0: rel 1663/16387/2663 blk 1
rmgr: Btree       len (rec/tot):     64/    64, tx: 1202298791, lsn: AAB1/D3960E68, prev AAB1/D3960E08, desc: INSERT_LEAF off 122, blkref #0: rel 1663/16387/3455 blk 4
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3960EA8, prev AAB1/D3960E68, desc: NEW_CID rel 1663/16387/1259; tid 12/2; cmin: 37, cmax: 48, combo: 36
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3960EE8, prev AAB1/D3960EA8, desc: NEW_CID rel 1663/16387/1259; tid 12/47; cmin: 48, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3960F28, prev AAB1/D3960EE8, desc: HOT_UPDATE off 2 xmax 1202298791 flags 0x20 ; new off 47 xmax 0, blkref #0: rel 1663/16387/1259 blk 12
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3960F78, prev AAB1/D3960F28, desc: NEW_CID rel 1663/16387/1259; tid 12/21; cmin: 38, cmax: 49, combo: 37
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3960FB8, prev AAB1/D3960F78, desc: NEW_CID rel 1663/16387/1259; tid 12/48; cmin: 49, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3960FF8, prev AAB1/D3960FB8, desc: HOT_UPDATE off 21 xmax 1202298791 flags 0x20 ; new off 48 xmax 0, blkref #0: rel 1663/16387/1259 blk 12
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3961048, prev AAB1/D3960FF8, desc: NEW_CID rel 1663/16387/1259; tid 12/32; cmin: 39, cmax: 50, combo: 38
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3961088, prev AAB1/D3961048, desc: NEW_CID rel 1663/16387/1259; tid 12/49; cmin: 50, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D39610C8, prev AAB1/D3961088, desc: HOT_UPDATE off 32 xmax 1202298791 flags 0x20 ; new off 49 xmax 0, blkref #0: rel 1663/16387/1259 blk 12
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3961118, prev AAB1/D39610C8, desc: NEW_CID rel 1663/16387/1259; tid 12/40; cmin: 40, cmax: 51, combo: 39
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3961158, prev AAB1/D3961118, desc: NEW_CID rel 1663/16387/1259; tid 12/50; cmin: 51, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3961198, prev AAB1/D3961158, desc: HOT_UPDATE off 40 xmax 1202298791 flags 0x20 ; new off 50 xmax 0, blkref #0: rel 1663/16387/1259 blk 12
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39611E8, prev AAB1/D3961198, desc: NEW_CID rel 1663/16387/1259; tid 12/41; cmin: 41, cmax: 52, combo: 40
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3961228, prev AAB1/D39611E8, desc: NEW_CID rel 1663/16387/1259; tid 12/51; cmin: 52, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3961268, prev AAB1/D3961228, desc: HOT_UPDATE off 41 xmax 1202298791 flags 0x20 ; new off 51 xmax 0, blkref #0: rel 1663/16387/1259 blk 12
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39612B8, prev AAB1/D3961268, desc: NEW_CID rel 1663/16387/1259; tid 12/42; cmin: 42, cmax: 53, combo: 41
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39612F8, prev AAB1/D39612B8, desc: NEW_CID rel 1663/16387/1259; tid 12/52; cmin: 53, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3961338, prev AAB1/D39612F8, desc: HOT_UPDATE off 42 xmax 1202298791 flags 0x20 ; new off 52 xmax 0, blkref #0: rel 1663/16387/1259 blk 12
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3962CD8, prev AAB1/D3961388, desc: NEW_CID rel 1663/16387/1259; tid 12/43; cmin: 43, cmax: 54, combo: 42
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3962D18, prev AAB1/D3962CD8, desc: NEW_CID rel 1663/16387/1259; tid 12/53; cmin: 54, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3962D58, prev AAB1/D3962D18, desc: HOT_UPDATE off 43 xmax 1202298791 flags 0x20 ; new off 53 xmax 0, blkref #0: rel 1663/16387/1259 blk 12
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3962DA8, prev AAB1/D3962D58, desc: NEW_CID rel 1663/16387/1259; tid 13/6; cmin: 44, cmax: 55, combo: 43
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3962DE8, prev AAB1/D3962DA8, desc: NEW_CID rel 1663/16387/1259; tid 13/8; cmin: 55, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3962E28, prev AAB1/D3962DE8, desc: HOT_UPDATE off 6 xmax 1202298791 flags 0x20 ; new off 8 xmax 0, blkref #0: rel 1663/16387/1259 blk 13
rmgr: Heap        len (rec/tot):    245/   245, tx: 1202295045, lsn: AAB1/D3962E78, prev AAB1/D3962E28, desc: INPLACE off 24, blkref #0: rel 1663/16387/1259 blk 6
rmgr: Heap        len (rec/tot):    188/   188, tx: 1202295045, lsn: AAB1/D3962F70, prev AAB1/D3962E78, desc: INPLACE off 33, blkref #0: rel 1663/16387/1259 blk 0
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963030, prev AAB1/D3962F70, desc: NEW_CID rel 1663/16387/1259; tid 14/4; cmin: 4294967295, cmax: 56, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963070, prev AAB1/D3963030, desc: NEW_CID rel 1663/16387/1259; tid 14/7; cmin: 56, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D39630B0, prev AAB1/D3963070, desc: HOT_UPDATE off 4 xmax 1202298791 flags 0x20 ; new off 7 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963100, prev AAB1/D39630B0, desc: NEW_CID rel 1663/16387/1259; tid 14/5; cmin: 4294967295, cmax: 57, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963140, prev AAB1/D3963100, desc: NEW_CID rel 1663/16387/1259; tid 14/8; cmin: 57, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3963180, prev AAB1/D3963140, desc: HOT_UPDATE off 5 xmax 1202298791 flags 0x20 ; new off 8 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39631D0, prev AAB1/D3963180, desc: NEW_CID rel 1663/16387/1259; tid 14/6; cmin: 4294967295, cmax: 58, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963210, prev AAB1/D39631D0, desc: NEW_CID rel 1663/16387/1259; tid 14/9; cmin: 58, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3963250, prev AAB1/D3963210, desc: HOT_UPDATE off 6 xmax 1202298791 flags 0x20 ; new off 9 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Transaction len (rec/tot):    293/   293, tx: 1202295045, lsn: AAB1/D39632A0, prev AAB1/D3963250, desc: COMMIT 2023-10-04 22:41:23.878565 UTC; inval msgs: catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 7 catcache 6 catcache 32 catcache 19 relcache 3566558198 relcache 3569625749 relcache 3569625749 relcache 3566558198 snapshot 2608
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39633C8, prev AAB1/D39632A0, desc: NEW_CID rel 1663/16387/2615; tid 0/20; cmin: 4294967295, cmax: 59, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963408, prev AAB1/D39633C8, desc: NEW_CID rel 1663/16387/2615; tid 0/23; cmin: 59, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     68/    68, tx: 1202298791, lsn: AAB1/D3963448, prev AAB1/D3963408, desc: HOT_UPDATE off 20 xmax 1202298791 flags 0x20 ; new off 23 xmax 0, blkref #0: rel 1663/16387/2615 blk 0
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963490, prev AAB1/D3963448, desc: NEW_CID rel 1663/16387/1259; tid 14/7; cmin: 56, cmax: 60, combo: 44
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39634D0, prev AAB1/D3963490, desc: NEW_CID rel 1663/16387/1259; tid 14/10; cmin: 60, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3963510, prev AAB1/D39634D0, desc: HOT_UPDATE off 7 xmax 1202298791 flags 0x20 ; new off 10 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963560, prev AAB1/D3963510, desc: NEW_CID rel 1663/16387/1259; tid 14/8; cmin: 57, cmax: 61, combo: 45
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39635A0, prev AAB1/D3963560, desc: NEW_CID rel 1663/16387/1259; tid 14/11; cmin: 61, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D39635E0, prev AAB1/D39635A0, desc: HOT_UPDATE off 8 xmax 1202298791 flags 0x20 ; new off 11 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963630, prev AAB1/D39635E0, desc: NEW_CID rel 1663/16387/1259; tid 14/9; cmin: 58, cmax: 62, combo: 46
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3963670, prev AAB1/D3963630, desc: NEW_CID rel 1663/16387/1259; tid 14/12; cmin: 62, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D39636B0, prev AAB1/D3963670, desc: HOT_UPDATE off 9 xmax 1202298791 flags 0x20 ; new off 12 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39679F8, prev AAB1/D39679B8, desc: NEW_CID rel 1663/16387/1259; tid 14/10; cmin: 60, cmax: 63, combo: 47
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3967A38, prev AAB1/D39679F8, desc: NEW_CID rel 1663/16387/1259; tid 14/13; cmin: 63, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3967A78, prev AAB1/D3967A38, desc: HOT_UPDATE off 10 xmax 1202298791 flags 0x20 ; new off 13 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3967AC8, prev AAB1/D3967A78, desc: NEW_CID rel 1663/16387/1259; tid 14/11; cmin: 61, cmax: 64, combo: 48
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3967B08, prev AAB1/D3967AC8, desc: NEW_CID rel 1663/16387/1259; tid 14/14; cmin: 64, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3967B48, prev AAB1/D3967B08, desc: HOT_UPDATE off 11 xmax 1202298791 flags 0x20 ; new off 14 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3967B98, prev AAB1/D3967B48, desc: NEW_CID rel 1663/16387/1259; tid 14/12; cmin: 62, cmax: 65, combo: 49
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3967BD8, prev AAB1/D3967B98, desc: NEW_CID rel 1663/16387/1259; tid 14/15; cmin: 65, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3967C18, prev AAB1/D3967BD8, desc: HOT_UPDATE off 12 xmax 1202298791 flags 0x20 ; new off 15 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F3A8, prev AAB1/D396F368, desc: NEW_CID rel 1663/16387/1259; tid 14/13; cmin: 63, cmax: 66, combo: 50
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F3E8, prev AAB1/D396F3A8, desc: NEW_CID rel 1663/16387/1259; tid 14/16; cmin: 66, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396F428, prev AAB1/D396F3E8, desc: HOT_UPDATE off 13 xmax 1202298791 flags 0x20 ; new off 16 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F478, prev AAB1/D396F428, desc: NEW_CID rel 1663/16387/1259; tid 14/14; cmin: 64, cmax: 67, combo: 51
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F4B8, prev AAB1/D396F478, desc: NEW_CID rel 1663/16387/1259; tid 14/17; cmin: 67, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396F4F8, prev AAB1/D396F4B8, desc: HOT_UPDATE off 14 xmax 1202298791 flags 0x20 ; new off 17 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F548, prev AAB1/D396F4F8, desc: NEW_CID rel 1663/16387/1259; tid 14/15; cmin: 65, cmax: 68, combo: 52
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F588, prev AAB1/D396F548, desc: NEW_CID rel 1663/16387/1259; tid 14/18; cmin: 68, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396F5C8, prev AAB1/D396F588, desc: HOT_UPDATE off 15 xmax 1202298791 flags 0x20 ; new off 18 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F618, prev AAB1/D396F5C8, desc: NEW_CID rel 1663/16387/1259; tid 14/16; cmin: 66, cmax: 69, combo: 53
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F658, prev AAB1/D396F618, desc: NEW_CID rel 1663/16387/1259; tid 14/21; cmin: 69, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396F698, prev AAB1/D396F658, desc: HOT_UPDATE off 16 xmax 1202298791 flags 0x20 ; new off 21 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F6E8, prev AAB1/D396F698, desc: NEW_CID rel 1663/16387/1259; tid 14/17; cmin: 67, cmax: 70, combo: 54
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F728, prev AAB1/D396F6E8, desc: NEW_CID rel 1663/16387/1259; tid 14/22; cmin: 70, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396F768, prev AAB1/D396F728, desc: HOT_UPDATE off 17 xmax 1202298791 flags 0x20 ; new off 22 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F7B8, prev AAB1/D396F768, desc: NEW_CID rel 1663/16387/1259; tid 14/18; cmin: 68, cmax: 71, combo: 55
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F7F8, prev AAB1/D396F7B8, desc: NEW_CID rel 1663/16387/1259; tid 14/23; cmin: 71, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396F838, prev AAB1/D396F7F8, desc: HOT_UPDATE off 18 xmax 1202298791 flags 0x20 ; new off 23 xmax 0, blkref #0: rel 1663/16387/1259 blk 14
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F888, prev AAB1/D396F838, desc: NEW_CID rel 1663/16387/1259; tid 21/3; cmin: 4294967295, cmax: 72, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F8C8, prev AAB1/D396F888, desc: NEW_CID rel 1663/16387/1259; tid 21/5; cmin: 72, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396F908, prev AAB1/D396F8C8, desc: HOT_UPDATE off 3 xmax 1202298791 flags 0x20 ; new off 5 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F958, prev AAB1/D396F908, desc: NEW_CID rel 1663/16387/1259; tid 21/4; cmin: 4294967295, cmax: 73, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396F998, prev AAB1/D396F958, desc: NEW_CID rel 1663/16387/1259; tid 21/6; cmin: 73, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396F9D8, prev AAB1/D396F998, desc: HOT_UPDATE off 4 xmax 1202298791 flags 0x20 ; new off 6 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396FA28, prev AAB1/D396F9D8, desc: NEW_CID rel 1663/16387/1259; tid 22/2; cmin: 4294967295, cmax: 74, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D396FA68, prev AAB1/D396FA28, desc: NEW_CID rel 1663/16387/1259; tid 22/3; cmin: 74, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D396FAA8, prev AAB1/D396FA68, desc: HOT_UPDATE off 2 xmax 1202298791 flags 0x20 ; new off 3 xmax 0, blkref #0: rel 1663/16387/1259 blk 22
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970698, prev AAB1/D396FAF8, desc: NEW_CID rel 1663/16387/1259; tid 17/3; cmin: 4294967295, cmax: 75, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39706D8, prev AAB1/D3970698, desc: NEW_CID rel 1663/16387/1259; tid 17/5; cmin: 75, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3970718, prev AAB1/D39706D8, desc: HOT_UPDATE off 3 xmax 1202298791 flags 0x20 ; new off 5 xmax 0, blkref #0: rel 1663/16387/1259 blk 17
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970768, prev AAB1/D3970718, desc: NEW_CID rel 1663/16387/1259; tid 17/4; cmin: 4294967295, cmax: 76, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39707A8, prev AAB1/D3970768, desc: NEW_CID rel 1663/16387/1259; tid 17/6; cmin: 76, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D39707E8, prev AAB1/D39707A8, desc: HOT_UPDATE off 4 xmax 1202298791 flags 0x20 ; new off 6 xmax 0, blkref #0: rel 1663/16387/1259 blk 17
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970838, prev AAB1/D39707E8, desc: NEW_CID rel 1663/16387/2615; tid 0/21; cmin: 4294967295, cmax: 77, combo: 4294967295
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970878, prev AAB1/D3970838, desc: NEW_CID rel 1663/16387/2615; tid 0/24; cmin: 77, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     68/    68, tx: 1202298791, lsn: AAB1/D39708B8, prev AAB1/D3970878, desc: HOT_UPDATE off 21 xmax 1202298791 flags 0x20 ; new off 24 xmax 0, blkref #0: rel 1663/16387/2615 blk 0
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970900, prev AAB1/D39708B8, desc: NEW_CID rel 1663/16387/1259; tid 21/5; cmin: 72, cmax: 78, combo: 56
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970940, prev AAB1/D3970900, desc: NEW_CID rel 1663/16387/1259; tid 21/7; cmin: 78, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3970980, prev AAB1/D3970940, desc: HOT_UPDATE off 5 xmax 1202298791 flags 0x20 ; new off 7 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39709D0, prev AAB1/D3970980, desc: NEW_CID rel 1663/16387/1259; tid 21/6; cmin: 73, cmax: 79, combo: 57
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970A10, prev AAB1/D39709D0, desc: NEW_CID rel 1663/16387/1259; tid 21/8; cmin: 79, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3970A50, prev AAB1/D3970A10, desc: HOT_UPDATE off 6 xmax 1202298791 flags 0x20 ; new off 8 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970AA0, prev AAB1/D3970A50, desc: NEW_CID rel 1663/16387/1259; tid 22/3; cmin: 74, cmax: 80, combo: 58
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970AE0, prev AAB1/D3970AA0, desc: NEW_CID rel 1663/16387/1259; tid 22/4; cmin: 80, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3970B20, prev AAB1/D3970AE0, desc: HOT_UPDATE off 3 xmax 1202298791 flags 0x20 ; new off 4 xmax 0, blkref #0: rel 1663/16387/1259 blk 22
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970B70, prev AAB1/D3970B20, desc: NEW_CID rel 1663/16387/1259; tid 17/5; cmin: 75, cmax: 81, combo: 59
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970BB0, prev AAB1/D3970B70, desc: NEW_CID rel 1663/16387/1259; tid 17/9; cmin: 81, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3970BF0, prev AAB1/D3970BB0, desc: HOT_UPDATE off 5 xmax 1202298791 flags 0x20 ; new off 9 xmax 0, blkref #0: rel 1663/16387/1259 blk 17
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970C40, prev AAB1/D3970BF0, desc: NEW_CID rel 1663/16387/1259; tid 17/6; cmin: 76, cmax: 82, combo: 60
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3970C80, prev AAB1/D3970C40, desc: NEW_CID rel 1663/16387/1259; tid 17/10; cmin: 82, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3970CC0, prev AAB1/D3970C80, desc: HOT_UPDATE off 6 xmax 1202298791 flags 0x20 ; new off 10 xmax 0, blkref #0: rel 1663/16387/1259 blk 17
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3972CD0, prev AAB1/D3972C90, desc: NEW_CID rel 1663/16387/1259; tid 21/7; cmin: 78, cmax: 83, combo: 61
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3972D10, prev AAB1/D3972CD0, desc: NEW_CID rel 1663/16387/1259; tid 21/9; cmin: 83, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3972D50, prev AAB1/D3972D10, desc: HOT_UPDATE off 7 xmax 1202298791 flags 0x20 ; new off 9 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3972DA0, prev AAB1/D3972D50, desc: NEW_CID rel 1663/16387/1259; tid 21/8; cmin: 79, cmax: 84, combo: 62
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3972DE0, prev AAB1/D3972DA0, desc: NEW_CID rel 1663/16387/1259; tid 21/10; cmin: 84, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3972E20, prev AAB1/D3972DE0, desc: HOT_UPDATE off 8 xmax 1202298791 flags 0x20 ; new off 10 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3972E70, prev AAB1/D3972E20, desc: NEW_CID rel 1663/16387/1259; tid 22/4; cmin: 80, cmax: 85, combo: 63
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3972EB0, prev AAB1/D3972E70, desc: NEW_CID rel 1663/16387/1259; tid 22/5; cmin: 85, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3972EF0, prev AAB1/D3972EB0, desc: HOT_UPDATE off 4 xmax 1202298791 flags 0x20 ; new off 5 xmax 0, blkref #0: rel 1663/16387/1259 blk 22
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3972F40, prev AAB1/D3972EF0, desc: NEW_CID rel 1663/16387/1259; tid 21/9; cmin: 83, cmax: 86, combo: 64
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3972F80, prev AAB1/D3972F40, desc: NEW_CID rel 1663/16387/1259; tid 21/11; cmin: 86, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3972FC0, prev AAB1/D3972F80, desc: HOT_UPDATE off 9 xmax 1202298791 flags 0x20 ; new off 11 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3973010, prev AAB1/D3972FC0, desc: NEW_CID rel 1663/16387/1259; tid 21/10; cmin: 84, cmax: 87, combo: 65
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3973050, prev AAB1/D3973010, desc: NEW_CID rel 1663/16387/1259; tid 21/12; cmin: 87, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3973090, prev AAB1/D3973050, desc: HOT_UPDATE off 10 xmax 1202298791 flags 0x20 ; new off 12 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39730E0, prev AAB1/D3973090, desc: NEW_CID rel 1663/16387/1259; tid 22/5; cmin: 85, cmax: 88, combo: 66
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3973120, prev AAB1/D39730E0, desc: NEW_CID rel 1663/16387/1259; tid 22/6; cmin: 88, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3973160, prev AAB1/D3973120, desc: HOT_UPDATE off 5 xmax 1202298791 flags 0x20 ; new off 6 xmax 0, blkref #0: rel 1663/16387/1259 blk 22
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39731B0, prev AAB1/D3973160, desc: NEW_CID rel 1663/16387/1259; tid 21/11; cmin: 86, cmax: 89, combo: 67
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39731F0, prev AAB1/D39731B0, desc: NEW_CID rel 1663/16387/1259; tid 21/15; cmin: 89, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3973230, prev AAB1/D39731F0, desc: HOT_UPDATE off 11 xmax 1202298791 flags 0x20 ; new off 15 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3973280, prev AAB1/D3973230, desc: NEW_CID rel 1663/16387/1259; tid 21/12; cmin: 87, cmax: 90, combo: 68
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D39732C0, prev AAB1/D3973280, desc: NEW_CID rel 1663/16387/1259; tid 21/16; cmin: 90, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D3973300, prev AAB1/D39732C0, desc: HOT_UPDATE off 12 xmax 1202298791 flags 0x20 ; new off 16 xmax 0, blkref #0: rel 1663/16387/1259 blk 21
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3973350, prev AAB1/D3973300, desc: NEW_CID rel 1663/16387/1259; tid 22/6; cmin: 88, cmax: 91, combo: 69
rmgr: Heap2       len (rec/tot):     60/    60, tx: 1202298791, lsn: AAB1/D3973390, prev AAB1/D3973350, desc: NEW_CID rel 1663/16387/1259; tid 22/8; cmin: 91, cmax: 4294967295, combo: 4294967295
rmgr: Heap        len (rec/tot):     76/    76, tx: 1202298791, lsn: AAB1/D39733D0, prev AAB1/D3973390, desc: HOT_UPDATE off 6 xmax 1202298791 flags 0x20 ; new off 8 xmax 0, blkref #0: rel 1663/16387/1259 blk 22
rmgr: Transaction len (rec/tot):   4421/  4421, tx: 1202298791, lsn: AAB1/D3973420, prev AAB1/D39733D0, desc: COMMIT 2023-10-04 22:41:23.884951 UTC; inval msgs: catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 36 catcache 35 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 36 catcache 35 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 36 catcache 35 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 catcache 50 catcache 49 relcache 132091635 relcache 132091646 relcache 132091619 relcache 132091635 relcache 132091646 relcache 132091619 relcache 132091635 relcache 132091646 relcache 132091619 relcache 132091617 relcache 132091644 relcache 132091635 relcache 132091646 relcache 132091619 relcache 132091617 relcache 132091644 relcache 132091635 relcache 132091646 relcache 132091619 relcache 3498102916 relcache 16407 relcache 16400 relcache 3498102916 relcache 16407 relcache 16400 relcache 3498102916 relcache 16407 relcache 16400 relcache 3498102916 relcache 16407 relcache 16400 relcache 3498102916 relcache 16407 relcache 16400 relcache 3484880351 relcache 3481184220 relcache 3550681910 relcache 3557956661 relcache 3561879248 relcache 3566558198 relcache 3561211565 relcache 3552097563 relcache 3562785676 relcache 3553852461 relcache 3546526549 relcache 3484880351 relcache 3481184220 relcache 3550681910 relcache 3557956661 relcache 3561879248 relcache 3566558198 relcache 3561211565 relcache 3552097563 relcache 3562785676 relcache 3553852461 relcache 3546526549 relcache 3484880351 relcache 3481184220 relcache 3550681910 relcache 3557956661 relcache 3561879248 relcache 3566558198 relcache 3561211565 relcache 3552097563 relcache 3562785676 relcache 3553852461 relcache 3546526549 relcache 3484880351 relcache 3481184220 relcache 3550681910 relcache 3557956661 relcache 3561879248 relcache 3566558198 relcache 3561211565 relcache 3552097563 relcache 3562785676 relcache 3553852461 relcache 3546526549 relcache 3484880351 relcache 3561211565 relcache 3552097563 relcache 3562785676 relcache 3553852461 relcache 3546526549 relcache 3481184220 relcache 3550681910 relcache 3557956661 relcache 3561879248 relcache 3566558198


Attachments:

  [text/plain] waldump.txt (246.9K, ../../CAMp+ueZQz3yDk7qg42hk6-9gxniYbp-=bG2mgqecErqR5gGGOA@mail.gmail.com/3-waldump.txt)
  download

^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-25 12:57  Andrey M. Borodin <[email protected]>
  parent: Smolkin Grigory <[email protected]>
  2 siblings, 0 replies; 103+ messages in thread

From: Andrey M. Borodin @ 2023-10-25 12:57 UTC (permalink / raw)
  To: Smolkin Grigory <[email protected]>; +Cc: pgsql-hackers



> On 25 Oct 2023, at 13:39, Smolkin Grigory <[email protected]> wrote:
> 
> We are running PG13.10 and recently we have encountered what appears to be a bug due to some race condition between ALTER TABLE ... ADD CONSTRAINT and some other catalog-writer, possibly ANALYZ

> I've tried to reproduce this scenario with CREATE INDEX and various concurrent statements, but no luck.

Maybe it would be possible to reproduce with modifying tests for concurrent index creation. For example add “ANALYZE” here [0].
Keep in mind that for easier reproduction it would make sense to increase transaction count radically.


Best regards, Andrey Borodin.


[0] https://github.com/postgres/postgres/blob/master/contrib/amcheck/t/002_cic.pl#L34






^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-25 18:06  Tom Lane <[email protected]>
  parent: Smolkin Grigory <[email protected]>
  2 siblings, 1 reply; 103+ messages in thread

From: Tom Lane @ 2023-10-25 18:06 UTC (permalink / raw)
  To: Smolkin Grigory <[email protected]>; +Cc: pgsql-hackers

Smolkin Grigory <[email protected]> writes:
> We are running PG13.10 and recently we have encountered what appears to be
> a bug due to some race condition between ALTER TABLE ... ADD CONSTRAINT and
> some other catalog-writer, possibly ANALYZE.
> The problem is that after successfully creating index on relation (which
> previosly didnt have any indexes), its pg_class.relhasindex remains set to
> "false", which is illegal, I think.
> Index was built using the following statement:
> ALTER TABLE "example" ADD constraint "example_pkey" PRIMARY KEY (id);

ALTER TABLE ADD CONSTRAINT would certainly have taken
AccessExclusiveLock on the "example" table, which should be sufficient
to prevent anything else from touching its pg_class row.  The only
mechanism I can think of that might bypass that is a manual UPDATE on
pg_class, which would just manipulate the row as a row without concern
for associated relation-level locks.  Any chance that somebody was
doing something like that?

			regards, tom lane





^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-26 09:52  Smolkin Grigory <[email protected]>
  parent: Tom Lane <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Smolkin Grigory @ 2023-10-26 09:52 UTC (permalink / raw)
  To: pgsql-hackers

> ALTER TABLE ADD CONSTRAINT would certainly have taken
> AccessExclusiveLock on the "example" table, which should be sufficient
> to prevent anything else from touching its pg_class row.  The only
> mechanism I can think of that might bypass that is a manual UPDATE on
> pg_class, which would just manipulate the row as a row without concern
> for associated relation-level locks.  Any chance that somebody was
> doing something like that?

No chance. Our infrastructure dont do that, and users dont just have the
privileges to mess with pg_catalog.

ср, 25 окт. 2023 г. в 21:06, Tom Lane <[email protected]>:

> Smolkin Grigory <[email protected]> writes:
> > We are running PG13.10 and recently we have encountered what appears to
> be
> > a bug due to some race condition between ALTER TABLE ... ADD CONSTRAINT
> and
> > some other catalog-writer, possibly ANALYZE.
> > The problem is that after successfully creating index on relation (which
> > previosly didnt have any indexes), its pg_class.relhasindex remains set
> to
> > "false", which is illegal, I think.
> > Index was built using the following statement:
> > ALTER TABLE "example" ADD constraint "example_pkey" PRIMARY KEY (id);
>
> ALTER TABLE ADD CONSTRAINT would certainly have taken
> AccessExclusiveLock on the "example" table, which should be sufficient
> to prevent anything else from touching its pg_class row.  The only
> mechanism I can think of that might bypass that is a manual UPDATE on
> pg_class, which would just manipulate the row as a row without concern
> for associated relation-level locks.  Any chance that somebody was
> doing something like that?
>
>                         regards, tom lane
>


^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-27 04:44  Noah Misch <[email protected]>
  parent: Smolkin Grigory <[email protected]>
  2 siblings, 2 replies; 103+ messages in thread

From: Noah Misch @ 2023-10-27 04:44 UTC (permalink / raw)
  To: Smolkin Grigory <[email protected]>; +Cc: pgsql-hackers

On Wed, Oct 25, 2023 at 01:39:41PM +0300, Smolkin Grigory wrote:
> We are running PG13.10 and recently we have encountered what appears to be
> a bug due to some race condition between ALTER TABLE ... ADD CONSTRAINT and
> some other catalog-writer, possibly ANALYZE.
> The problem is that after successfully creating index on relation (which
> previosly didnt have any indexes), its pg_class.relhasindex remains set to
> "false", which is illegal, I think.
> Index was built using the following statement:
> ALTER TABLE "example" ADD constraint "example_pkey" PRIMARY KEY (id);

This is going to be a problem with any operation that does a transactional
pg_class update without taking a lock that conflicts with ShareLock.  GRANT
doesn't lock the table at all, so I can reproduce this in v17 as follows:

== session 1
create table t (c int);
begin;
grant select on t to public;

== session 2
alter table t add primary key (c);

== back in session 1
commit;


We'll likely need to change how we maintain relhasindex or perhaps take a lock
in GRANT.

> Looking into the WAL via waldump given us the following picture (full
> waldump output is attached):

> 1202295045 - create index statement
> 1202298790 and 1202298791 are some other concurrent operations,
> unfortunately I wasnt able to determine what are they

Can you explore that as follows?

- PITR to just before the COMMIT record.
- Save all rows of pg_class.
- PITR to just after the COMMIT record.
- Save all rows of pg_class.
- Diff the two sets of saved rows.

Which columns changed?  The evidence you've shown would be consistent with a
transaction doing GRANT or REVOKE on dozens of tables.  If the changed column
is something other than relacl, that would be great to know.

On the off-chance it's relevant, what extensions do you have (\dx in psql)?





^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-27 10:03  Smolkin Grigory <[email protected]>
  parent: Noah Misch <[email protected]>
  1 sibling, 0 replies; 103+ messages in thread

From: Smolkin Grigory @ 2023-10-27 10:03 UTC (permalink / raw)
  To: pgsql-hackers

> This is going to be a problem with any operation that does a transactional
> pg_class update without taking a lock that conflicts with ShareLock.
GRANT
> doesn't lock the table at all, so I can reproduce this in v17 as follows:
>
> == session 1
> create table t (c int);
> begin;
> grant select on t to public;
>
> == session 2
> alter table t add primary key (c);
>
> == back in session 1
> commit;
>
>
> We'll likely need to change how we maintain relhasindex or perhaps take a
lock
> in GRANT.

Oh, that explains it. Thank you very much.

> Can you explore that as follows?
>
>- PITR to just before the COMMIT record.
>- Save all rows of pg_class.
>- PITR to just after the COMMIT record.
>- Save all rows of pg_class.
>- Diff the two sets of saved rows.

Sure, but it will take some time, its a large db with lots of WAL segments
to apply.

> extensions

      extname       | extversion
--------------------+------------
 plpgsql            | 1.0
 pg_stat_statements | 1.8
 pg_buffercache     | 1.3
 pgstattuple        | 1.5


^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-27 18:48  Noah Misch <[email protected]>
  parent: Noah Misch <[email protected]>
  1 sibling, 1 reply; 103+ messages in thread

From: Noah Misch @ 2023-10-27 18:48 UTC (permalink / raw)
  To: Smolkin Grigory <[email protected]>; +Cc: pgsql-hackers

On Thu, Oct 26, 2023 at 09:44:04PM -0700, Noah Misch wrote:
> On Wed, Oct 25, 2023 at 01:39:41PM +0300, Smolkin Grigory wrote:
> > We are running PG13.10 and recently we have encountered what appears to be
> > a bug due to some race condition between ALTER TABLE ... ADD CONSTRAINT and
> > some other catalog-writer, possibly ANALYZE.
> > The problem is that after successfully creating index on relation (which
> > previosly didnt have any indexes), its pg_class.relhasindex remains set to
> > "false", which is illegal, I think.

It's damaging.  The table will behave like it has no indexes.  If something
adds an index later, old indexes will reappear, corrupt, having not received
updates during the relhasindex=false era.  ("pg_amcheck --heapallindexed" can
detect this.)

> > Index was built using the following statement:
> > ALTER TABLE "example" ADD constraint "example_pkey" PRIMARY KEY (id);
> 
> This is going to be a problem with any operation that does a transactional
> pg_class update without taking a lock that conflicts with ShareLock.  GRANT
> doesn't lock the table at all, so I can reproduce this in v17 as follows:
> 
> == session 1
> create table t (c int);
> begin;
> grant select on t to public;
> 
> == session 2
> alter table t add primary key (c);
> 
> == back in session 1
> commit;
> 
> 
> We'll likely need to change how we maintain relhasindex or perhaps take a lock
> in GRANT.

The main choice is accepting more DDL blocking vs. accepting inefficient
relcache builds.  Options I'm seeing:

=== "more DDL blocking" option family

B1. Take ShareUpdateExclusiveLock in GRANT, REVOKE, and anything that makes
    transactional pg_class updates without holding some stronger lock.  New
    asserts could catch future commands failing to do this.

B2. Take some shorter-lived lock around pg_class tuple formation, such that
    GRANT blocks CREATE INDEX, but two CREATE INDEX don't block each other.
    Anything performing a transactional update of a pg_class row would acquire
    the lock in exclusive mode before fetching the old tuple and hold it till
    end of transaction.  relhasindex=true in-place updates would acquire it
    the same way, but they would release it after the inplace update.  I
    expect a new heavyweight lock type, e.g. LOCKTAG_RELATION_DEFINITION, with
    the same key as LOCKTAG_RELATION.  This has less blocking than the
    previous option, but it's more complicated to explain to both users and
    developers.

B3. Have CREATE INDEX do an EvalPlanQual()-style thing to update all successor
    tuple versions.  Like the previous option, this would require new locking,
    but the new lock would not need to persist till end of xact.  It would be
    even more complicated to explain to users and developers.  (If this is
    promising enough to warrant more detail, let me know.)

B4. Use transactional updates to set relhasindex=true.  Two CREATE INDEX
    commands on the same table would block each other.  If we did it the way
    most DDL does today, they'd get "tuple concurrently updated" failures
    after the blocking ends.

=== "inefficient relcache builds" option family

R1. Ignore relhasindex; possibly remove it in v17.  Relcache builds et
    al. will issue more superfluous queries.

R2. As a weird variant of the previous option, keep relhasindex and make all
    transactional updates of pg_class set relhasindex=true pessimistically.
    (VACUUM will set it back to false.)

=== other

O1. This is another case where the sometimes-discussed "pg_class_nt" for
    nontransactional columns would help.  I'm ruling that out as too hard to
    back-patch.


Are there other options important to consider?  I currently like (B1) the
most, followed closely by (R1) and (B2).  A key unknown is the prevalence of
index-free tables.  Low prevalence would argue in favor of (R1).  In my
limited experience, they've been rare.  That said, I assume relcache builds
happen a lot more than GRANTs, so it's harder to bound the damage from (R1)
compared to the damage from (B1).  Thoughts on this decision?

Thanks,
nm





^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-27 19:32  Tom Lane <[email protected]>
  parent: Noah Misch <[email protected]>
  0 siblings, 1 reply; 103+ messages in thread

From: Tom Lane @ 2023-10-27 19:32 UTC (permalink / raw)
  To: Noah Misch <[email protected]>; +Cc: Smolkin Grigory <[email protected]>; pgsql-hackers

Noah Misch <[email protected]> writes:
> On Thu, Oct 26, 2023 at 09:44:04PM -0700, Noah Misch wrote:
>> We'll likely need to change how we maintain relhasindex or perhaps take a lock
>> in GRANT.

> The main choice is accepting more DDL blocking vs. accepting inefficient
> relcache builds.  Options I'm seeing:

It looks to me like you're only thinking about relhasindex, but it
seems to me that any call of heap_inplace_update brings some
risk of this kind.  Excluding the bootstrap-mode-only usage in
create_toast_table, I see four callers:

* index_update_stats updating a pg_class tuple's
  relhasindex, relpages, reltuples, relallvisible

* vac_update_relstats updating a pg_class tuple's
  relpages, reltuples, relallvisible, relhasindex, relhasrules,
  relhastriggers, relfrozenxid, relminmxid

* vac_update_datfrozenxid updating a pg_database tuple's
  datfrozenxid, datminmxid

* dropdb updating a pg_database tuple's datconnlimit

So we have just as much of a problem with GRANTs on databases
as GRANTs on relations.  Also, it looks like we can lose
knowledge of the presence of rules and triggers, which seems
nearly as bad as forgetting about indexes.  The rest of these
updates might not be correctness-critical, although I wonder
how bollixed things could get if we forget an advancement of
relfrozenxid or datfrozenxid (especially if the calling
transaction goes on to make other changes that assume that
the update happened).

BTW, vac_update_datfrozenxid believes (correctly I think) that
it cannot use the syscache copy of a tuple as the basis for in-place
update, because syscache will have detoasted any toastable fields.
These other callers are ignoring that, which seems like it should
result in heap_inplace_update failing with "wrong tuple length".
I wonder how come we're not seeing reports of that from the field.

I'm inclined to propose that heap_inplace_update should check to
make sure that it's operating on the latest version of the tuple
(including, I guess, waiting for an uncommitted update?) and throw
error if not.  I think this is what your B3 option is, but maybe
I misinterpreted.  It might be better to throw error immediately
instead of waiting to see if the other updater commits.

			regards, tom lane





^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-27 21:49  Noah Misch <[email protected]>
  parent: Tom Lane <[email protected]>
  0 siblings, 1 reply; 103+ messages in thread

From: Noah Misch @ 2023-10-27 21:49 UTC (permalink / raw)
  To: Tom Lane <[email protected]>; +Cc: Smolkin Grigory <[email protected]>; pgsql-hackers

On Fri, Oct 27, 2023 at 03:32:26PM -0400, Tom Lane wrote:
> Noah Misch <[email protected]> writes:
> > On Thu, Oct 26, 2023 at 09:44:04PM -0700, Noah Misch wrote:
> >> We'll likely need to change how we maintain relhasindex or perhaps take a lock
> >> in GRANT.
> 
> > The main choice is accepting more DDL blocking vs. accepting inefficient
> > relcache builds.  Options I'm seeing:
> 
> It looks to me like you're only thinking about relhasindex, but it
> seems to me that any call of heap_inplace_update brings some
> risk of this kind.  Excluding the bootstrap-mode-only usage in
> create_toast_table, I see four callers:
> 
> * index_update_stats updating a pg_class tuple's
>   relhasindex, relpages, reltuples, relallvisible
> 
> * vac_update_relstats updating a pg_class tuple's
>   relpages, reltuples, relallvisible, relhasindex, relhasrules,
>   relhastriggers, relfrozenxid, relminmxid
> 
> * vac_update_datfrozenxid updating a pg_database tuple's
>   datfrozenxid, datminmxid
> 
> * dropdb updating a pg_database tuple's datconnlimit
> 
> So we have just as much of a problem with GRANTs on databases
> as GRANTs on relations.  Also, it looks like we can lose
> knowledge of the presence of rules and triggers, which seems
> nearly as bad as forgetting about indexes.  The rest of these
> updates might not be correctness-critical, although I wonder
> how bollixed things could get if we forget an advancement of
> relfrozenxid or datfrozenxid (especially if the calling
> transaction goes on to make other changes that assume that
> the update happened).

Thanks for researching that.  Let's treat frozenxid stuff as critical; I
wouldn't want to advance XID limits based on a datfrozenxid that later gets
rolled back.  I agree relhasrules and relhastriggers are also critical.  The
"inefficient relcache builds" option family can't solve cases like
relfrozenxid and datconnlimit, so that leaves us with the "more DDL blocking"
option family.

> BTW, vac_update_datfrozenxid believes (correctly I think) that
> it cannot use the syscache copy of a tuple as the basis for in-place
> update, because syscache will have detoasted any toastable fields.
> These other callers are ignoring that, which seems like it should
> result in heap_inplace_update failing with "wrong tuple length".
> I wonder how come we're not seeing reports of that from the field.

Good question.  Perhaps we'll need some test cases that exercise each inplace
update against a row having a toast pointer.  It's too easy to go a long time
without encountering those in the field.

> I'm inclined to propose that heap_inplace_update should check to
> make sure that it's operating on the latest version of the tuple
> (including, I guess, waiting for an uncommitted update?) and throw
> error if not.  I think this is what your B3 option is, but maybe
> I misinterpreted.  It might be better to throw error immediately
> instead of waiting to see if the other updater commits.

That's perhaps closer to B2.  To be pedantic, B3 was about not failing or
waiting for GRANT to commit but instead inplace-updating every member of the
update chain.  For B2, I was thinking we don't need to error.  There are two
problematic orders of events.  The easy one is heap_inplace_update() mutating
a tuple that already has an xmax.  That's the one in the test case upthread,
and detecting it is trivial.  The harder one is heap_inplace_update() mutating
a tuple after GRANT fetches the old tuple, before GRANT enters heap_update().
I anticipate a new locktag per catalog that can receive inplace updates,
i.e. LOCKTAG_RELATION_DEFINITION and LOCKTAG_DATABASE_DEFINITION.  Here's a
walk-through for the pg_database case.  GRANT will use the following sequence
of events:

- acquire LOCKTAG_DATABASE_DEFINITION in exclusive mode
- fetch latest pg_database tuple
- heap_update()
- COMMIT, releasing LOCKTAG_DATABASE_DEFINITION

vac_update_datfrozenxid() sequence of events:

- acquire LOCKTAG_DATABASE_DEFINITION in exclusive mode
- (now, all GRANTs on the given database have committed or aborted)
- fetch latest pg_database tuple
- heap_inplace_update()
- release LOCKTAG_DATABASE_DEFINITION, even if xact not ending
- continue with other steps, e.g. vac_truncate_clog()

How does that compare to what you envisioned?  vac_update_datfrozenxid() could
further use xmax as a best-efforts thing to catch conflict with manual UPDATE
statements, but it wouldn't solve the case where the UPDATE had fetched the
tuple but not yet heap_update()'d it.





^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-27 22:40  Tom Lane <[email protected]>
  parent: Noah Misch <[email protected]>
  0 siblings, 1 reply; 103+ messages in thread

From: Tom Lane @ 2023-10-27 22:40 UTC (permalink / raw)
  To: Noah Misch <[email protected]>; +Cc: Smolkin Grigory <[email protected]>; pgsql-hackers

Noah Misch <[email protected]> writes:
> On Fri, Oct 27, 2023 at 03:32:26PM -0400, Tom Lane wrote:
>> I'm inclined to propose that heap_inplace_update should check to
>> make sure that it's operating on the latest version of the tuple
>> (including, I guess, waiting for an uncommitted update?) and throw
>> error if not.  I think this is what your B3 option is, but maybe
>> I misinterpreted.  It might be better to throw error immediately
>> instead of waiting to see if the other updater commits.

> That's perhaps closer to B2.  To be pedantic, B3 was about not failing or
> waiting for GRANT to commit but instead inplace-updating every member of the
> update chain.  For B2, I was thinking we don't need to error.  There are two
> problematic orders of events.  The easy one is heap_inplace_update() mutating
> a tuple that already has an xmax.  That's the one in the test case upthread,
> and detecting it is trivial.  The harder one is heap_inplace_update() mutating
> a tuple after GRANT fetches the old tuple, before GRANT enters heap_update().

Ugh ... you're right, what I was imagining would not catch that last case.

> I anticipate a new locktag per catalog that can receive inplace updates,
> i.e. LOCKTAG_RELATION_DEFINITION and LOCKTAG_DATABASE_DEFINITION.

We could perhaps make this work by using the existing tuple-lock
infrastructure, rather than inventing new locktags (a choice that
spills to a lot of places including clients that examine pg_locks).

I would prefer though to find a solution that only depends on making
heap_inplace_update protect itself, without high-level cooperation
from the possibly-interfering updater.  This is basically because
I'm still afraid that we're defining the problem too narrowly.
For one thing, I have nearly zero confidence that GRANT et al are
the only problematic source of conflicting transactional updates.
For another, I'm worried that some extension may be using
heap_inplace_update against a catalog we're not considering here.
I'd also like to find a solution that fixes the case of a conflicting
manual UPDATE (although certainly that's a stretch goal we may not be
able to reach).

I wonder if there's a way for heap_inplace_update to mark the tuple
header as just-updated in a way that regular heap_update could
recognize.  (For standard catalog updates, we'd then end up erroring
in simple_heap_update, which I think is fine.)  We can't update xmin,
because the VACUUM callers don't have an XID; but maybe there's some
other way?  I'm speculating about putting a funny value into xmax,
or something like that, and having heap_update check that what it
sees in xmax matches what was in the tuple the update started with.

Or we could try to get rid of in-place updates, but that seems like
a mighty big lift.  All of the existing callers, except maybe
the johnny-come-lately dropdb usage, have solid documented reasons
to do it that way.

			regards, tom lane





^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-10-27 23:26  Noah Misch <[email protected]>
  parent: Tom Lane <[email protected]>
  0 siblings, 1 reply; 103+ messages in thread

From: Noah Misch @ 2023-10-27 23:26 UTC (permalink / raw)
  To: Tom Lane <[email protected]>; +Cc: Smolkin Grigory <[email protected]>; pgsql-hackers

On Fri, Oct 27, 2023 at 06:40:55PM -0400, Tom Lane wrote:
> Noah Misch <[email protected]> writes:
> > On Fri, Oct 27, 2023 at 03:32:26PM -0400, Tom Lane wrote:
> >> I'm inclined to propose that heap_inplace_update should check to
> >> make sure that it's operating on the latest version of the tuple
> >> (including, I guess, waiting for an uncommitted update?) and throw
> >> error if not.  I think this is what your B3 option is, but maybe
> >> I misinterpreted.  It might be better to throw error immediately
> >> instead of waiting to see if the other updater commits.
> 
> > That's perhaps closer to B2.  To be pedantic, B3 was about not failing or
> > waiting for GRANT to commit but instead inplace-updating every member of the
> > update chain.  For B2, I was thinking we don't need to error.  There are two
> > problematic orders of events.  The easy one is heap_inplace_update() mutating
> > a tuple that already has an xmax.  That's the one in the test case upthread,
> > and detecting it is trivial.  The harder one is heap_inplace_update() mutating
> > a tuple after GRANT fetches the old tuple, before GRANT enters heap_update().
> 
> Ugh ... you're right, what I was imagining would not catch that last case.
> 
> > I anticipate a new locktag per catalog that can receive inplace updates,
> > i.e. LOCKTAG_RELATION_DEFINITION and LOCKTAG_DATABASE_DEFINITION.
> 
> We could perhaps make this work by using the existing tuple-lock
> infrastructure, rather than inventing new locktags (a choice that
> spills to a lot of places including clients that examine pg_locks).

That could be okay.  It would be weird to reuse a short-term lock like that
one as something held till end of transaction.  But the alternative of new
locktags ain't perfect, as you say.

> I would prefer though to find a solution that only depends on making
> heap_inplace_update protect itself, without high-level cooperation
> from the possibly-interfering updater.  This is basically because
> I'm still afraid that we're defining the problem too narrowly.
> For one thing, I have nearly zero confidence that GRANT et al are
> the only problematic source of conflicting transactional updates.

Likewise here, but I have fair confidence that an assertion would flush out
the rest.  heap_inplace_update() would assert that the backend holds one of
the acceptable locks.  It could even be an elog; heap_inplace_update() can
tolerate that cost.

> For another, I'm worried that some extension may be using
> heap_inplace_update against a catalog we're not considering here.

A pgxn search finds "citus" using heap_inplace_update().

> I'd also like to find a solution that fixes the case of a conflicting
> manual UPDATE (although certainly that's a stretch goal we may not be
> able to reach).

It would be nice.

> I wonder if there's a way for heap_inplace_update to mark the tuple
> header as just-updated in a way that regular heap_update could
> recognize.  (For standard catalog updates, we'd then end up erroring
> in simple_heap_update, which I think is fine.)  We can't update xmin,
> because the VACUUM callers don't have an XID; but maybe there's some
> other way?  I'm speculating about putting a funny value into xmax,
> or something like that, and having heap_update check that what it
> sees in xmax matches what was in the tuple the update started with.

Hmmm.  Achieving it without an XID would be the real trick.  (With an XID, we
could use xl_heap_lock like heap_update() does.)  Thinking out loud, what if
heap_inplace_update() sets HEAP_XMAX_INVALID and xmax =
TransactionIdAdvance(xmax)?  Or change t_ctid in a similar way.  Then regular
heap_update() could complain if the field changed vs. last seen value.  This
feels like something to regret later in terms of limiting our ability to
harness those fields for more-valuable ends or compact them away in a future
page format.  I can't pinpoint a specific loss, so the idea might have legs.
Nontransactional data in separate tables or in new metapages smells like the
right long-term state.  A project wanting to reuse the tuple header bits could
introduce such storage to unblock its own bit reuse.

> Or we could try to get rid of in-place updates, but that seems like
> a mighty big lift.  All of the existing callers, except maybe
> the johnny-come-lately dropdb usage, have solid documented reasons
> to do it that way.

Yes, removing that smells problematic.





^ permalink  raw  reply  [nested|flat] 103+ messages in thread

* Re: race condition in pg_class
@ 2023-11-02 03:09  Noah Misch <[email protected]>
  parent: Noah Misch <[email protected]>
  0 siblings, 0 replies; 103+ messages in thread

From: Noah Misch @ 2023-11-02 03:09 UTC (permalink / raw)
  To: Tom Lane <[email protected]>; +Cc: Smolkin Grigory <[email protected]>; pgsql-hackers

I prototyped two ways, one with a special t_ctid and one with LockTuple().

On Fri, Oct 27, 2023 at 04:26:12PM -0700, Noah Misch wrote:
> On Fri, Oct 27, 2023 at 06:40:55PM -0400, Tom Lane wrote:
> > Noah Misch <[email protected]> writes:
> > > On Fri, Oct 27, 2023 at 03:32:26PM -0400, Tom Lane wrote:

> > > I anticipate a new locktag per catalog that can receive inplace updates,
> > > i.e. LOCKTAG_RELATION_DEFINITION and LOCKTAG_DATABASE_DEFINITION.
> > 
> > We could perhaps make this work by using the existing tuple-lock
> > infrastructure, rather than inventing new locktags (a choice that
> > spills to a lot of places including clients that examine pg_locks).
> 
> That could be okay.  It would be weird to reuse a short-term lock like that
> one as something held till end of transaction.  But the alternative of new
> locktags ain't perfect, as you say.

That worked.

> > I would prefer though to find a solution that only depends on making
> > heap_inplace_update protect itself, without high-level cooperation
> > from the possibly-interfering updater.  This is basically because
> > I'm still afraid that we're defining the problem too narrowly.
> > For one thing, I have nearly zero confidence that GRANT et al are
> > the only problematic source of conflicting transactional updates.
> 
> Likewise here, but I have fair confidence that an assertion would flush out
> the rest.  heap_inplace_update() would assert that the backend holds one of
> the acceptable locks.  It could even be an elog; heap_inplace_update() can
> tolerate that cost.

That check would fall in both heap_inplace_update() and heap_update().  After
all, a heap_inplace_update() check won't detect an omission in GRANT.

> > For another, I'm worried that some extension may be using
> > heap_inplace_update against a catalog we're not considering here.
> 
> A pgxn search finds "citus" using heap_inplace_update().
> 
> > I'd also like to find a solution that fixes the case of a conflicting
> > manual UPDATE (although certainly that's a stretch goal we may not be
> > able to reach).
> 
> It would be nice.

I expect most approaches could get there by having ExecModifyTable() arrange
for the expected locking or other actions.  That's analogous to how
heap_update() takes care of sinval even for a manual UPDATE.

> > I wonder if there's a way for heap_inplace_update to mark the tuple
> > header as just-updated in a way that regular heap_update could
> > recognize.  (For standard catalog updates, we'd then end up erroring
> > in simple_heap_update, which I think is fine.)  We can't update xmin,
> > because the VACUUM callers don't have an XID; but maybe there's some
> > other way?  I'm speculating about putting a funny value into xmax,
> > or something like that, and having heap_update check that what it
> > sees in xmax matches what was in the tuple the update started with.
> 
> Hmmm.  Achieving it without an XID would be the real trick.  (With an XID, we
> could use xl_heap_lock like heap_update() does.)  Thinking out loud, what if
> heap_inplace_update() sets HEAP_XMAX_INVALID and xmax =
> TransactionIdAdvance(xmax)?  Or change t_ctid in a similar way.  Then regular
> heap_update() could complain if the field changed vs. last seen value.  This
> feels like something to regret later in terms of limiting our ability to
> harness those fields for more-valuable ends or compact them away in a future
> page format.  I can't pinpoint a specific loss, so the idea might have legs.
> Nontransactional data in separate tables or in new metapages smells like the
> right long-term state.  A project wanting to reuse the tuple header bits could
> introduce such storage to unblock its own bit reuse.

heap_update() does not have the pre-modification xmax today, so I used t_ctid.
heap_modify_tuple() preserves t_ctid, so heap_update() already has the
pre-modification t_ctid in key cases.  For details of how the prototype uses
t_ctid, see comment at "#define InplaceCanaryOffsetNumber".  The prototype
doesn't prevent corruption in the following scenario, because the aborted
ALTER TABLE RENAME overwrites the special t_ctid:

  == session 1
  drop table t;
  create table t (c int);
  begin;
  -- in gdb, set breakpoint on heap_modify_tuple
  grant select on t to public;

  == session 2
  alter table t add primary key (c);
  begin; alter table t rename to t2; rollback;

  == back in session 1
  -- release breakpoint
  -- want error (would get it w/o the begin;alter;rollback)
  commit;

I'm missing how to mark the tuple in a fashion accessible to a second
heap_update() after a rolled-back heap_update().  The mark needs enough bits
"N" so it's implausible for 2^N inplace updates to happen between GRANT
fetching the old tuple and GRANT completing heap_update().  Looking for bits
that could persist across a rolled-back heap_update(), we have 3 in t_ctid, 2
in t_infomask2, and 0 in xmax.  I definitely don't want to paint us into a
corner by spending the t_infomask2 bits on this.  Even if I did, 2^(3+2)=32
wouldn't clearly be enough inplace updates.

Is there a way to salvage the goal of fixing the bug without modifying code
like ExecGrant_common()?  If not, I'm inclined to pick from one of the
following designs:

- Acquire ShareUpdateExclusiveLock in GRANT ((B1) from previous list).  It
  does make GRANT more intrusive; e.g. GRANT will cancel autovacuum.  I'm
  leaning toward this one for two reasons.  First, it doesn't slow
  heap_update() outside of assert builds.  Second, it makes the GRANT
  experience more like the rest our DDL, in that concurrent DDL will make
  GRANT block, not fail.

- GRANT passes to heapam the fixed-size portion of the pre-modification tuple.
  heap_update() compares those bytes to the oldtup in shared buffers to see if
  an inplace update happened.  (HEAD could get the bytes from a new
  heap_update() parameter, while back branches would need a different passing
  approach.)

- LockTuple(), as seen in its attached prototype.  I like this least at the
  moment, because it changes pg_locks content without having a clear advantage
  over the previous option.  Also, the prototype has enough FIXME markers that
  I expect this to get hairy before it's done.

I might change my preference after further prototypes.  Does anyone have a
strong preference between those?  Briefly, I did consider these additional
alternatives:

- Just accept the yet-rarer chance of corruption from this message's test
  procedure.

- Hold a buffer lock long enough to solve things.

- Remember the tuples where we overwrote a special t_ctid, and reverse the
  overwrite during abort processing.  But I/O in the abort path sounds bad.

Thanks,
nm

Author:     Noah Misch <[email protected]>
Commit:     Noah Misch <[email protected]>

    

diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 14de815..c0c33e9 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -2801,6 +2801,10 @@ l1:
 	HeapTupleHeaderSetXmax(tp.t_data, new_xmax);
 	HeapTupleHeaderSetCmax(tp.t_data, cid, iscombo);
 	/* Make sure there is no forward chain link in t_ctid */
+	/*
+	 * FIXME this will overwrite any InplaceCanary ctid.  Leave c_ctid
+	 * unchanged?  Accept that a rolled-back DROP could undo the protection?
+	 */
 	tp.t_data->t_ctid = tp.t_self;
 
 	/* Signal that this is actually a move into another partition */
@@ -3348,6 +3352,8 @@ l2:
 		if (!HeapTupleSatisfiesVisibility(&oldtup, crosscheck, buffer))
 		{
 			result = TM_Updated;
+			/* FiXME will InplaceCanary mechanism have race conditions w/ this
+			 * or other t_ctid asserts in this file? */
 			Assert(!ItemPointerEquals(&oldtup.t_self, &oldtup.t_data->t_ctid));
 		}
 	}
@@ -3730,6 +3736,13 @@ l2:
 										   id_has_external,
 										   &old_key_copied);
 
+	/* FIXME missing anything important via the IsValid tests? */
+	if (ItemPointerIsValid(&oldtup.t_data->t_ctid) &&
+		ItemPointerIsValid(&newtup->t_data->t_ctid) &&
+		ItemPointerGetOffsetNumber(&oldtup.t_data->t_ctid) == InplaceCanaryOffsetNumber &&
+		!ItemPointerEquals(&oldtup.t_data->t_ctid, &newtup->t_data->t_ctid))
+		elog(ERROR, "tuple concurrently updated");
+
 	/* NO EREPORT(ERROR) from here till changes are logged */
 	START_CRIT_SECTION();
 
@@ -4747,6 +4760,11 @@ failed:
 	 * updated, we need to follow the update chain to lock the new versions of
 	 * the tuple as well.
 	 */
+	/*
+	 * FIXME this will overwrite any InplaceCanary ctid.  Leave c_ctid
+	 * unchanged?  Accept that SELECT FOR UPDATE on the catalog table could
+	 * undo the protection?
+	 */
 	if (HEAP_XMAX_IS_LOCKED_ONLY(new_infomask))
 		tuple->t_data->t_ctid = *tid;
 
@@ -5892,6 +5910,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 	HeapTupleHeader htup;
 	uint32		oldlen;
 	uint32		newlen;
+	HeapTupleData oldtup;
 
 	/*
 	 * For now, we don't allow parallel updates.  Unlike a regular update,
@@ -5922,12 +5941,29 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 	if (oldlen != newlen || htup->t_hoff != tuple->t_data->t_hoff)
 		elog(ERROR, "wrong tuple length");
 
+	/* evaluate whether updated */
+	/* FIXME wait for a concurrent updater, in case it aborts */
+	oldtup.t_tableOid = RelationGetRelid(relation);
+	oldtup.t_data = htup;
+	oldtup.t_len = ItemIdGetLength(lp);
+	oldtup.t_self = tuple->t_self;
+	if (TM_Ok !=
+		HeapTupleSatisfiesUpdate(&oldtup, GetCurrentCommandId(false), buffer))
+		elog(ERROR, "tuple concurrently updated");
+
 	/* NO EREPORT(ERROR) from here till changes are logged */
 	START_CRIT_SECTION();
 
 	memcpy((char *) htup + htup->t_hoff,
 		   (char *) tuple->t_data + tuple->t_data->t_hoff,
 		   newlen);
+	if (ItemPointerGetOffsetNumber(&htup->t_ctid) ==
+		InplaceCanaryOffsetNumber)
+		BlockIdRetreat(&htup->t_ctid.ip_blkid);
+	else
+		ItemPointerSet(&htup->t_ctid,
+					   MaxBlockNumber,
+					   InplaceCanaryOffsetNumber);
 
 	MarkBufferDirty(buffer);
 
@@ -5945,6 +5981,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 		XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 		XLogRegisterBufData(0, (char *) htup + htup->t_hoff, newlen);
 
+		/* don't log t_ctid: concurrent changes not happening in recovery */
 		/* inplace updates aren't decoded atm, don't log the origin */
 
 		recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_INPLACE);
diff --git a/src/include/storage/block.h b/src/include/storage/block.h
index 31a036d..f8d9157 100644
--- a/src/include/storage/block.h
+++ b/src/include/storage/block.h
@@ -105,4 +105,14 @@ BlockIdGetBlockNumber(const BlockIdData *blockId)
 	return (((BlockNumber) blockId->bi_hi) << 16) | ((BlockNumber) blockId->bi_lo);
 }
 
+/* wraps on underflow, avoids InvalidBlockNumber */
+static inline void
+BlockIdRetreat(BlockIdData *blockId)
+{
+	BlockNumber proposal = BlockIdGetBlockNumber(blockId) - 1;
+	if (proposal == InvalidBlockNumber)
+		proposal = MaxBlockNumber;
+	BlockIdSet(blockId, proposal);
+}
+
 #endif							/* BLOCK_H */
diff --git a/src/include/storage/off.h b/src/include/storage/off.h
index 3540308..8ff776a 100644
--- a/src/include/storage/off.h
+++ b/src/include/storage/off.h
@@ -27,6 +27,19 @@ typedef uint16 OffsetNumber;
 #define FirstOffsetNumber		((OffsetNumber) 1)
 #define MaxOffsetNumber			((OffsetNumber) (BLCKSZ / sizeof(ItemIdData)))
 
+/*
+ * If a t_ctid contains InplaceCanaryOffsetNumber, it's a special ctid
+ * signifying that the tuple received a heap_inplace_update().  This is
+ * expected only in system catalogs, though extensions can use it elsewhere.
+ * (Offsets greater than MaxOffsetNumber are otherwise unattested.)  The
+ * BlockNumber acts as a counter to distinguish multiple inplace updates.  It
+ * starts at MaxBlockNumber, counts down to 0, and wraps back to
+ * MaxBlockNumber after 4B inplace updates.  (Counting upward or other ways
+ * would be fine, but this choice maximizes these special TIDs looking
+ * different from regular TIDs.)
+ */
+#define InplaceCanaryOffsetNumber	(InvalidOffsetNumber - 1)
+
 /* ----------------
  *		support macros
  * ----------------
diff --git a/src/test/isolation/expected/intra-grant-inplace.out b/src/test/isolation/expected/intra-grant-inplace.out
new file mode 100644
index 0000000..e7404e8
--- /dev/null
+++ b/src/test/isolation/expected/intra-grant-inplace.out
@@ -0,0 +1,29 @@
+Parsed test spec with 2 sessions
+
+starting permutation: b1 g1 s2 a2 s2 c1 s2
+step b1: BEGIN ISOLATION LEVEL READ COMMITTED;
+step g1: GRANT SELECT ON intra_grant_inplace TO PUBLIC;
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
+step a2: ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c);
+ERROR:  tuple concurrently updated
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
+step c1: COMMIT;
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule
index b2be88e..fcc4ad4 100644
--- a/src/test/isolation/isolation_schedule
+++ b/src/test/isolation/isolation_schedule
@@ -86,6 +86,7 @@ test: alter-table-3
 test: alter-table-4
 test: create-trigger
 test: sequence-ddl
+test: intra-grant-inplace
 test: async-notify
 test: vacuum-no-cleanup-lock
 test: timeouts
diff --git a/src/test/isolation/specs/intra-grant-inplace.spec b/src/test/isolation/specs/intra-grant-inplace.spec
new file mode 100644
index 0000000..b5720c5
--- /dev/null
+++ b/src/test/isolation/specs/intra-grant-inplace.spec
@@ -0,0 +1,29 @@
+# GRANT's lock is the catalog tuple xmax.  GRANT doesn't acquire a heavyweight
+# lock on the object undergoing an ACL change.  In-place updates, such as
+# relhasindex=true, need special code to cope.
+#
+# FIXME this is an isolation test on the assumption that I'll change
+# heap_inplace_update() to wait for the GRANT to commit or abort.  If I don't
+# do that, this could be a non-isolation test using dblink().
+
+setup
+{
+  CREATE TABLE intra_grant_inplace (c int);
+}
+
+teardown
+{
+  DROP TABLE intra_grant_inplace;
+}
+
+session s1
+step b1  { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step g1  { GRANT SELECT ON intra_grant_inplace TO PUBLIC; }
+step c1  { COMMIT; }
+
+session s2
+step s2  { SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass; }
+step a2  { ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c); }
+
+permutation b1 g1 s2 a2 s2 c1 s2

Author:     Noah Misch <[email protected]>
Commit:     Noah Misch <[email protected]>

    

diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 14de815..8e51557 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -3730,6 +3730,15 @@ l2:
 										   id_has_external,
 										   &old_key_copied);
 
+	/*
+	 * FIXME fail if updating pg_class without holding either (a)
+	 * LOCKTAG_RELATION on this row's rel, in a mode conflicting w/ ShareLock,
+	 * or (b) LOCKTAG_TUPLE.  Fail if updating pg_database without holding
+	 * either (a) LOCKTAG_OBJECT on this row's database OID, in FIXME mode, or
+	 * (b) LOCKTAG_TUPLE.  This may imply the executor taking the tuple locks
+	 * during SQL UPDATE of those tables.
+	 */
+
 	/* NO EREPORT(ERROR) from here till changes are logged */
 	START_CRIT_SECTION();
 
@@ -5892,6 +5901,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 	HeapTupleHeader htup;
 	uint32		oldlen;
 	uint32		newlen;
+	HeapTupleData oldtup;
 
 	/*
 	 * For now, we don't allow parallel updates.  Unlike a regular update,
@@ -5904,6 +5914,8 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 				(errcode(ERRCODE_INVALID_TRANSACTION_STATE),
 				 errmsg("cannot update tuples during a parallel operation")));
 
+	/* FIXME fail unless holding LockTuple(relation, &tuple->t-self, AccessExclusiveLock */
+
 	buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self)));
 	LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
 	page = (Page) BufferGetPage(buffer);
@@ -5922,6 +5934,16 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 	if (oldlen != newlen || htup->t_hoff != tuple->t_data->t_hoff)
 		elog(ERROR, "wrong tuple length");
 
+	/* evaluate whether updated */
+	/* FIXME wait for a concurrent updater, in case it aborts */
+	oldtup.t_tableOid = RelationGetRelid(relation);
+	oldtup.t_data = htup;
+	oldtup.t_len = ItemIdGetLength(lp);
+	oldtup.t_self = tuple->t_self;
+	if (TM_Ok !=
+		HeapTupleSatisfiesUpdate(&oldtup, GetCurrentCommandId(false), buffer))
+		elog(ERROR, "tuple concurrently updated");
+
 	/* NO EREPORT(ERROR) from here till changes are logged */
 	START_CRIT_SECTION();
 
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
index 3ce6c09..dba3137 100644
--- a/src/backend/catalog/aclchk.c
+++ b/src/backend/catalog/aclchk.c
@@ -1853,7 +1853,7 @@ ExecGrant_Relation(InternalGrant *istmt)
 		HeapTuple	tuple;
 		ListCell   *cell_colprivs;
 
-		tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(relOid));
+		tuple = SearchSysCacheLocked1(relation, RELOID, ObjectIdGetDatum(relOid));
 		if (!HeapTupleIsValid(tuple))
 			elog(ERROR, "cache lookup failed for relation %u", relOid);
 		pg_class_tuple = (Form_pg_class) GETSTRUCT(tuple);
@@ -2190,7 +2190,7 @@ ExecGrant_common(InternalGrant *istmt, Oid classid, AclMode default_privs,
 		Oid		   *oldmembers;
 		Oid		   *newmembers;
 
-		tuple = SearchSysCache1(cacheid, ObjectIdGetDatum(objectid));
+		tuple = SearchSysCacheLocked1(relation, cacheid, ObjectIdGetDatum(objectid));
 		if (!HeapTupleIsValid(tuple))
 			elog(ERROR, "cache lookup failed for %s %u", get_object_class_descr(classid), objectid);
 
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 143fae0..7c02380 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -2860,11 +2860,19 @@ index_update_stats(Relation rel,
 		tuple = heap_getnext(pg_class_scan, ForwardScanDirection);
 		tuple = heap_copytuple(tuple);
 		table_endscan(pg_class_scan);
+		LockTuple(pg_class, &tuple->t_self, AccessExclusiveLock);
+		/* FIXME loop in case the pg_class tuple for pg_class moved */
 	}
 	else
 	{
+		HeapTuple cachetup;
+
 		/* normal case, use syscache */
-		tuple = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relid));
+		cachetup = SearchSysCacheLocked1(pg_class,
+										 RELOID, ObjectIdGetDatum(relid));
+		tuple = heap_copytuple(cachetup);
+		if (HeapTupleIsValid(cachetup))
+			ReleaseSysCache(cachetup);
 	}
 
 	if (!HeapTupleIsValid(tuple))
@@ -2933,6 +2941,7 @@ index_update_stats(Relation rel,
 		CacheInvalidateRelcacheByTuple(tuple);
 	}
 
+	UnlockTuple(pg_class, &tuple->t_self, AccessExclusiveLock);
 	heap_freetuple(tuple);
 
 	table_close(pg_class, RowExclusiveLock);
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index 8dbda00..76be8b5 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -76,6 +76,7 @@
 #include "catalog/pg_type.h"
 #include "catalog/pg_user_mapping.h"
 #include "lib/qunique.h"
+#include "storage/lmgr.h"
 #include "utils/catcache.h"
 #include "utils/lsyscache.h"
 #include "utils/rel.h"
@@ -827,6 +828,70 @@ SearchSysCache1(int cacheId,
 	return SearchCatCache1(SysCache[cacheId], key1);
 }
 
+/*
+ * Like SearchSysCache1, but a LOCKTAG_TUPLE heavyweight lock is held in
+ * AccessExclusiveMode on return.
+ *
+ * pg_class and pg_database are subject to both heap_inplace_update() and
+ * regular heap_update().  We must not lose the effects of any inplace update.
+ * That might arise by heap_inplace_update() mutating a tuple, the xmax of
+ * which then commits.  Alternatively, it could arise by heap_inplace_update()
+ * mutating a tuple before an ongoing transaction's heap_update(), after the
+ * ongoing transaction fetches the old tuple to modify.  We prevent both with
+ * locking as follows.  All heap_inplace_update(pg_class) callers acquire two
+ * locks.  First, they acquire LOCKTAG_RELATION in mode ShareLock,
+ * ShareUpdateExclusiveLock, or a mode with strictly more conflicts.  Second,
+ * they acquire LOCKTAG_TUPLE.  heap_update(pg_class) callers can either take
+ * any lock that conflicts with one of those two.  Acquire one's choice of
+ * lock before fetching the tuple to be modified.  FIXME write corresponding
+ * story for pg_database.
+ *
+ * This function bundles the tasks of retrieving a tuple and acquiring the
+ * LOCKTAG_TUPLE.  Since much DDL opts to acquire LOCKTAG_RELATION, the
+ * LOCKTAG_TUPLE doesn't block such updaters of the returned tuple.  Callers
+ * shall reject superseded tuples, such as by checking with
+ * HeapTupleSatisfiesUpdate() while holding an exclusive lock on the tuple's
+ * buffer.
+ *
+ * We opt to loop until the search finds the same tuple we've locked.  FIXME
+ * This might not be strictly necessary, but it likely avoids some spurious
+ * errors.  In the happy case, this takes two fetches, one to determine the
+ * tid to lock and another to confirm that the TID remains the latest tuple.
+ *
+ * FIXME consider dropping Relation arg and deducing applicable locktag fields
+ * from cacheId.
+ *
+ * FIXME this may belong in a different file, with available key counts other
+ * than 1, etc.
+ */
+HeapTuple
+SearchSysCacheLocked1(Relation rel,
+					  int cacheId,
+					  Datum key1)
+{
+	ItemPointerData tid;
+	bool retry = false;
+
+	for (;;)
+	{
+		HeapTuple	tuple;
+
+		tuple = SearchSysCache1(cacheId, key1);
+		if (!HeapTupleIsValid(tuple) ||
+			(retry && ItemPointerEquals(&tid, &tuple->t_self)))
+			return tuple;
+
+		if (retry)
+			UnlockTuple(rel, &tid, AccessExclusiveLock);
+
+		tid = tuple->t_self;
+		ReleaseSysCache(tuple);
+		LockTuple(rel, &tid, AccessExclusiveLock);
+		retry = true;
+	}
+}
+
+
 HeapTuple
 SearchSysCache2(int cacheId,
 				Datum key1, Datum key2)
diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h
index 5d47a65..aba5385 100644
--- a/src/include/utils/syscache.h
+++ b/src/include/utils/syscache.h
@@ -18,6 +18,7 @@
 
 #include "access/attnum.h"
 #include "access/htup.h"
+#include "utils/rel.h"
 /* we intentionally do not include utils/catcache.h here */
 
 /*
@@ -174,6 +175,10 @@ extern bool RelationInvalidatesSnapshotsOnly(Oid relid);
 extern bool RelationHasSysCache(Oid relid);
 extern bool RelationSupportsSysCache(Oid relid);
 
+extern HeapTuple SearchSysCacheLocked1(Relation rel,
+									   int cacheId,
+									   Datum key1);
+
 /*
  * The use of the macros below rather than direct calls to the corresponding
  * functions is encouraged, as it insulates the caller from changes in the
diff --git a/src/test/isolation/expected/intra-grant-inplace.out b/src/test/isolation/expected/intra-grant-inplace.out
new file mode 100644
index 0000000..a1eed4e
--- /dev/null
+++ b/src/test/isolation/expected/intra-grant-inplace.out
@@ -0,0 +1,23 @@
+Parsed test spec with 2 sessions
+
+starting permutation: b1 g1 s2 a2 c1 s2
+step b1: BEGIN ISOLATION LEVEL READ COMMITTED;
+step g1: GRANT SELECT ON intra_grant_inplace TO PUBLIC;
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
+step a2: ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c); <waiting ...>
+step c1: COMMIT;
+step a2: <... completed>
+ERROR:  tuple concurrently updated
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule
index b2be88e..fcc4ad4 100644
--- a/src/test/isolation/isolation_schedule
+++ b/src/test/isolation/isolation_schedule
@@ -86,6 +86,7 @@ test: alter-table-3
 test: alter-table-4
 test: create-trigger
 test: sequence-ddl
+test: intra-grant-inplace
 test: async-notify
 test: vacuum-no-cleanup-lock
 test: timeouts
diff --git a/src/test/isolation/specs/intra-grant-inplace.spec b/src/test/isolation/specs/intra-grant-inplace.spec
new file mode 100644
index 0000000..85059ed
--- /dev/null
+++ b/src/test/isolation/specs/intra-grant-inplace.spec
@@ -0,0 +1,25 @@
+# GRANT's lock is the catalog tuple xmax.  GRANT doesn't acquire a heavyweight
+# lock on the object undergoing an ACL change.  In-place updates, such as
+# relhasindex=true, need special code to cope.
+
+setup
+{
+  CREATE TABLE intra_grant_inplace (c int);
+}
+
+teardown
+{
+  DROP TABLE intra_grant_inplace;
+}
+
+session s1
+step b1  { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step g1  { GRANT SELECT ON intra_grant_inplace TO PUBLIC; }
+step c1  { COMMIT; }
+
+session s2
+step s2  { SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass; }
+step a2  { ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c); }
+
+permutation b1 g1 s2 a2 c1 s2


Attachments:

  [text/plain] intra-grant-inplace-via-ctid-v0.patch (7.7K, ../../[email protected]/2-intra-grant-inplace-via-ctid-v0.patch)
  download | inline diff:
Author:     Noah Misch <[email protected]>
Commit:     Noah Misch <[email protected]>

    

diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 14de815..c0c33e9 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -2801,6 +2801,10 @@ l1:
 	HeapTupleHeaderSetXmax(tp.t_data, new_xmax);
 	HeapTupleHeaderSetCmax(tp.t_data, cid, iscombo);
 	/* Make sure there is no forward chain link in t_ctid */
+	/*
+	 * FIXME this will overwrite any InplaceCanary ctid.  Leave c_ctid
+	 * unchanged?  Accept that a rolled-back DROP could undo the protection?
+	 */
 	tp.t_data->t_ctid = tp.t_self;
 
 	/* Signal that this is actually a move into another partition */
@@ -3348,6 +3352,8 @@ l2:
 		if (!HeapTupleSatisfiesVisibility(&oldtup, crosscheck, buffer))
 		{
 			result = TM_Updated;
+			/* FiXME will InplaceCanary mechanism have race conditions w/ this
+			 * or other t_ctid asserts in this file? */
 			Assert(!ItemPointerEquals(&oldtup.t_self, &oldtup.t_data->t_ctid));
 		}
 	}
@@ -3730,6 +3736,13 @@ l2:
 										   id_has_external,
 										   &old_key_copied);
 
+	/* FIXME missing anything important via the IsValid tests? */
+	if (ItemPointerIsValid(&oldtup.t_data->t_ctid) &&
+		ItemPointerIsValid(&newtup->t_data->t_ctid) &&
+		ItemPointerGetOffsetNumber(&oldtup.t_data->t_ctid) == InplaceCanaryOffsetNumber &&
+		!ItemPointerEquals(&oldtup.t_data->t_ctid, &newtup->t_data->t_ctid))
+		elog(ERROR, "tuple concurrently updated");
+
 	/* NO EREPORT(ERROR) from here till changes are logged */
 	START_CRIT_SECTION();
 
@@ -4747,6 +4760,11 @@ failed:
 	 * updated, we need to follow the update chain to lock the new versions of
 	 * the tuple as well.
 	 */
+	/*
+	 * FIXME this will overwrite any InplaceCanary ctid.  Leave c_ctid
+	 * unchanged?  Accept that SELECT FOR UPDATE on the catalog table could
+	 * undo the protection?
+	 */
 	if (HEAP_XMAX_IS_LOCKED_ONLY(new_infomask))
 		tuple->t_data->t_ctid = *tid;
 
@@ -5892,6 +5910,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 	HeapTupleHeader htup;
 	uint32		oldlen;
 	uint32		newlen;
+	HeapTupleData oldtup;
 
 	/*
 	 * For now, we don't allow parallel updates.  Unlike a regular update,
@@ -5922,12 +5941,29 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 	if (oldlen != newlen || htup->t_hoff != tuple->t_data->t_hoff)
 		elog(ERROR, "wrong tuple length");
 
+	/* evaluate whether updated */
+	/* FIXME wait for a concurrent updater, in case it aborts */
+	oldtup.t_tableOid = RelationGetRelid(relation);
+	oldtup.t_data = htup;
+	oldtup.t_len = ItemIdGetLength(lp);
+	oldtup.t_self = tuple->t_self;
+	if (TM_Ok !=
+		HeapTupleSatisfiesUpdate(&oldtup, GetCurrentCommandId(false), buffer))
+		elog(ERROR, "tuple concurrently updated");
+
 	/* NO EREPORT(ERROR) from here till changes are logged */
 	START_CRIT_SECTION();
 
 	memcpy((char *) htup + htup->t_hoff,
 		   (char *) tuple->t_data + tuple->t_data->t_hoff,
 		   newlen);
+	if (ItemPointerGetOffsetNumber(&htup->t_ctid) ==
+		InplaceCanaryOffsetNumber)
+		BlockIdRetreat(&htup->t_ctid.ip_blkid);
+	else
+		ItemPointerSet(&htup->t_ctid,
+					   MaxBlockNumber,
+					   InplaceCanaryOffsetNumber);
 
 	MarkBufferDirty(buffer);
 
@@ -5945,6 +5981,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 		XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 		XLogRegisterBufData(0, (char *) htup + htup->t_hoff, newlen);
 
+		/* don't log t_ctid: concurrent changes not happening in recovery */
 		/* inplace updates aren't decoded atm, don't log the origin */
 
 		recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_INPLACE);
diff --git a/src/include/storage/block.h b/src/include/storage/block.h
index 31a036d..f8d9157 100644
--- a/src/include/storage/block.h
+++ b/src/include/storage/block.h
@@ -105,4 +105,14 @@ BlockIdGetBlockNumber(const BlockIdData *blockId)
 	return (((BlockNumber) blockId->bi_hi) << 16) | ((BlockNumber) blockId->bi_lo);
 }
 
+/* wraps on underflow, avoids InvalidBlockNumber */
+static inline void
+BlockIdRetreat(BlockIdData *blockId)
+{
+	BlockNumber proposal = BlockIdGetBlockNumber(blockId) - 1;
+	if (proposal == InvalidBlockNumber)
+		proposal = MaxBlockNumber;
+	BlockIdSet(blockId, proposal);
+}
+
 #endif							/* BLOCK_H */
diff --git a/src/include/storage/off.h b/src/include/storage/off.h
index 3540308..8ff776a 100644
--- a/src/include/storage/off.h
+++ b/src/include/storage/off.h
@@ -27,6 +27,19 @@ typedef uint16 OffsetNumber;
 #define FirstOffsetNumber		((OffsetNumber) 1)
 #define MaxOffsetNumber			((OffsetNumber) (BLCKSZ / sizeof(ItemIdData)))
 
+/*
+ * If a t_ctid contains InplaceCanaryOffsetNumber, it's a special ctid
+ * signifying that the tuple received a heap_inplace_update().  This is
+ * expected only in system catalogs, though extensions can use it elsewhere.
+ * (Offsets greater than MaxOffsetNumber are otherwise unattested.)  The
+ * BlockNumber acts as a counter to distinguish multiple inplace updates.  It
+ * starts at MaxBlockNumber, counts down to 0, and wraps back to
+ * MaxBlockNumber after 4B inplace updates.  (Counting upward or other ways
+ * would be fine, but this choice maximizes these special TIDs looking
+ * different from regular TIDs.)
+ */
+#define InplaceCanaryOffsetNumber	(InvalidOffsetNumber - 1)
+
 /* ----------------
  *		support macros
  * ----------------
diff --git a/src/test/isolation/expected/intra-grant-inplace.out b/src/test/isolation/expected/intra-grant-inplace.out
new file mode 100644
index 0000000..e7404e8
--- /dev/null
+++ b/src/test/isolation/expected/intra-grant-inplace.out
@@ -0,0 +1,29 @@
+Parsed test spec with 2 sessions
+
+starting permutation: b1 g1 s2 a2 s2 c1 s2
+step b1: BEGIN ISOLATION LEVEL READ COMMITTED;
+step g1: GRANT SELECT ON intra_grant_inplace TO PUBLIC;
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
+step a2: ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c);
+ERROR:  tuple concurrently updated
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
+step c1: COMMIT;
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule
index b2be88e..fcc4ad4 100644
--- a/src/test/isolation/isolation_schedule
+++ b/src/test/isolation/isolation_schedule
@@ -86,6 +86,7 @@ test: alter-table-3
 test: alter-table-4
 test: create-trigger
 test: sequence-ddl
+test: intra-grant-inplace
 test: async-notify
 test: vacuum-no-cleanup-lock
 test: timeouts
diff --git a/src/test/isolation/specs/intra-grant-inplace.spec b/src/test/isolation/specs/intra-grant-inplace.spec
new file mode 100644
index 0000000..b5720c5
--- /dev/null
+++ b/src/test/isolation/specs/intra-grant-inplace.spec
@@ -0,0 +1,29 @@
+# GRANT's lock is the catalog tuple xmax.  GRANT doesn't acquire a heavyweight
+# lock on the object undergoing an ACL change.  In-place updates, such as
+# relhasindex=true, need special code to cope.
+#
+# FIXME this is an isolation test on the assumption that I'll change
+# heap_inplace_update() to wait for the GRANT to commit or abort.  If I don't
+# do that, this could be a non-isolation test using dblink().
+
+setup
+{
+  CREATE TABLE intra_grant_inplace (c int);
+}
+
+teardown
+{
+  DROP TABLE intra_grant_inplace;
+}
+
+session s1
+step b1  { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step g1  { GRANT SELECT ON intra_grant_inplace TO PUBLIC; }
+step c1  { COMMIT; }
+
+session s2
+step s2  { SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass; }
+step a2  { ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c); }
+
+permutation b1 g1 s2 a2 s2 c1 s2


  [text/plain] intra-grant-inplace-via-tuplock-v0.patch (10.2K, ../../[email protected]/3-intra-grant-inplace-via-tuplock-v0.patch)
  download | inline diff:
Author:     Noah Misch <[email protected]>
Commit:     Noah Misch <[email protected]>

    

diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 14de815..8e51557 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -3730,6 +3730,15 @@ l2:
 										   id_has_external,
 										   &old_key_copied);
 
+	/*
+	 * FIXME fail if updating pg_class without holding either (a)
+	 * LOCKTAG_RELATION on this row's rel, in a mode conflicting w/ ShareLock,
+	 * or (b) LOCKTAG_TUPLE.  Fail if updating pg_database without holding
+	 * either (a) LOCKTAG_OBJECT on this row's database OID, in FIXME mode, or
+	 * (b) LOCKTAG_TUPLE.  This may imply the executor taking the tuple locks
+	 * during SQL UPDATE of those tables.
+	 */
+
 	/* NO EREPORT(ERROR) from here till changes are logged */
 	START_CRIT_SECTION();
 
@@ -5892,6 +5901,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 	HeapTupleHeader htup;
 	uint32		oldlen;
 	uint32		newlen;
+	HeapTupleData oldtup;
 
 	/*
 	 * For now, we don't allow parallel updates.  Unlike a regular update,
@@ -5904,6 +5914,8 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 				(errcode(ERRCODE_INVALID_TRANSACTION_STATE),
 				 errmsg("cannot update tuples during a parallel operation")));
 
+	/* FIXME fail unless holding LockTuple(relation, &tuple->t-self, AccessExclusiveLock */
+
 	buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self)));
 	LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
 	page = (Page) BufferGetPage(buffer);
@@ -5922,6 +5934,16 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
 	if (oldlen != newlen || htup->t_hoff != tuple->t_data->t_hoff)
 		elog(ERROR, "wrong tuple length");
 
+	/* evaluate whether updated */
+	/* FIXME wait for a concurrent updater, in case it aborts */
+	oldtup.t_tableOid = RelationGetRelid(relation);
+	oldtup.t_data = htup;
+	oldtup.t_len = ItemIdGetLength(lp);
+	oldtup.t_self = tuple->t_self;
+	if (TM_Ok !=
+		HeapTupleSatisfiesUpdate(&oldtup, GetCurrentCommandId(false), buffer))
+		elog(ERROR, "tuple concurrently updated");
+
 	/* NO EREPORT(ERROR) from here till changes are logged */
 	START_CRIT_SECTION();
 
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
index 3ce6c09..dba3137 100644
--- a/src/backend/catalog/aclchk.c
+++ b/src/backend/catalog/aclchk.c
@@ -1853,7 +1853,7 @@ ExecGrant_Relation(InternalGrant *istmt)
 		HeapTuple	tuple;
 		ListCell   *cell_colprivs;
 
-		tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(relOid));
+		tuple = SearchSysCacheLocked1(relation, RELOID, ObjectIdGetDatum(relOid));
 		if (!HeapTupleIsValid(tuple))
 			elog(ERROR, "cache lookup failed for relation %u", relOid);
 		pg_class_tuple = (Form_pg_class) GETSTRUCT(tuple);
@@ -2190,7 +2190,7 @@ ExecGrant_common(InternalGrant *istmt, Oid classid, AclMode default_privs,
 		Oid		   *oldmembers;
 		Oid		   *newmembers;
 
-		tuple = SearchSysCache1(cacheid, ObjectIdGetDatum(objectid));
+		tuple = SearchSysCacheLocked1(relation, cacheid, ObjectIdGetDatum(objectid));
 		if (!HeapTupleIsValid(tuple))
 			elog(ERROR, "cache lookup failed for %s %u", get_object_class_descr(classid), objectid);
 
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 143fae0..7c02380 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -2860,11 +2860,19 @@ index_update_stats(Relation rel,
 		tuple = heap_getnext(pg_class_scan, ForwardScanDirection);
 		tuple = heap_copytuple(tuple);
 		table_endscan(pg_class_scan);
+		LockTuple(pg_class, &tuple->t_self, AccessExclusiveLock);
+		/* FIXME loop in case the pg_class tuple for pg_class moved */
 	}
 	else
 	{
+		HeapTuple cachetup;
+
 		/* normal case, use syscache */
-		tuple = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relid));
+		cachetup = SearchSysCacheLocked1(pg_class,
+										 RELOID, ObjectIdGetDatum(relid));
+		tuple = heap_copytuple(cachetup);
+		if (HeapTupleIsValid(cachetup))
+			ReleaseSysCache(cachetup);
 	}
 
 	if (!HeapTupleIsValid(tuple))
@@ -2933,6 +2941,7 @@ index_update_stats(Relation rel,
 		CacheInvalidateRelcacheByTuple(tuple);
 	}
 
+	UnlockTuple(pg_class, &tuple->t_self, AccessExclusiveLock);
 	heap_freetuple(tuple);
 
 	table_close(pg_class, RowExclusiveLock);
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index 8dbda00..76be8b5 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -76,6 +76,7 @@
 #include "catalog/pg_type.h"
 #include "catalog/pg_user_mapping.h"
 #include "lib/qunique.h"
+#include "storage/lmgr.h"
 #include "utils/catcache.h"
 #include "utils/lsyscache.h"
 #include "utils/rel.h"
@@ -827,6 +828,70 @@ SearchSysCache1(int cacheId,
 	return SearchCatCache1(SysCache[cacheId], key1);
 }
 
+/*
+ * Like SearchSysCache1, but a LOCKTAG_TUPLE heavyweight lock is held in
+ * AccessExclusiveMode on return.
+ *
+ * pg_class and pg_database are subject to both heap_inplace_update() and
+ * regular heap_update().  We must not lose the effects of any inplace update.
+ * That might arise by heap_inplace_update() mutating a tuple, the xmax of
+ * which then commits.  Alternatively, it could arise by heap_inplace_update()
+ * mutating a tuple before an ongoing transaction's heap_update(), after the
+ * ongoing transaction fetches the old tuple to modify.  We prevent both with
+ * locking as follows.  All heap_inplace_update(pg_class) callers acquire two
+ * locks.  First, they acquire LOCKTAG_RELATION in mode ShareLock,
+ * ShareUpdateExclusiveLock, or a mode with strictly more conflicts.  Second,
+ * they acquire LOCKTAG_TUPLE.  heap_update(pg_class) callers can either take
+ * any lock that conflicts with one of those two.  Acquire one's choice of
+ * lock before fetching the tuple to be modified.  FIXME write corresponding
+ * story for pg_database.
+ *
+ * This function bundles the tasks of retrieving a tuple and acquiring the
+ * LOCKTAG_TUPLE.  Since much DDL opts to acquire LOCKTAG_RELATION, the
+ * LOCKTAG_TUPLE doesn't block such updaters of the returned tuple.  Callers
+ * shall reject superseded tuples, such as by checking with
+ * HeapTupleSatisfiesUpdate() while holding an exclusive lock on the tuple's
+ * buffer.
+ *
+ * We opt to loop until the search finds the same tuple we've locked.  FIXME
+ * This might not be strictly necessary, but it likely avoids some spurious
+ * errors.  In the happy case, this takes two fetches, one to determine the
+ * tid to lock and another to confirm that the TID remains the latest tuple.
+ *
+ * FIXME consider dropping Relation arg and deducing applicable locktag fields
+ * from cacheId.
+ *
+ * FIXME this may belong in a different file, with available key counts other
+ * than 1, etc.
+ */
+HeapTuple
+SearchSysCacheLocked1(Relation rel,
+					  int cacheId,
+					  Datum key1)
+{
+	ItemPointerData tid;
+	bool retry = false;
+
+	for (;;)
+	{
+		HeapTuple	tuple;
+
+		tuple = SearchSysCache1(cacheId, key1);
+		if (!HeapTupleIsValid(tuple) ||
+			(retry && ItemPointerEquals(&tid, &tuple->t_self)))
+			return tuple;
+
+		if (retry)
+			UnlockTuple(rel, &tid, AccessExclusiveLock);
+
+		tid = tuple->t_self;
+		ReleaseSysCache(tuple);
+		LockTuple(rel, &tid, AccessExclusiveLock);
+		retry = true;
+	}
+}
+
+
 HeapTuple
 SearchSysCache2(int cacheId,
 				Datum key1, Datum key2)
diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h
index 5d47a65..aba5385 100644
--- a/src/include/utils/syscache.h
+++ b/src/include/utils/syscache.h
@@ -18,6 +18,7 @@
 
 #include "access/attnum.h"
 #include "access/htup.h"
+#include "utils/rel.h"
 /* we intentionally do not include utils/catcache.h here */
 
 /*
@@ -174,6 +175,10 @@ extern bool RelationInvalidatesSnapshotsOnly(Oid relid);
 extern bool RelationHasSysCache(Oid relid);
 extern bool RelationSupportsSysCache(Oid relid);
 
+extern HeapTuple SearchSysCacheLocked1(Relation rel,
+									   int cacheId,
+									   Datum key1);
+
 /*
  * The use of the macros below rather than direct calls to the corresponding
  * functions is encouraged, as it insulates the caller from changes in the
diff --git a/src/test/isolation/expected/intra-grant-inplace.out b/src/test/isolation/expected/intra-grant-inplace.out
new file mode 100644
index 0000000..a1eed4e
--- /dev/null
+++ b/src/test/isolation/expected/intra-grant-inplace.out
@@ -0,0 +1,23 @@
+Parsed test spec with 2 sessions
+
+starting permutation: b1 g1 s2 a2 c1 s2
+step b1: BEGIN ISOLATION LEVEL READ COMMITTED;
+step g1: GRANT SELECT ON intra_grant_inplace TO PUBLIC;
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
+step a2: ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c); <waiting ...>
+step c1: COMMIT;
+step a2: <... completed>
+ERROR:  tuple concurrently updated
+step s2: SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass;
+relhasindex
+-----------
+f          
+(1 row)
+
diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule
index b2be88e..fcc4ad4 100644
--- a/src/test/isolation/isolation_schedule
+++ b/src/test/isolation/isolation_schedule
@@ -86,6 +86,7 @@ test: alter-table-3
 test: alter-table-4
 test: create-trigger
 test: sequence-ddl
+test: intra-grant-inplace
 test: async-notify
 test: vacuum-no-cleanup-lock
 test: timeouts
diff --git a/src/test/isolation/specs/intra-grant-inplace.spec b/src/test/isolation/specs/intra-grant-inplace.spec
new file mode 100644
index 0000000..85059ed
--- /dev/null
+++ b/src/test/isolation/specs/intra-grant-inplace.spec
@@ -0,0 +1,25 @@
+# GRANT's lock is the catalog tuple xmax.  GRANT doesn't acquire a heavyweight
+# lock on the object undergoing an ACL change.  In-place updates, such as
+# relhasindex=true, need special code to cope.
+
+setup
+{
+  CREATE TABLE intra_grant_inplace (c int);
+}
+
+teardown
+{
+  DROP TABLE intra_grant_inplace;
+}
+
+session s1
+step b1  { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step g1  { GRANT SELECT ON intra_grant_inplace TO PUBLIC; }
+step c1  { COMMIT; }
+
+session s2
+step s2  { SELECT relhasindex FROM pg_class
+           WHERE oid = 'intra_grant_inplace'::regclass; }
+step a2  { ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c); }
+
+permutation b1 g1 s2 a2 c1 s2


^ permalink  raw  reply  [nested|flat] 103+ messages in thread


end of thread, other threads:[~2023-11-02 03:09 UTC | newest]

Thread overview: 103+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v3 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v2 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-01-26 09:43 [PATCH v4 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-13 05:49 [PATCH v5 3/5] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Japin Li <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v8 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2021-02-16 01:50 [PATCH v7 2/4] Test ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION Bharath Rupireddy <[email protected]>
2023-10-25 10:39 race condition in pg_class Smolkin Grigory <[email protected]>
2023-10-25 12:57 ` Re: race condition in pg_class Andrey M. Borodin <[email protected]>
2023-10-25 18:06 ` Re: race condition in pg_class Tom Lane <[email protected]>
2023-10-26 09:52   ` Re: race condition in pg_class Smolkin Grigory <[email protected]>
2023-10-27 04:44 ` Re: race condition in pg_class Noah Misch <[email protected]>
2023-10-27 10:03   ` Re: race condition in pg_class Smolkin Grigory <[email protected]>
2023-10-27 18:48   ` Re: race condition in pg_class Noah Misch <[email protected]>
2023-10-27 19:32     ` Re: race condition in pg_class Tom Lane <[email protected]>
2023-10-27 21:49       ` Re: race condition in pg_class Noah Misch <[email protected]>
2023-10-27 22:40         ` Re: race condition in pg_class Tom Lane <[email protected]>
2023-10-27 23:26           ` Re: race condition in pg_class Noah Misch <[email protected]>
2023-11-02 03:09             ` Re: race condition in pg_class Noah Misch <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox