bdr: Use "C" collation for the text columns used in sequence voting.
authorAndres Freund <andres@anarazel.de>
Tue, 2 Dec 2014 11:00:29 +0000 (12:00 +0100)
committerAndres Freund <andres@anarazel.de>
Tue, 2 Dec 2014 12:43:39 +0000 (13:43 +0100)
As it turns out using a plain collation can reduce sequence voting
cost considerably - I could observe about 50% reduction in time. As
the column's contents are originally of type 'name' (only that that's
not supported by btree_gist) or sysids, we can be perfectly content
with sorting "C" gives us.

Makefile.in
bdr--0.8.0.2--0.8.0.3.sql [new file with mode: 0644]
bdr--0.8.0.sql
bdr.control
expected/upgrade.out
sql/upgrade.sql

index 815c03b73dfe75dce3ba543e94763b3ba70a2d12..d1cf1df04c771d4f253a2989d3c12d747fc1fe60 100644 (file)
@@ -7,9 +7,13 @@ MODULE_big = bdr
 EXTENSION = bdr
 DATA = bdr--0.8.0.sql \
    bdr--0.7--0.7.1.sql bdr--0.7.1--0.8.0.sql \
-   bdr--0.8.0--0.8.0.1.sql bdr--0.8.0.1--0.8.0.2.sql
+   bdr--0.8.0--0.8.0.1.sql \
+   bdr--0.8.0.1--0.8.0.2.sql \
+   bdr--0.8.0.2--0.8.0.3.sql
 
-DATA_built = bdr--0.8.0.1.sql bdr--0.8.0.2.sql
+DATA_built = bdr--0.8.0.1.sql \
+   bdr--0.8.0.2.sql \
+   bdr--0.8.0.3.sql
 
 DOCS = bdr.conf.sample README.bdr
 SCRIPTS = scripts/bdr_initial_load bdr_init_copy bdr_resetxlog bdr_dump
@@ -92,7 +96,12 @@ endif
 bdr--0.8.0.1.sql: bdr--0.8.0.sql bdr--0.8.0--0.8.0.1.sql
    cat $^ > $@
 
-bdr--0.8.0.2.sql: bdr--0.8.0.sql bdr--0.8.0--0.8.0.1.sql bdr--0.8.0.1--0.8.0.2.sql
+bdr--0.8.0.2.sql: bdr--0.8.0.sql bdr--0.8.0--0.8.0.1.sql \
+   bdr--0.8.0.1--0.8.0.2.sql
+   cat $^ > $@
+
+bdr--0.8.0.3.sql: bdr--0.8.0.sql bdr--0.8.0--0.8.0.1.sql \
+   bdr--0.8.0.1--0.8.0.2.sql bdr--0.8.0.2--0.8.0.3.sql
    cat $^ > $@
 
 bdr_resetxlog: pg_resetxlog.o
