bdr: basic UPDATE tests
authorChristoph Moench-Tegeder <christoph@2ndquadrant.com>
Thu, 24 Jul 2014 15:46:20 +0000 (17:46 +0200)
committerAndres Freund <andres@anarazel.de>
Mon, 8 Sep 2014 15:49:54 +0000 (17:49 +0200)
Makefile
expected/dml/update_basic.out [new file with mode: 0644]
sql/dml/update_basic.sql [new file with mode: 0644]

index 95a6ee6f92da342f96ebc77d4ea88163ac1fb1da..ba468625bfc3b8dd70c9411714d8ef64feb50962 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -68,7 +68,7 @@ check: all | submake-regress submake-btree_gist submake-pg_trgm regresscheck
 
 REGRESSCHECKS=init \
    ddl/create ddl/alter_table ddl/extension ddl/sequence \
-   dml/basic dml/delete_pk dml/delete_extended dml/toasted
+   dml/basic dml/delete_pk dml/delete_extended dml/update_basic dml/toasted
 
 regresscheck:
    [ -e pg_hba.conf ] || ln -s $(top_srcdir)/contrib/bdr/pg_hba.conf .
diff --git a/expected/dml/update_basic.out b/expected/dml/update_basic.out
new file mode 100644 (file)
index 0000000..b7f9ed5
--- /dev/null
@@ -0,0 +1,109 @@
+-- UPDATEs with simple types
+CREATE TABLE tst (
+    a INTEGER PRIMARY KEY,
+    b TEXT,
+    c FLOAT
+    );
+INSERT INTO tst (a, b, c) SELECT generate_series(1, 1000), 1, 1;
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+ pg_xlog_wait_remote_apply 
+---------------------------
+(2 rows)
+
+\c postgres
+SELECT COUNT(*) FROM tst;
+ count 
+-------
+  1000
+(1 row)
+
+UPDATE tst SET b = 'xyz';
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+ pg_xlog_wait_remote_apply 
+---------------------------
+(2 rows)
+
+\c regression
+SELECT b, COUNT(*) FROM tst GROUP BY b ORDER BY b;
+  b  | count 
+-----+-------
+ xyz |  1000
+(1 row)
+
+UPDATE tst SET b = 'def' WHERE a BETWEEN 10 AND 500;
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+ pg_xlog_wait_remote_apply 
+---------------------------
+(2 rows)
+
+\c postgres
+SELECT b, COUNT(*) FROM tst GROUP BY b ORDER BY b;
+  b  | count 
+-----+-------
+ def |   491
+ xyz |   509
+(2 rows)
+
+-- two UPDATEs without explicit sync in between
+UPDATE tst SET b = 'abc' WHERE a BETWEEN 10 AND 500;
+\c regression
+UPDATE tst SET b = 'abc' WHERE a = 1;
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+ pg_xlog_wait_remote_apply 
+---------------------------
+(2 rows)
+
+\c postgres
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+ pg_xlog_wait_remote_apply 
+---------------------------
+(2 rows)
+
+SELECT b, count(*) FROM tst GROUP BY b ORDER BY b;
+  b  | count 
+-----+-------
+ abc |   492
+ xyz |   508
+(2 rows)
+
+\c regression
+SELECT b, count(*) FROM tst GROUP BY b ORDER BY b;
+  b  | count 
+-----+-------
+ abc |   492
+ xyz |   508
+(2 rows)
+
+BEGIN;
+UPDATE tst SET b = 'abc' WHERE a BETWEEN 10 AND 500;
+UPDATE tst SET b = 'abc1' WHERE a BETWEEN 20 AND 600;
+UPDATE tst SET b = 'abc2' WHERE a BETWEEN 30 AND 700;
+COMMIT;
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+ pg_xlog_wait_remote_apply 
+---------------------------
+(2 rows)
+
+\c postgres
+SELECT b, count(*) FROM tst GROUP BY b ORDER BY b;
+  b   | count 
+------+-------
+ abc  |    11
+ abc1 |    10
+ abc2 |   671
+ xyz  |   308
+(4 rows)
+
+DROP TABLE tst;
diff --git a/sql/dml/update_basic.sql b/sql/dml/update_basic.sql
new file mode 100644 (file)
index 0000000..35df6d6
--- /dev/null
@@ -0,0 +1,42 @@
+-- UPDATEs with simple types
+CREATE TABLE tst (
+    a INTEGER PRIMARY KEY,
+    b TEXT,
+    c FLOAT
+    );
+INSERT INTO tst (a, b, c) SELECT generate_series(1, 1000), 1, 1;
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+\c postgres
+SELECT COUNT(*) FROM tst;
+
+UPDATE tst SET b = 'xyz';
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+\c regression
+SELECT b, COUNT(*) FROM tst GROUP BY b ORDER BY b;
+
+UPDATE tst SET b = 'def' WHERE a BETWEEN 10 AND 500;
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+\c postgres
+SELECT b, COUNT(*) FROM tst GROUP BY b ORDER BY b;
+
+-- two UPDATEs without explicit sync in between
+UPDATE tst SET b = 'abc' WHERE a BETWEEN 10 AND 500;
+\c regression
+UPDATE tst SET b = 'abc' WHERE a = 1;
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+\c postgres
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+SELECT b, count(*) FROM tst GROUP BY b ORDER BY b;
+\c regression
+SELECT b, count(*) FROM tst GROUP BY b ORDER BY b;
+
+BEGIN;
+UPDATE tst SET b = 'abc' WHERE a BETWEEN 10 AND 500;
+UPDATE tst SET b = 'abc1' WHERE a BETWEEN 20 AND 600;
+UPDATE tst SET b = 'abc2' WHERE a BETWEEN 30 AND 700;
+COMMIT;
+SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location()::text, pid) FROM pg_stat_replication;
+\c postgres
+SELECT b, count(*) FROM tst GROUP BY b ORDER BY b;
+
+DROP TABLE tst;