Use the two-arg form of pg_get_constraintdef when comparing live constraints to our...
authorGreg Sabino Mullane <greg@endpoint.com>
Thu, 29 Jan 2015 02:20:49 +0000 (21:20 -0500)
committerGreg Sabino Mullane <greg@endpoint.com>
Thu, 29 Jan 2015 02:20:49 +0000 (21:20 -0500)
bucardo
bucardo.schema

diff --git a/bucardo b/bucardo
index 92c6030789204997ac8cb939e364bbd5385b2909..eaeb55c3f155a26d64417ba7c53623c83388b9ed 100755 (executable)
--- a/bucardo
+++ b/bucardo
@@ -7253,7 +7253,7 @@ sub constraint_definition {
 
     my $name = shift;
 
-    my $SQL = qq{SELECT pg_get_constraintdef(oid) FROM pg_constraint WHERE conname = '$name'};
+    my $SQL = qq{SELECT pg_get_constraintdef(oid,true) FROM pg_constraint WHERE conname = '$name'};
     my $def = $dbh->selectall_arrayref($SQL)->[0][0];
 
     ## Nothing found? Just return an empty string
@@ -8032,18 +8032,14 @@ sub upgrade {
         }
 
         ## Clean up the constraint to make it match what comes back from the database:
-        $cdef =~ s/;$//;
         $cdef =~ s/','/', '/g;
-        if ($cdef =~ s/([^)]) (OR|AND) (\w)/$1) $2 ($3/g) {
-            $cdef =~ s/CHECK (.+)/CHECK ($1)/;
-        }
         my $condef = constraint_definition($cname);
         $condef =~ s{\\}{\\\\}g;
         if ($condef ne $cdef) {
             upgrade_and_log("ALTER TABLE $tcname DROP CONSTRAINT $cname");
             upgrade_and_log("ALTER TABLE $tcname ADD CONSTRAINT $cname $cdef");
             clog "Altered constraint $cname on $tcname";
-            clog "CURRENT: $condef\nNEW: $cdef\n";
+            clog "OLD: $condef\nNEW: $cdef\n";
             $changes++;
         }
     }
index 193cf5721961f3a264e7f89c0fabef58cc1f97ef..298bb721078dc164310f74da1ec891072436d8bf 100644 (file)
@@ -64,7 +64,7 @@ CREATE UNIQUE INDEX bucardo_config_unique_name ON bucardo.bucardo_config(name,it
 ALTER TABLE bucardo.bucardo_config ADD CONSTRAINT valid_config_type CHECK (type IN ('sync','goat'));
 
 ALTER TABLE bucardo.bucardo_config ADD CONSTRAINT valid_config_isolation_level
-  CHECK (name <> 'isolation_level' OR setting IN ('serializable','repeatable read'));
+  CHECK (name <> 'isolation_level' OR (setting IN ('serializable','repeatable read')));
 
 CREATE FUNCTION bucardo.check_bucardo_config()
 RETURNS TRIGGER
@@ -211,7 +211,7 @@ COMMENT ON TABLE bucardo.db IS $$Holds information about each database used in r
 
 ALTER TABLE bucardo.db ADD CONSTRAINT db_status CHECK (status IN ('active','inactive','stalled'));
 
-ALTER TABLE bucardo.db ADD CONSTRAINT db_service_valid CHECK ((dbservice IS NOT NULL) OR ((dbname IS NOT NULL) AND (dbuser IS NOT NULL) AND (dbhost IS NOT NULL) AND (dbport IS NOT NULL)));
+ALTER TABLE bucardo.db ADD CONSTRAINT db_service_valid CHECK (dbservice IS NOT NULL OR dbname IS NOT NULL AND dbuser IS NOT NULL AND dbhost IS NOT NULL AND dbport IS NOT NULL);
 
 --
 -- Databases can belong to zero or more named groups
@@ -433,10 +433,10 @@ ALTER TABLE bucardo.db      ADD CONSTRAINT db_name_sane      CHECK (name ~ E'^[a
 ALTER TABLE bucardo.dbgroup ADD CONSTRAINT dbgroup_name_sane CHECK (name ~ E'^[a-zA-Z]\\w*$');
 
 ALTER TABLE bucardo.sync    ADD CONSTRAINT sync_name_sane
-  CHECK (name ~ E'^[a-zA-Z]\\w*$' AND lower(name) NOT IN ('pushdelta','fullcopy','swap','sync'));
+  CHECK (name ~ E'^[a-zA-Z]\\w*$' AND (lower(name) NOT IN ('pushdelta','fullcopy','swap','sync')));
 
 ALTER TABLE bucardo.sync    ADD CONSTRAINT sync_isolation_level
-  CHECK ((isolation_level IS NULL) OR (lower(isolation_level) IN ('serializable', 'repeatable read')));
+  CHECK (isolation_level IS NULL OR (lower(isolation_level) IN ('serializable', 'repeatable read')));
 
 CREATE SEQUENCE bucardo.customcode_id_seq;
 CREATE TABLE bucardo.customcode (