diff --git a/bdr--0.8.0.2--0.8.0.3.sql b/bdr--0.8.0.2--0.8.0.3.sql
new file mode 100644 (file)
index 0000000..cf57cca
--- /dev/null
@@ -0,0 +1,24 @@
+SET bdr.skip_ddl_replication = on;
+SET bdr.permit_unsafe_ddl_commands = on;
+
+ALTER TABLE bdr.bdr_sequence_values
+    ALTER COLUMN owning_sysid TYPE text COLLATE "C",
+    ALTER COLUMN owning_riname TYPE text COLLATE "C",
+    ALTER COLUMN seqschema TYPE text COLLATE "C",
+    ALTER COLUMN seqname TYPE text COLLATE "C";
+
+ALTER TABLE bdr.bdr_sequence_elections
+    ALTER COLUMN owning_sysid TYPE text COLLATE "C",
+    ALTER COLUMN owning_riname TYPE text COLLATE "C",
+    ALTER COLUMN seqschema TYPE text COLLATE "C",
+    ALTER COLUMN seqname TYPE text COLLATE "C",
+    ALTER COLUMN vote_type TYPE text COLLATE "C"
+    ;
+
+ALTER TABLE bdr.bdr_votes
+    ALTER COLUMN voter_sysid TYPE text COLLATE "C",
+    ALTER COLUMN voter_riname TYPE text COLLATE "C",
+    ALTER COLUMN vote_sysid TYPE text COLLATE "C",
+    ALTER COLUMN vote_riname TYPE text COLLATE "C",
+    ALTER COLUMN reason TYPE text COLLATE "C"
+    ;
index 1eb55876a1747d19453df0b24e2fb97d69208c9a..0560a8ed16ccef588486bfb99903f3dc176ff9f1 100644 (file)
@@ -48,13 +48,13 @@ CREATE VIEW pg_stat_bdr AS SELECT * FROM pg_stat_get_bdr();
 
 CREATE TABLE bdr_sequence_values
 (
-    owning_sysid text NOT NULL,
+    owning_sysid text NOT NULL COLLATE "C",
     owning_tlid oid NOT NULL,
     owning_dboid oid NOT NULL,
-    owning_riname text NOT NULL,
+    owning_riname text NOT NULL COLLATE "C",
 
-    seqschema text NOT NULL,
-    seqname text NOT NULL,
+    seqschema text NOT NULL COLLATE "C",
+    seqname text NOT NULL COLLATE "C",
     seqrange int8range NOT NULL,
 
     -- could not acquire chunk
@@ -80,19 +80,19 @@ CREATE INDEX bdr_sequence_values_newchunk ON bdr_sequence_values(seqschema, seqn
 
 CREATE TABLE bdr_sequence_elections
 (
-    owning_sysid text NOT NULL,
+    owning_sysid text NOT NULL COLLATE "C",
     owning_tlid oid NOT NULL,
     owning_dboid oid NOT NULL,
-    owning_riname text NOT NULL,
+    owning_riname text NOT NULL COLLATE "C",
     owning_election_id bigint NOT NULL,
 
-    seqschema text NOT NULL,
-    seqname text NOT NULL,
+    seqschema text NOT NULL COLLATE "C",
+    seqname text NOT NULL COLLATE "C",
     seqrange int8range NOT NULL,
 
     /* XXX id */
 
-    vote_type text NOT NULL,
+    vote_type text NOT NULL COLLATE "C",
 
     open bool NOT NULL,
     success bool NOT NULL DEFAULT false,
@@ -109,19 +109,19 @@ CREATE INDEX bdr_sequence_elections__owner_range ON bdr.bdr_sequence_elections U
 
 CREATE TABLE bdr_votes
 (
-    vote_sysid text NOT NULL,
+    vote_sysid text NOT NULL COLLATE "C",
     vote_tlid oid NOT NULL,
     vote_dboid oid NOT NULL,
-    vote_riname text NOT NULL,
+    vote_riname text NOT NULL COLLATE "C",
     vote_election_id bigint NOT NULL,
 
-    voter_sysid text NOT NULL,
+    voter_sysid text NOT NULL COLLATE "C",
     voter_tlid oid NOT NULL,
     voter_dboid oid NOT NULL,
-    voter_riname text NOT NULL,
+    voter_riname text NOT NULL COLLATE "C",
 
     vote bool NOT NULL,
-    reason text CHECK (reason IS NULL OR vote = false),
+    reason text COLLATE "C" CHECK (reason IS NULL OR vote = false),
     UNIQUE(vote_sysid, vote_tlid, vote_dboid, vote_riname, vote_election_id, voter_sysid, voter_tlid, voter_dboid, voter_riname)
 );
 REVOKE ALL ON TABLE bdr_votes FROM PUBLIC;
index a286bcfd36310afb8706c58b7c4537845d4f9d20..ef4f8d27db93c69dade24f55afd5f88cde08f202 100644 (file)
@@ -1,6 +1,6 @@
 # bdr extension
 comment = 'bdr support functions'
-default_version = '0.8.0.2'
+default_version = '0.8.0.3'
 module_pathname = '$libdir/bdr'
 relocatable = false
 requires = btree_gist
index 307d82a479896a040d130e9aaee12e65845c298f..53a907d3dd0dab832b992a92e4d25e37103c3e93 100644 (file)
@@ -13,12 +13,15 @@ CREATE EXTENSION bdr VERSION '0.8.0.1';
 DROP EXTENSION bdr;
 CREATE EXTENSION bdr VERSION '0.8.0.2';
 DROP EXTENSION bdr;
+CREATE EXTENSION bdr VERSION '0.8.0.3';
+DROP EXTENSION bdr;
 -- evolve version one by one from the oldest to the newest one
 CREATE EXTENSION bdr VERSION '0.8.0';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.1';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.2';
+ALTER EXTENSION bdr UPDATE TO '0.8.0.3';
 -- Should never have to do anything: You missed adding the new version above.
 ALTER EXTENSION bdr UPDATE;
-NOTICE:  version "0.8.0.2" of extension "bdr" is already installed
+NOTICE:  version "0.8.0.3" of extension "bdr" is already installed
 \c postgres
 DROP DATABASE extension_upgrade;
index 7e848b6b883991162305fc2835304006d4a40492..5bcd7673cd5e5bc6beaf3f2703bc20740f146365 100644 (file)
@@ -18,10 +18,14 @@ DROP EXTENSION bdr;
 CREATE EXTENSION bdr VERSION '0.8.0.2';
 DROP EXTENSION bdr;
 
+CREATE EXTENSION bdr VERSION '0.8.0.3';
+DROP EXTENSION bdr;
+
 -- evolve version one by one from the oldest to the newest one
 CREATE EXTENSION bdr VERSION '0.8.0';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.1';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.2';
+ALTER EXTENSION bdr UPDATE TO '0.8.0.3';
 
 
 -- Should never have to do anything: You missed adding the new version above.