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
}
## 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++;
}
}
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
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
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 (