]> git.donarmstrong.com Git - debbugs.git/commitdiff
add first stab at using DBIx::Class::DeploymentHandler to deploy the database
authorDon Armstrong <don@donarmstrong.com>
Wed, 6 Aug 2014 16:26:52 +0000 (09:26 -0700)
committerDon Armstrong <don@donarmstrong.com>
Wed, 6 Aug 2014 16:26:52 +0000 (09:26 -0700)
Debbugs/DB/Result/DbixClassDeploymenthandlerVersion.pm [new file with mode: 0644]
bin/debbugs-installsql [new file with mode: 0755]
sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql [new file with mode: 0644]
sql/PostgreSQL/deploy/1/001-auto.sql [new file with mode: 0644]
sql/PostgreSQL/upgrade/1-1/001-auto.sql [new file with mode: 0644]
sql/README.mdwn [new file with mode: 0644]
sql/_source/deploy/1/001-auto-__VERSION.yml [new file with mode: 0644]
sql/_source/deploy/1/001-auto.yml [new file with mode: 0644]

diff --git a/Debbugs/DB/Result/DbixClassDeploymenthandlerVersion.pm b/Debbugs/DB/Result/DbixClassDeploymenthandlerVersion.pm
new file mode 100644 (file)
index 0000000..9ad1d94
--- /dev/null
@@ -0,0 +1,111 @@
+use utf8;
+package Debbugs::DB::Result::DbixClassDeploymenthandlerVersion;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Debbugs::DB::Result::DbixClassDeploymenthandlerVersion
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 COMPONENTS LOADED
+
+=over 4
+
+=item * L<DBIx::Class::InflateColumn::DateTime>
+
+=back
+
+=cut
+
+__PACKAGE__->load_components("InflateColumn::DateTime");
+
+=head1 TABLE: C<dbix_class_deploymenthandler_versions>
+
+=cut
+
+__PACKAGE__->table("dbix_class_deploymenthandler_versions");
+
+=head1 ACCESSORS
+
+=head2 id
+
+  data_type: 'integer'
+  is_auto_increment: 1
+  is_nullable: 0
+  sequence: 'dbix_class_deploymenthandler_versions_id_seq'
+
+=head2 version
+
+  data_type: 'varchar'
+  is_nullable: 0
+  size: 50
+
+=head2 ddl
+
+  data_type: 'text'
+  is_nullable: 1
+
+=head2 upgrade_sql
+
+  data_type: 'text'
+  is_nullable: 1
+
+=cut
+
+__PACKAGE__->add_columns(
+  "id",
+  {
+    data_type         => "integer",
+    is_auto_increment => 1,
+    is_nullable       => 0,
+    sequence          => "dbix_class_deploymenthandler_versions_id_seq",
+  },
+  "version",
+  { data_type => "varchar", is_nullable => 0, size => 50 },
+  "ddl",
+  { data_type => "text", is_nullable => 1 },
+  "upgrade_sql",
+  { data_type => "text", is_nullable => 1 },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 UNIQUE CONSTRAINTS
+
+=head2 C<dbix_class_deploymenthandler_versions_version>
+
+=over 4
+
+=item * L</version>
+
+=back
+
+=cut
+
+__PACKAGE__->add_unique_constraint("dbix_class_deploymenthandler_versions_version", ["version"]);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07036 @ 2013-11-06 21:19:42
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:d62Bah1PHAy1ZMhIt2HeIA
+
+
+# You can replace this text with custom code or comments, and it will be preserved on regeneration
+1;
diff --git a/bin/debbugs-installsql b/bin/debbugs-installsql
new file mode 100755 (executable)
index 0000000..4e19dbe
--- /dev/null
@@ -0,0 +1,151 @@
+#!/usr/bin/perl
+# debbugs-installsql installs the SQL database using DBIx::Class::DeploymentHandler
+# and is released under the terms of the GNU GPL version 3, or any
+# later version, at your option. See the file README and COPYING for
+# more information.
+# Copyright 2013-2014 by Don Armstrong <don@donarmstrong.com>.
+
+
+use warnings;
+use strict;
+
+use Getopt::Long;
+use Pod::Usage;
+
+=head1 NAME
+
+debbugs-installsql - installs the SQL database using DBIx::Class::DeploymentHandler
+
+=head1 SYNOPSIS
+
+debbugs-installsql [ --upgrade | --install ]
+
+ Options:
+  --service postgresql service to connect to
+  --sysconfdir postgresql system configuration directory
+  --deployment-dir SQL deployment directory
+  --debug, -d debugging level (Default 0)
+  --help, -h display this help
+  --man, -m display manual
+
+=head1 OPTIONS
+
+=over
+
+=item B<--service>
+
+Postgresl service to connect to (defaults to debbugs)
+
+=item B<--sysconfdir>
+
+Postgresql sysconf dir. May also be set using the PGSYSCONFDIR
+environmental variable (which this option overrides).
+
+=item B<--deployment-dir>
+
+Deployment directory (defaults to /usr/share/debbugs/sqldeployment)
+
+=item B<--debug, -d>
+
+Debug verbosity. (Default 0)
+
+=item B<--help, -h>
+
+Display brief usage information.
+
+=item B<--man, -m>
+
+Display this manual.
+
+=back
+
+=head1 EXAMPLES
+
+debbugs-installsql
+
+=cut
+
+
+use vars qw($DEBUG);
+
+use Debbugs::DB;
+use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
+
+my %options = (debug           => 0,
+              help            => 0,
+              man             => 0,
+               developer_prepare => 0,
+               overwrite_deployment => 0,
+               service         => 'debbugs',
+               deployment_dir  => '/usr/share/debbugs/sqldeployment',
+              );
+
+GetOptions(\%options,
+           'service|s',
+           'sysconfdir|c',
+           'install',
+           'upgrade',
+           'current_version|current-version',
+           'developer_prepare|developer-prepare',
+           'overwrite_deployment|overwrite-deployment',
+           'deployment_dir|deployment-dir=s',
+          'debug|d+','help|h|?','man|m');
+
+pod2usage() if $options{help};
+pod2usage({verbose=>2}) if $options{man};
+
+$DEBUG = $options{debug};
+
+my @USAGE_ERRORS;
+
+my @exclusive_options = qw(install upgrade current_version);
+if (1 < grep {exists $options{$_}} @exclusive_options) {
+      push @USAGE_ERRORS,"You must only give one of the ".
+          join(', ',map {s/_/-/g; "--".$_} @exclusive_options).
+          " options";
+}
+if (not grep {exists $options{$_}} @exclusive_options) {
+    $options{current_version} = 1;
+}
+
+pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS;
+
+if (exists $options{sysconfdir}) {
+    if (not defined $options{sysconfdir} or not length $options{sysconfdir}) {
+       delete $ENV{PGSYSCONFDIR};
+    } else {
+       $ENV{PGSYSCONFDIR} = $options{sysconfdir};
+    }
+}
+
+
+my $schema = Debbugs::DB->connect('dbi:Pg:service='.$options{service}) or
+    die "Unable to connect to database";
+
+
+my $dh = DH->new({schema => $schema,
+                  force_overwrite => $options{overwrite_deployment},
+                  script_directory => $options{deployment_dir},
+                  databases => 'PostgreSQL'
+                 });
+
+if ($options{current_version}) {
+    print "The current database version is: ".$dh->database_version."\n";
+    exit 0;
+} elsif ($options{install}) {
+    if ($options{developer_prepare}) {
+        $dh->prepare_install;
+    } else {
+        $dh->install;
+    }
+} elsif ($options{upgrade}) {
+    if ($options{developer_prepare}) {
+        $dh->prepare_deploy;
+        $dh->prepare_upgrade;
+    } else {
+        $dh->upgrade;
+    }
+}
+
+
+__END__
diff --git a/sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql b/sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql
new file mode 100644 (file)
index 0000000..d278f68
--- /dev/null
@@ -0,0 +1,18 @@
+-- 
+-- Created by SQL::Translator::Producer::PostgreSQL
+-- Created on Wed Aug  6 09:18:36 2014
+-- 
+;
+--
+-- Table: dbix_class_deploymenthandler_versions.
+--
+CREATE TABLE "dbix_class_deploymenthandler_versions" (
+  "id" serial NOT NULL,
+  "version" character varying(50) NOT NULL,
+  "ddl" text,
+  "upgrade_sql" text,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "dbix_class_deploymenthandler_versions_version" UNIQUE ("version")
+);
+
+;
diff --git a/sql/PostgreSQL/deploy/1/001-auto.sql b/sql/PostgreSQL/deploy/1/001-auto.sql
new file mode 100644 (file)
index 0000000..283b43f
--- /dev/null
@@ -0,0 +1,615 @@
+-- 
+-- Created by SQL::Translator::Producer::PostgreSQL
+-- Created on Wed Aug  6 09:18:36 2014
+-- 
+;
+--
+-- Table: arch.
+--
+CREATE TABLE "arch" (
+  "id" serial NOT NULL,
+  "arch" text NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "arch_arch_key" UNIQUE ("arch")
+);
+
+;
+--
+-- Table: bin_pkg.
+--
+CREATE TABLE "bin_pkg" (
+  "id" serial NOT NULL,
+  "pkg" text NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bin_pkg_pkg_key" UNIQUE ("pkg")
+);
+
+;
+--
+-- Table: binary_versions.
+--
+CREATE TABLE "binary_versions" (
+  "src_pkg" text,
+  "src_ver" debversion,
+  "bin_pkg" text,
+  "arch" text,
+  "bin_ver" debversion,
+  "src_ver_based_on" debversion,
+  "src_pkg_based_on" text
+);
+
+;
+--
+-- Table: bug_package.
+--
+CREATE TABLE "bug_package" (
+  "bug" integer,
+  "pkg_id" integer,
+  "pkg_type" text,
+  "package" text
+);
+
+;
+--
+-- Table: column_comments.
+--
+CREATE TABLE "column_comments" (
+  "table_name" text NOT NULL,
+  "column_name" text NOT NULL,
+  "comment_text" text NOT NULL,
+  CONSTRAINT "column_comments_table_name_column_name_idx" UNIQUE ("table_name", "column_name")
+);
+
+;
+--
+-- Table: correspondent.
+--
+CREATE TABLE "correspondent" (
+  "id" serial NOT NULL,
+  "addr" text NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "correspondent_addr_idx" UNIQUE ("addr")
+);
+
+;
+--
+-- Table: dbix_class_deploymenthandler_versions.
+--
+CREATE TABLE "dbix_class_deploymenthandler_versions" (
+  "id" serial NOT NULL,
+  "version" character varying(50) NOT NULL,
+  "ddl" text,
+  "upgrade_sql" text,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "dbix_class_deploymenthandler_versions_version" UNIQUE ("version")
+);
+
+;
+--
+-- Table: message.
+--
+CREATE TABLE "message" (
+  "id" serial NOT NULL,
+  "msgid" text,
+  "from_complete" text,
+  "from_addr" text,
+  "to_complete" text,
+  "to_addr" text,
+  "subject" text DEFAULT '' NOT NULL,
+  "sent_date" timestamp with time zone,
+  "refs" text DEFAULT '' NOT NULL,
+  "spam_score" double precision,
+  "is_spam" boolean DEFAULT false,
+  PRIMARY KEY ("id")
+);
+
+;
+--
+-- Table: severity.
+--
+CREATE TABLE "severity" (
+  "id" serial NOT NULL,
+  "severity" text NOT NULL,
+  "ordering" integer DEFAULT 5 NOT NULL,
+  "strong" boolean DEFAULT false,
+  "obsolete" boolean DEFAULT false,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "severity_severity_idx" UNIQUE ("severity")
+);
+
+;
+--
+-- Table: src_pkg.
+--
+CREATE TABLE "src_pkg" (
+  "id" serial NOT NULL,
+  "pkg" text NOT NULL,
+  "pseduopkg" boolean DEFAULT false,
+  "alias_of" integer,
+  "creation" timestamp with time zone DEFAULT current_timestamp,
+  "disabled" timestamp with time zone,
+  "last_modified" timestamp with time zone DEFAULT current_timestamp,
+  "obsolete" boolean DEFAULT false,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "src_pkg_pkg_disabled" UNIQUE ("pkg", "disabled")
+);
+CREATE INDEX "src_pkg_idx_alias_of" on "src_pkg" ("alias_of");
+
+;
+--
+-- Table: suite.
+--
+CREATE TABLE "suite" (
+  "id" serial NOT NULL,
+  "suite_name" text NOT NULL,
+  "version" text,
+  "codename" text,
+  "active" boolean DEFAULT true,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "suite_suite_name_key" UNIQUE ("suite_name")
+);
+
+;
+--
+-- Table: table_comments.
+--
+CREATE TABLE "table_comments" (
+  "table_name" text NOT NULL,
+  "comment_text" text NOT NULL,
+  CONSTRAINT "table_comments_table_name_key" UNIQUE ("table_name")
+);
+
+;
+--
+-- Table: tag.
+--
+CREATE TABLE "tag" (
+  "id" serial NOT NULL,
+  "tag" text NOT NULL,
+  "obsolete" boolean DEFAULT false,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "tag_tag_key" UNIQUE ("tag")
+);
+
+;
+--
+-- Table: correspondent_full_name.
+--
+CREATE TABLE "correspondent_full_name" (
+  "id" serial NOT NULL,
+  "correspondent" integer NOT NULL,
+  "full_name" text NOT NULL,
+  "last_seen" timestamp DEFAULT current_timestamp NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "correspondent_full_name_correspondent_full_name_idx" UNIQUE ("correspondent", "full_name")
+);
+CREATE INDEX "correspondent_full_name_idx_correspondent" on "correspondent_full_name" ("correspondent");
+
+;
+--
+-- Table: maintainer.
+--
+CREATE TABLE "maintainer" (
+  "id" serial NOT NULL,
+  "name" text NOT NULL,
+  "correspondent" integer NOT NULL,
+  "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "modified" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "maintainer_name_idx" UNIQUE ("name")
+);
+CREATE INDEX "maintainer_idx_correspondent" on "maintainer" ("correspondent");
+
+;
+--
+-- Table: message_refs.
+--
+CREATE TABLE "message_refs" (
+  "id" serial NOT NULL,
+  "message" integer NOT NULL,
+  "refs" integer NOT NULL,
+  "inferred" boolean DEFAULT false,
+  "primary_ref" boolean DEFAULT false,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "message_refs_message_refs_idx" UNIQUE ("message", "refs")
+);
+CREATE INDEX "message_refs_idx_message" on "message_refs" ("message");
+CREATE INDEX "message_refs_idx_refs" on "message_refs" ("refs");
+
+;
+--
+-- Table: bug.
+--
+CREATE TABLE "bug" (
+  "id" integer NOT NULL,
+  "creation" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "log_modified" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "last_modified" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "archived" boolean DEFAULT false NOT NULL,
+  "unarchived" timestamp with time zone,
+  "forwarded" text DEFAULT '' NOT NULL,
+  "summary" text DEFAULT '' NOT NULL,
+  "outlook" text DEFAULT '' NOT NULL,
+  "subject" text NOT NULL,
+  "severity" integer NOT NULL,
+  "done" integer,
+  "done_full" text DEFAULT '' NOT NULL,
+  "owner" integer,
+  "owner_full" text DEFAULT '' NOT NULL,
+  "submitter" integer,
+  "submitter_full" text DEFAULT '' NOT NULL,
+  "unknown_packages" text DEFAULT '' NOT NULL,
+  PRIMARY KEY ("id")
+);
+CREATE INDEX "bug_idx_done" on "bug" ("done");
+CREATE INDEX "bug_idx_owner" on "bug" ("owner");
+CREATE INDEX "bug_idx_severity" on "bug" ("severity");
+CREATE INDEX "bug_idx_submitter" on "bug" ("submitter");
+
+;
+--
+-- Table: message_correspondent.
+--
+CREATE TABLE "message_correspondent" (
+  "id" serial NOT NULL,
+  "message" integer NOT NULL,
+  "correspondent" integer NOT NULL,
+  "correspondent_type" character varying DEFAULT 'to' NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "message_correspondent_message_correspondent_correspondent_t_idx" UNIQUE ("message", "correspondent", "correspondent_type")
+);
+CREATE INDEX "message_correspondent_idx_correspondent" on "message_correspondent" ("correspondent");
+CREATE INDEX "message_correspondent_idx_message" on "message_correspondent" ("message");
+
+;
+--
+-- Table: bug_blocks.
+--
+CREATE TABLE "bug_blocks" (
+  "id" serial NOT NULL,
+  "bug" integer NOT NULL,
+  "blocks" integer NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bug_blocks_bug_id_blocks_idx" UNIQUE ("bug", "blocks")
+);
+CREATE INDEX "bug_blocks_idx_blocks" on "bug_blocks" ("blocks");
+CREATE INDEX "bug_blocks_idx_bug" on "bug_blocks" ("bug");
+
+;
+--
+-- Table: bug_merged.
+--
+CREATE TABLE "bug_merged" (
+  "id" serial NOT NULL,
+  "bug" integer NOT NULL,
+  "merged" integer NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bug_merged_bug_id_merged_idx" UNIQUE ("bug", "merged")
+);
+CREATE INDEX "bug_merged_idx_bug" on "bug_merged" ("bug");
+CREATE INDEX "bug_merged_idx_merged" on "bug_merged" ("merged");
+
+;
+--
+-- Table: src_ver.
+--
+CREATE TABLE "src_ver" (
+  "id" serial NOT NULL,
+  "src_pkg" integer NOT NULL,
+  "ver" debversion NOT NULL,
+  "maintainer" integer,
+  "upload_date" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "based_on" integer,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "src_ver_src_pkg_id_ver" UNIQUE ("src_pkg", "ver")
+);
+CREATE INDEX "src_ver_idx_based_on" on "src_ver" ("based_on");
+CREATE INDEX "src_ver_idx_maintainer" on "src_ver" ("maintainer");
+CREATE INDEX "src_ver_idx_src_pkg" on "src_ver" ("src_pkg");
+
+;
+--
+-- Table: bug_binpackage.
+--
+CREATE TABLE "bug_binpackage" (
+  "id" serial NOT NULL,
+  "bug" integer NOT NULL,
+  "bin_pkg" integer NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bug_binpackage_id_pkg" UNIQUE ("bug", "bin_pkg")
+);
+CREATE INDEX "bug_binpackage_idx_bin_pkg" on "bug_binpackage" ("bin_pkg");
+CREATE INDEX "bug_binpackage_idx_bug" on "bug_binpackage" ("bug");
+
+;
+--
+-- Table: bug_message.
+--
+CREATE TABLE "bug_message" (
+  "id" serial NOT NULL,
+  "bug" integer NOT NULL,
+  "message" integer NOT NULL,
+  "message_number" integer NOT NULL,
+  "bug_log_offset" integer,
+  "offset_valid" timestamp with time zone,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bug_message_bug_message_idx" UNIQUE ("bug", "message")
+);
+CREATE INDEX "bug_message_idx_bug" on "bug_message" ("bug");
+CREATE INDEX "bug_message_idx_message" on "bug_message" ("message");
+
+;
+--
+-- Table: bug_srcpackage.
+--
+CREATE TABLE "bug_srcpackage" (
+  "id" serial NOT NULL,
+  "bug" integer NOT NULL,
+  "src_pkg" integer NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bug_srcpackage_id_pkg" UNIQUE ("bug", "src_pkg")
+);
+CREATE INDEX "bug_srcpackage_idx_bug" on "bug_srcpackage" ("bug");
+CREATE INDEX "bug_srcpackage_idx_src_pkg" on "bug_srcpackage" ("src_pkg");
+
+;
+--
+-- Table: bug_tag.
+--
+CREATE TABLE "bug_tag" (
+  "id" serial NOT NULL,
+  "bug" integer NOT NULL,
+  "tag" integer NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bug_tag_bug_tag" UNIQUE ("bug", "tag")
+);
+CREATE INDEX "bug_tag_idx_bug" on "bug_tag" ("bug");
+CREATE INDEX "bug_tag_idx_tag" on "bug_tag" ("tag");
+
+;
+--
+-- Table: bug_status_cache.
+--
+CREATE TABLE "bug_status_cache" (
+  "id" serial NOT NULL,
+  "bug" integer NOT NULL,
+  "suite" integer,
+  "arch" integer,
+  "status" character varying NOT NULL,
+  "modified" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "asof" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bug_status_cache_bug_suite_arch_idx" UNIQUE ("bug", "suite", "arch")
+);
+CREATE INDEX "bug_status_cache_idx_arch" on "bug_status_cache" ("arch");
+CREATE INDEX "bug_status_cache_idx_bug" on "bug_status_cache" ("bug");
+CREATE INDEX "bug_status_cache_idx_suite" on "bug_status_cache" ("suite");
+
+;
+--
+-- Table: src_associations.
+--
+CREATE TABLE "src_associations" (
+  "id" serial NOT NULL,
+  "suite" integer NOT NULL,
+  "source" integer NOT NULL,
+  "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "modified" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  PRIMARY KEY ("id")
+);
+CREATE INDEX "src_associations_idx_source" on "src_associations" ("source");
+CREATE INDEX "src_associations_idx_suite" on "src_associations" ("suite");
+
+;
+--
+-- Table: bin_ver.
+--
+CREATE TABLE "bin_ver" (
+  "id" serial NOT NULL,
+  "bin_pkg" integer NOT NULL,
+  "src_ver" integer NOT NULL,
+  "arch" integer NOT NULL,
+  "ver" debversion NOT NULL,
+  PRIMARY KEY ("id")
+);
+CREATE INDEX "bin_ver_idx_arch" on "bin_ver" ("arch");
+CREATE INDEX "bin_ver_idx_bin_pkg" on "bin_ver" ("bin_pkg");
+CREATE INDEX "bin_ver_idx_src_ver" on "bin_ver" ("src_ver");
+
+;
+--
+-- Table: bug_ver.
+--
+CREATE TABLE "bug_ver" (
+  "id" serial NOT NULL,
+  "bug" integer NOT NULL,
+  "ver_string" text,
+  "src_pkg" integer,
+  "src_ver" integer,
+  "found" boolean DEFAULT true NOT NULL,
+  "creation" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "last_modified" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "bug_ver_bug_ver_string_found_idx" UNIQUE ("bug", "ver_string", "found")
+);
+CREATE INDEX "bug_ver_idx_bug" on "bug_ver" ("bug");
+CREATE INDEX "bug_ver_idx_src_pkg" on "bug_ver" ("src_pkg");
+CREATE INDEX "bug_ver_idx_src_ver" on "bug_ver" ("src_ver");
+
+;
+--
+-- Table: bin_associations.
+--
+CREATE TABLE "bin_associations" (
+  "id" serial NOT NULL,
+  "suite" integer NOT NULL,
+  "bin" integer NOT NULL,
+  "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  "modified" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+  PRIMARY KEY ("id")
+);
+CREATE INDEX "bin_associations_idx_bin" on "bin_associations" ("bin");
+CREATE INDEX "bin_associations_idx_suite" on "bin_associations" ("suite");
+
+;
+--
+-- Foreign Key Definitions
+--
+
+;
+ALTER TABLE "src_pkg" ADD CONSTRAINT "src_pkg_fk_alias_of" FOREIGN KEY ("alias_of")
+  REFERENCES "src_pkg" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "correspondent_full_name" ADD CONSTRAINT "correspondent_full_name_fk_correspondent" FOREIGN KEY ("correspondent")
+  REFERENCES "correspondent" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "maintainer" ADD CONSTRAINT "maintainer_fk_correspondent" FOREIGN KEY ("correspondent")
+  REFERENCES "correspondent" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "message_refs" ADD CONSTRAINT "message_refs_fk_message" FOREIGN KEY ("message")
+  REFERENCES "message" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "message_refs" ADD CONSTRAINT "message_refs_fk_refs" FOREIGN KEY ("refs")
+  REFERENCES "message" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug" ADD CONSTRAINT "bug_fk_done" FOREIGN KEY ("done")
+  REFERENCES "correspondent" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug" ADD CONSTRAINT "bug_fk_owner" FOREIGN KEY ("owner")
+  REFERENCES "correspondent" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug" ADD CONSTRAINT "bug_fk_severity" FOREIGN KEY ("severity")
+  REFERENCES "severity" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug" ADD CONSTRAINT "bug_fk_submitter" FOREIGN KEY ("submitter")
+  REFERENCES "correspondent" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "message_correspondent" ADD CONSTRAINT "message_correspondent_fk_correspondent" FOREIGN KEY ("correspondent")
+  REFERENCES "correspondent" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "message_correspondent" ADD CONSTRAINT "message_correspondent_fk_message" FOREIGN KEY ("message")
+  REFERENCES "message" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_blocks" ADD CONSTRAINT "bug_blocks_fk_blocks" FOREIGN KEY ("blocks")
+  REFERENCES "bug" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug_blocks" ADD CONSTRAINT "bug_blocks_fk_bug" FOREIGN KEY ("bug")
+  REFERENCES "bug" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug_merged" ADD CONSTRAINT "bug_merged_fk_bug" FOREIGN KEY ("bug")
+  REFERENCES "bug" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug_merged" ADD CONSTRAINT "bug_merged_fk_merged" FOREIGN KEY ("merged")
+  REFERENCES "bug" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "src_ver" ADD CONSTRAINT "src_ver_fk_based_on" FOREIGN KEY ("based_on")
+  REFERENCES "src_ver" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "src_ver" ADD CONSTRAINT "src_ver_fk_maintainer" FOREIGN KEY ("maintainer")
+  REFERENCES "maintainer" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+;
+ALTER TABLE "src_ver" ADD CONSTRAINT "src_ver_fk_src_pkg" FOREIGN KEY ("src_pkg")
+  REFERENCES "src_pkg" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_binpackage" ADD CONSTRAINT "bug_binpackage_fk_bin_pkg" FOREIGN KEY ("bin_pkg")
+  REFERENCES "bin_pkg" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug_binpackage" ADD CONSTRAINT "bug_binpackage_fk_bug" FOREIGN KEY ("bug")
+  REFERENCES "bug" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug_message" ADD CONSTRAINT "bug_message_fk_bug" FOREIGN KEY ("bug")
+  REFERENCES "bug" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_message" ADD CONSTRAINT "bug_message_fk_message" FOREIGN KEY ("message")
+  REFERENCES "message" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_srcpackage" ADD CONSTRAINT "bug_srcpackage_fk_bug" FOREIGN KEY ("bug")
+  REFERENCES "bug" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug_srcpackage" ADD CONSTRAINT "bug_srcpackage_fk_src_pkg" FOREIGN KEY ("src_pkg")
+  REFERENCES "src_pkg" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_tag" ADD CONSTRAINT "bug_tag_fk_bug" FOREIGN KEY ("bug")
+  REFERENCES "bug" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug_tag" ADD CONSTRAINT "bug_tag_fk_tag" FOREIGN KEY ("tag")
+  REFERENCES "tag" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
+
+;
+ALTER TABLE "bug_status_cache" ADD CONSTRAINT "bug_status_cache_fk_arch" FOREIGN KEY ("arch")
+  REFERENCES "arch" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_status_cache" ADD CONSTRAINT "bug_status_cache_fk_bug" FOREIGN KEY ("bug")
+  REFERENCES "bug" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_status_cache" ADD CONSTRAINT "bug_status_cache_fk_suite" FOREIGN KEY ("suite")
+  REFERENCES "suite" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "src_associations" ADD CONSTRAINT "src_associations_fk_source" FOREIGN KEY ("source")
+  REFERENCES "src_ver" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "src_associations" ADD CONSTRAINT "src_associations_fk_suite" FOREIGN KEY ("suite")
+  REFERENCES "suite" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bin_ver" ADD CONSTRAINT "bin_ver_fk_arch" FOREIGN KEY ("arch")
+  REFERENCES "arch" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bin_ver" ADD CONSTRAINT "bin_ver_fk_bin_pkg" FOREIGN KEY ("bin_pkg")
+  REFERENCES "bin_pkg" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bin_ver" ADD CONSTRAINT "bin_ver_fk_src_ver" FOREIGN KEY ("src_ver")
+  REFERENCES "src_ver" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_ver" ADD CONSTRAINT "bug_ver_fk_bug" FOREIGN KEY ("bug")
+  REFERENCES "bug" ("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_ver" ADD CONSTRAINT "bug_ver_fk_src_pkg" FOREIGN KEY ("src_pkg")
+  REFERENCES "src_pkg" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bug_ver" ADD CONSTRAINT "bug_ver_fk_src_ver" FOREIGN KEY ("src_ver")
+  REFERENCES "src_ver" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bin_associations" ADD CONSTRAINT "bin_associations_fk_bin" FOREIGN KEY ("bin")
+  REFERENCES "bin_ver" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
+ALTER TABLE "bin_associations" ADD CONSTRAINT "bin_associations_fk_suite" FOREIGN KEY ("suite")
+  REFERENCES "suite" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+;
diff --git a/sql/PostgreSQL/upgrade/1-1/001-auto.sql b/sql/PostgreSQL/upgrade/1-1/001-auto.sql
new file mode 100644 (file)
index 0000000..6f388eb
--- /dev/null
@@ -0,0 +1,5 @@
+-- Convert schema 'sql/_source/deploy/1/001-auto.yml' to 'sql/_source/deploy/1/001-auto.yml':;
+
+;
+-- No differences found;
+
diff --git a/sql/README.mdwn b/sql/README.mdwn
new file mode 100644 (file)
index 0000000..334fabc
--- /dev/null
@@ -0,0 +1,19 @@
+# Developer specific instructions #
+## Upgrading Schema ##
+
+To make changes to the database schema:
+
+1. Make whatever changes are appropriate to the SQL directly in the
+   debbugs_schema.sql file, and make corresponding changes to the
+   database (or dump the entire database and otherwise make the
+   changes).
+2. Run `./sql/dbicdump_command.sh` to update the DBIx::Class classes
+   which are under Debbugs::DB
+3. Increment the version of Debbugs::DB;
+4. Run `./bin/debbugs-installsql --install --deployment-dir sql --developer-prepare`
+   and `./bin/debbugs-installsql --upgrade --deployment-dir sql --developer-prepare`
+   which will generate the files necessary to do upgrades in the field.
+
+
+Steps 1 and 2 can alternatively be performed by changing the
+DBIx::Class classes directly if that is desired.
diff --git a/sql/_source/deploy/1/001-auto-__VERSION.yml b/sql/_source/deploy/1/001-auto-__VERSION.yml
new file mode 100644 (file)
index 0000000..a803e96
--- /dev/null
@@ -0,0 +1,91 @@
+---
+schema:
+  procedures: {}
+  tables:
+    dbix_class_deploymenthandler_versions:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - version
+          match_type: ''
+          name: dbix_class_deploymenthandler_versions_version
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        ddl:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: ddl
+          order: 3
+          size:
+            - 0
+        id:
+          data_type: int
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        upgrade_sql:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: upgrade_sql
+          order: 4
+          size:
+            - 0
+        version:
+          data_type: varchar
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: version
+          order: 2
+          size:
+            - 50
+      indices: []
+      name: dbix_class_deploymenthandler_versions
+      options: []
+      order: 1
+  triggers: {}
+  views: {}
+translator:
+  add_drop_table: 0
+  filename: ~
+  no_comments: 0
+  parser_args:
+    sources:
+      - __VERSION
+  parser_type: SQL::Translator::Parser::DBIx::Class
+  producer_args: {}
+  producer_type: SQL::Translator::Producer::YAML
+  show_warnings: 0
+  trace: 0
+  version: 0.11018
diff --git a/sql/_source/deploy/1/001-auto.yml b/sql/_source/deploy/1/001-auto.yml
new file mode 100644 (file)
index 0000000..727ee14
--- /dev/null
@@ -0,0 +1,3144 @@
+---
+schema:
+  procedures: {}
+  tables:
+    arch:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - arch
+          match_type: ''
+          name: arch_arch_key
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        arch:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: arch
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+      indices: []
+      name: arch
+      options: []
+      order: 1
+    bin_associations:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bin
+          match_type: ''
+          name: bin_associations_fk_bin
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: bin_ver
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - suite
+          match_type: ''
+          name: bin_associations_fk_suite
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: suite
+          type: FOREIGN KEY
+      fields:
+        bin:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: bin
+          order: 3
+          size:
+            - 0
+        created:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: created
+          order: 4
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        modified:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: modified
+          order: 5
+          size:
+            - 0
+        suite:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: suite
+          order: 2
+          size:
+            - 0
+      indices:
+        - fields:
+            - bin
+          name: bin_associations_idx_bin
+          options: []
+          type: NORMAL
+        - fields:
+            - suite
+          name: bin_associations_idx_suite
+          options: []
+          type: NORMAL
+      name: bin_associations
+      options: []
+      order: 30
+    bin_pkg:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - pkg
+          match_type: ''
+          name: bin_pkg_pkg_key
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        pkg:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: pkg
+          order: 2
+          size:
+            - 0
+      indices: []
+      name: bin_pkg
+      options: []
+      order: 2
+    bin_ver:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - arch
+          match_type: ''
+          name: bin_ver_fk_arch
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: arch
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bin_pkg
+          match_type: ''
+          name: bin_ver_fk_bin_pkg
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: bin_pkg
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - src_ver
+          match_type: ''
+          name: bin_ver_fk_src_ver
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: src_ver
+          type: FOREIGN KEY
+      fields:
+        arch:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: arch
+          order: 4
+          size:
+            - 0
+        bin_pkg:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: bin_pkg
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        src_ver:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: src_ver
+          order: 3
+          size:
+            - 0
+        ver:
+          data_type: debversion
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: ver
+          order: 5
+          size:
+            - 0
+      indices:
+        - fields:
+            - arch
+          name: bin_ver_idx_arch
+          options: []
+          type: NORMAL
+        - fields:
+            - bin_pkg
+          name: bin_ver_idx_bin_pkg
+          options: []
+          type: NORMAL
+        - fields:
+            - src_ver
+          name: bin_ver_idx_src_ver
+          options: []
+          type: NORMAL
+      name: bin_ver
+      options: []
+      order: 28
+    binary_versions:
+      constraints: []
+      fields:
+        arch:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: arch
+          order: 4
+          size:
+            - 0
+        bin_pkg:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: bin_pkg
+          order: 3
+          size:
+            - 0
+        bin_ver:
+          data_type: debversion
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: bin_ver
+          order: 5
+          size:
+            - 0
+        src_pkg:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: src_pkg
+          order: 1
+          size:
+            - 0
+        src_pkg_based_on:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: src_pkg_based_on
+          order: 7
+          size:
+            - 0
+        src_ver:
+          data_type: debversion
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: src_ver
+          order: 2
+          size:
+            - 0
+        src_ver_based_on:
+          data_type: debversion
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: src_ver_based_on
+          order: 6
+          size:
+            - 0
+      indices: []
+      name: binary_versions
+      options: []
+      order: 3
+    bug:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - done
+          match_type: ''
+          name: bug_fk_done
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: correspondent
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - owner
+          match_type: ''
+          name: bug_fk_owner
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: correspondent
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - severity
+          match_type: ''
+          name: bug_fk_severity
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: severity
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - submitter
+          match_type: ''
+          name: bug_fk_submitter
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: correspondent
+          type: FOREIGN KEY
+      fields:
+        archived:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: archived
+          order: 5
+          size:
+            - 0
+        creation:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: creation
+          order: 2
+          size:
+            - 0
+        done:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: done
+          order: 12
+          size:
+            - 0
+        done_full:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: done_full
+          order: 13
+          size:
+            - 0
+        forwarded:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: forwarded
+          order: 7
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        last_modified:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: last_modified
+          order: 4
+          size:
+            - 0
+        log_modified:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: log_modified
+          order: 3
+          size:
+            - 0
+        outlook:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: outlook
+          order: 9
+          size:
+            - 0
+        owner:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: owner
+          order: 14
+          size:
+            - 0
+        owner_full:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: owner_full
+          order: 15
+          size:
+            - 0
+        severity:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: severity
+          order: 11
+          size:
+            - 0
+        subject:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: subject
+          order: 10
+          size:
+            - 0
+        submitter:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: submitter
+          order: 16
+          size:
+            - 0
+        submitter_full:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: submitter_full
+          order: 17
+          size:
+            - 0
+        summary:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: summary
+          order: 8
+          size:
+            - 0
+        unarchived:
+          data_type: timestamp with time zone
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: unarchived
+          order: 6
+          size:
+            - 0
+        unknown_packages:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: unknown_packages
+          order: 18
+          size:
+            - 0
+      indices:
+        - fields:
+            - done
+          name: bug_idx_done
+          options: []
+          type: NORMAL
+        - fields:
+            - owner
+          name: bug_idx_owner
+          options: []
+          type: NORMAL
+        - fields:
+            - severity
+          name: bug_idx_severity
+          options: []
+          type: NORMAL
+        - fields:
+            - submitter
+          name: bug_idx_submitter
+          options: []
+          type: NORMAL
+      name: bug
+      options: []
+      order: 17
+    bug_binpackage:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - bug
+            - bin_pkg
+          match_type: ''
+          name: bug_binpackage_id_pkg
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bin_pkg
+          match_type: ''
+          name: bug_binpackage_fk_bin_pkg
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: bin_pkg
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bug
+          match_type: ''
+          name: bug_binpackage_fk_bug
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+      fields:
+        bin_pkg:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bin_pkg
+          order: 3
+          size:
+            - 0
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bug
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+      indices:
+        - fields:
+            - bin_pkg
+          name: bug_binpackage_idx_bin_pkg
+          options: []
+          type: NORMAL
+        - fields:
+            - bug
+          name: bug_binpackage_idx_bug
+          options: []
+          type: NORMAL
+      name: bug_binpackage
+      options: []
+      order: 22
+    bug_blocks:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - bug
+            - blocks
+          match_type: ''
+          name: bug_blocks_bug_id_blocks_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - blocks
+          match_type: ''
+          name: bug_blocks_fk_blocks
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bug
+          match_type: ''
+          name: bug_blocks_fk_bug
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+      fields:
+        blocks:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: blocks
+          order: 3
+          size:
+            - 0
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bug
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+      indices:
+        - fields:
+            - blocks
+          name: bug_blocks_idx_blocks
+          options: []
+          type: NORMAL
+        - fields:
+            - bug
+          name: bug_blocks_idx_bug
+          options: []
+          type: NORMAL
+      name: bug_blocks
+      options: []
+      order: 19
+    bug_merged:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - bug
+            - merged
+          match_type: ''
+          name: bug_merged_bug_id_merged_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bug
+          match_type: ''
+          name: bug_merged_fk_bug
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - merged
+          match_type: ''
+          name: bug_merged_fk_merged
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+      fields:
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bug
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        merged:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: merged
+          order: 3
+          size:
+            - 0
+      indices:
+        - fields:
+            - bug
+          name: bug_merged_idx_bug
+          options: []
+          type: NORMAL
+        - fields:
+            - merged
+          name: bug_merged_idx_merged
+          options: []
+          type: NORMAL
+      name: bug_merged
+      options: []
+      order: 20
+    bug_message:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - bug
+            - message
+          match_type: ''
+          name: bug_message_bug_message_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bug
+          match_type: ''
+          name: bug_message_fk_bug
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - message
+          match_type: ''
+          name: bug_message_fk_message
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: message
+          type: FOREIGN KEY
+      fields:
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bug
+          order: 2
+          size:
+            - 0
+        bug_log_offset:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: bug_log_offset
+          order: 5
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        message:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: message
+          order: 3
+          size:
+            - 0
+        message_number:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: message_number
+          order: 4
+          size:
+            - 0
+        offset_valid:
+          data_type: timestamp with time zone
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: offset_valid
+          order: 6
+          size:
+            - 0
+      indices:
+        - fields:
+            - bug
+          name: bug_message_idx_bug
+          options: []
+          type: NORMAL
+        - fields:
+            - message
+          name: bug_message_idx_message
+          options: []
+          type: NORMAL
+      name: bug_message
+      options: []
+      order: 23
+    bug_package:
+      constraints: []
+      fields:
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: bug
+          order: 1
+          size:
+            - 0
+        package:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: package
+          order: 4
+          size:
+            - 0
+        pkg_id:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: pkg_id
+          order: 2
+          size:
+            - 0
+        pkg_type:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: pkg_type
+          order: 3
+          size:
+            - 0
+      indices: []
+      name: bug_package
+      options: []
+      order: 4
+    bug_srcpackage:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - bug
+            - src_pkg
+          match_type: ''
+          name: bug_srcpackage_id_pkg
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bug
+          match_type: ''
+          name: bug_srcpackage_fk_bug
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - src_pkg
+          match_type: ''
+          name: bug_srcpackage_fk_src_pkg
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: src_pkg
+          type: FOREIGN KEY
+      fields:
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bug
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        src_pkg:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: src_pkg
+          order: 3
+          size:
+            - 0
+      indices:
+        - fields:
+            - bug
+          name: bug_srcpackage_idx_bug
+          options: []
+          type: NORMAL
+        - fields:
+            - src_pkg
+          name: bug_srcpackage_idx_src_pkg
+          options: []
+          type: NORMAL
+      name: bug_srcpackage
+      options: []
+      order: 24
+    bug_status_cache:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - bug
+            - suite
+            - arch
+          match_type: ''
+          name: bug_status_cache_bug_suite_arch_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - arch
+          match_type: ''
+          name: bug_status_cache_fk_arch
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: arch
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bug
+          match_type: ''
+          name: bug_status_cache_fk_bug
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - suite
+          match_type: ''
+          name: bug_status_cache_fk_suite
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: suite
+          type: FOREIGN KEY
+      fields:
+        arch:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 1
+          name: arch
+          order: 4
+          size:
+            - 0
+        asof:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: asof
+          order: 7
+          size:
+            - 0
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bug
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        modified:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: modified
+          order: 6
+          size:
+            - 0
+        status:
+          data_type: enum
+          default_value: ~
+          extra:
+            custom_type_name: bug_status_type
+            list:
+              - pending
+              - forwarded
+              - pending-fixed
+              - fixed
+              - absent
+              - done
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: status
+          order: 5
+          size:
+            - 0
+        suite:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 1
+          name: suite
+          order: 3
+          size:
+            - 0
+      indices:
+        - fields:
+            - arch
+          name: bug_status_cache_idx_arch
+          options: []
+          type: NORMAL
+        - fields:
+            - bug
+          name: bug_status_cache_idx_bug
+          options: []
+          type: NORMAL
+        - fields:
+            - suite
+          name: bug_status_cache_idx_suite
+          options: []
+          type: NORMAL
+      name: bug_status_cache
+      options: []
+      order: 26
+    bug_tag:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - bug
+            - tag
+          match_type: ''
+          name: bug_tag_bug_tag
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bug
+          match_type: ''
+          name: bug_tag_fk_bug
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - tag
+          match_type: ''
+          name: bug_tag_fk_tag
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: tag
+          type: FOREIGN KEY
+      fields:
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bug
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        tag:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: tag
+          order: 3
+          size:
+            - 0
+      indices:
+        - fields:
+            - bug
+          name: bug_tag_idx_bug
+          options: []
+          type: NORMAL
+        - fields:
+            - tag
+          name: bug_tag_idx_tag
+          options: []
+          type: NORMAL
+      name: bug_tag
+      options: []
+      order: 25
+    bug_ver:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - bug
+            - ver_string
+            - found
+          match_type: ''
+          name: bug_ver_bug_ver_string_found_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - bug
+          match_type: ''
+          name: bug_ver_fk_bug
+          on_delete: RESTRICT
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: bug
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - src_pkg
+          match_type: ''
+          name: bug_ver_fk_src_pkg
+          on_delete: SET NULL
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: src_pkg
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - src_ver
+          match_type: ''
+          name: bug_ver_fk_src_ver
+          on_delete: SET NULL
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: src_ver
+          type: FOREIGN KEY
+      fields:
+        bug:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: bug
+          order: 2
+          size:
+            - 0
+        creation:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: creation
+          order: 7
+          size:
+            - 0
+        found:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: true
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: found
+          order: 6
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        last_modified:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: last_modified
+          order: 8
+          size:
+            - 0
+        src_pkg:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: src_pkg
+          order: 4
+          size:
+            - 0
+        src_ver:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: src_ver
+          order: 5
+          size:
+            - 0
+        ver_string:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 1
+          name: ver_string
+          order: 3
+          size:
+            - 0
+      indices:
+        - fields:
+            - bug
+          name: bug_ver_idx_bug
+          options: []
+          type: NORMAL
+        - fields:
+            - src_pkg
+          name: bug_ver_idx_src_pkg
+          options: []
+          type: NORMAL
+        - fields:
+            - src_ver
+          name: bug_ver_idx_src_ver
+          options: []
+          type: NORMAL
+      name: bug_ver
+      options: []
+      order: 29
+    column_comments:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - table_name
+            - column_name
+          match_type: ''
+          name: column_comments_table_name_column_name_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        column_name:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: column_name
+          order: 2
+          size:
+            - 0
+        comment_text:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: comment_text
+          order: 3
+          size:
+            - 0
+        table_name:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: table_name
+          order: 1
+          size:
+            - 0
+      indices: []
+      name: column_comments
+      options: []
+      order: 5
+    correspondent:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - addr
+          match_type: ''
+          name: correspondent_addr_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        addr:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: addr
+          order: 2
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+      indices: []
+      name: correspondent
+      options: []
+      order: 6
+    correspondent_full_name:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - correspondent
+            - full_name
+          match_type: ''
+          name: correspondent_full_name_correspondent_full_name_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - correspondent
+          match_type: ''
+          name: correspondent_full_name_fk_correspondent
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: correspondent
+          type: FOREIGN KEY
+      fields:
+        correspondent:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: correspondent
+          order: 2
+          size:
+            - 0
+        full_name:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: full_name
+          order: 3
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        last_seen:
+          data_type: timestamp
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: last_seen
+          order: 4
+          size:
+            - 0
+      indices:
+        - fields:
+            - correspondent
+          name: correspondent_full_name_idx_correspondent
+          options: []
+          type: NORMAL
+      name: correspondent_full_name
+      options: []
+      order: 14
+    dbix_class_deploymenthandler_versions:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - version
+          match_type: ''
+          name: dbix_class_deploymenthandler_versions_version
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        ddl:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: ddl
+          order: 3
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        upgrade_sql:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: upgrade_sql
+          order: 4
+          size:
+            - 0
+        version:
+          data_type: varchar
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: version
+          order: 2
+          size:
+            - 50
+      indices: []
+      name: dbix_class_deploymenthandler_versions
+      options: []
+      order: 7
+    maintainer:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - name
+          match_type: ''
+          name: maintainer_name_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - correspondent
+          match_type: ''
+          name: maintainer_fk_correspondent
+          on_delete: NO ACTION
+          on_update: NO ACTION
+          options: []
+          reference_fields:
+            - id
+          reference_table: correspondent
+          type: FOREIGN KEY
+      fields:
+        correspondent:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: correspondent
+          order: 3
+          size:
+            - 0
+        created:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: created
+          order: 4
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        modified:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: modified
+          order: 5
+          size:
+            - 0
+        name:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: name
+          order: 2
+          size:
+            - 0
+      indices:
+        - fields:
+            - correspondent
+          name: maintainer_idx_correspondent
+          options: []
+          type: NORMAL
+      name: maintainer
+      options: []
+      order: 15
+    message:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+      fields:
+        from_addr:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: from_addr
+          order: 4
+          size:
+            - 0
+        from_complete:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: from_complete
+          order: 3
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        is_spam:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: is_spam
+          order: 11
+          size:
+            - 0
+        msgid:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: msgid
+          order: 2
+          size:
+            - 0
+        refs:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: refs
+          order: 9
+          size:
+            - 0
+        sent_date:
+          data_type: timestamp with time zone
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: sent_date
+          order: 8
+          size:
+            - 0
+        spam_score:
+          data_type: double precision
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: spam_score
+          order: 10
+          size:
+            - 0
+        subject:
+          data_type: text
+          default_value: ''
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: subject
+          order: 7
+          size:
+            - 0
+        to_addr:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: to_addr
+          order: 6
+          size:
+            - 0
+        to_complete:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: to_complete
+          order: 5
+          size:
+            - 0
+      indices: []
+      name: message
+      options: []
+      order: 8
+    message_correspondent:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - message
+            - correspondent
+            - correspondent_type
+          match_type: ''
+          name: message_correspondent_message_correspondent_correspondent_t_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - correspondent
+          match_type: ''
+          name: message_correspondent_fk_correspondent
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: correspondent
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - message
+          match_type: ''
+          name: message_correspondent_fk_message
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: message
+          type: FOREIGN KEY
+      fields:
+        correspondent:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: correspondent
+          order: 3
+          size:
+            - 0
+        correspondent_type:
+          data_type: enum
+          default_value: to
+          extra:
+            custom_type_name: message_correspondent_type
+            list:
+              - to
+              - from
+              - envfrom
+              - cc
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: correspondent_type
+          order: 4
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        message:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: message
+          order: 2
+          size:
+            - 0
+      indices:
+        - fields:
+            - correspondent
+          name: message_correspondent_idx_correspondent
+          options: []
+          type: NORMAL
+        - fields:
+            - message
+          name: message_correspondent_idx_message
+          options: []
+          type: NORMAL
+      name: message_correspondent
+      options: []
+      order: 18
+    message_refs:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - message
+            - refs
+          match_type: ''
+          name: message_refs_message_refs_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - message
+          match_type: ''
+          name: message_refs_fk_message
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: message
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - refs
+          match_type: ''
+          name: message_refs_fk_refs
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: message
+          type: FOREIGN KEY
+      fields:
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        inferred:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: inferred
+          order: 4
+          size:
+            - 0
+        message:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: message
+          order: 2
+          size:
+            - 0
+        primary_ref:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: primary_ref
+          order: 5
+          size:
+            - 0
+        refs:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: refs
+          order: 3
+          size:
+            - 0
+      indices:
+        - fields:
+            - message
+          name: message_refs_idx_message
+          options: []
+          type: NORMAL
+        - fields:
+            - refs
+          name: message_refs_idx_refs
+          options: []
+          type: NORMAL
+      name: message_refs
+      options: []
+      order: 16
+    severity:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - severity
+          match_type: ''
+          name: severity_severity_idx
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        obsolete:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: obsolete
+          order: 5
+          size:
+            - 0
+        ordering:
+          data_type: integer
+          default_value: 5
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: ordering
+          order: 3
+          size:
+            - 0
+        severity:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: severity
+          order: 2
+          size:
+            - 0
+        strong:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: strong
+          order: 4
+          size:
+            - 0
+      indices: []
+      name: severity
+      options: []
+      order: 9
+    src_associations:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - source
+          match_type: ''
+          name: src_associations_fk_source
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: src_ver
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - suite
+          match_type: ''
+          name: src_associations_fk_suite
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: suite
+          type: FOREIGN KEY
+      fields:
+        created:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: created
+          order: 4
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        modified:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: modified
+          order: 5
+          size:
+            - 0
+        source:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: source
+          order: 3
+          size:
+            - 0
+        suite:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: suite
+          order: 2
+          size:
+            - 0
+      indices:
+        - fields:
+            - source
+          name: src_associations_idx_source
+          options: []
+          type: NORMAL
+        - fields:
+            - suite
+          name: src_associations_idx_suite
+          options: []
+          type: NORMAL
+      name: src_associations
+      options: []
+      order: 27
+    src_pkg:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - pkg
+            - disabled
+          match_type: ''
+          name: src_pkg_pkg_disabled
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - alias_of
+          match_type: ''
+          name: src_pkg_fk_alias_of
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: src_pkg
+          type: FOREIGN KEY
+      fields:
+        alias_of:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: alias_of
+          order: 4
+          size:
+            - 0
+        creation:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: creation
+          order: 5
+          size:
+            - 0
+        disabled:
+          data_type: timestamp with time zone
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 1
+          name: disabled
+          order: 6
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        last_modified:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: last_modified
+          order: 7
+          size:
+            - 0
+        obsolete:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: obsolete
+          order: 8
+          size:
+            - 0
+        pkg:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: pkg
+          order: 2
+          size:
+            - 0
+        pseduopkg:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: pseduopkg
+          order: 3
+          size:
+            - 0
+      indices:
+        - fields:
+            - alias_of
+          name: src_pkg_idx_alias_of
+          options: []
+          type: NORMAL
+      name: src_pkg
+      options: []
+      order: 10
+    src_ver:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - src_pkg
+            - ver
+          match_type: ''
+          name: src_ver_src_pkg_id_ver
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 0
+          expression: ''
+          fields:
+            - based_on
+          match_type: ''
+          name: src_ver_fk_based_on
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: src_ver
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - maintainer
+          match_type: ''
+          name: src_ver_fk_maintainer
+          on_delete: SET NULL
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: maintainer
+          type: FOREIGN KEY
+        - deferrable: 0
+          expression: ''
+          fields:
+            - src_pkg
+          match_type: ''
+          name: src_ver_fk_src_pkg
+          on_delete: CASCADE
+          on_update: CASCADE
+          options: []
+          reference_fields:
+            - id
+          reference_table: src_pkg
+          type: FOREIGN KEY
+      fields:
+        based_on:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: based_on
+          order: 6
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        maintainer:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: maintainer
+          order: 4
+          size:
+            - 0
+        src_pkg:
+          data_type: integer
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: src_pkg
+          order: 2
+          size:
+            - 0
+        upload_date:
+          data_type: timestamp with time zone
+          default_value: !!perl/ref
+            =: current_timestamp
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: upload_date
+          order: 5
+          size:
+            - 0
+        ver:
+          data_type: debversion
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: ver
+          order: 3
+          size:
+            - 0
+      indices:
+        - fields:
+            - based_on
+          name: src_ver_idx_based_on
+          options: []
+          type: NORMAL
+        - fields:
+            - maintainer
+          name: src_ver_idx_maintainer
+          options: []
+          type: NORMAL
+        - fields:
+            - src_pkg
+          name: src_ver_idx_src_pkg
+          options: []
+          type: NORMAL
+      name: src_ver
+      options: []
+      order: 21
+    suite:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - suite_name
+          match_type: ''
+          name: suite_suite_name_key
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        active:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: true
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: active
+          order: 5
+          size:
+            - 0
+        codename:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: codename
+          order: 4
+          size:
+            - 0
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        suite_name:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: suite_name
+          order: 2
+          size:
+            - 0
+        version:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: version
+          order: 3
+          size:
+            - 0
+      indices: []
+      name: suite
+      options: []
+      order: 11
+    table_comments:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - table_name
+          match_type: ''
+          name: table_comments_table_name_key
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        comment_text:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: comment_text
+          order: 2
+          size:
+            - 0
+        table_name:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: table_name
+          order: 1
+          size:
+            - 0
+      indices: []
+      name: table_comments
+      options: []
+      order: 12
+    tag:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - tag
+          match_type: ''
+          name: tag_tag_key
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        id:
+          data_type: integer
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        obsolete:
+          data_type: boolean
+          default_value: !!perl/ref
+            =: false
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: obsolete
+          order: 3
+          size:
+            - 0
+        tag:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: tag
+          order: 2
+          size:
+            - 0
+      indices: []
+      name: tag
+      options: []
+      order: 13
+  triggers: {}
+  views: {}
+translator:
+  add_drop_table: 0
+  filename: ~
+  no_comments: 0
+  parser_args:
+    sources:
+      - Arch
+      - BinAssociation
+      - BinPkg
+      - BinVer
+      - BinaryVersion
+      - Bug
+      - BugBinpackage
+      - BugBlock
+      - BugMerged
+      - BugMessage
+      - BugPackage
+      - BugSrcpackage
+      - BugStatusCache
+      - BugTag
+      - BugVer
+      - ColumnComment
+      - Correspondent
+      - CorrespondentFullName
+      - DbixClassDeploymenthandlerVersion
+      - Maintainer
+      - Message
+      - MessageCorrespondent
+      - MessageRef
+      - Severity
+      - SrcAssociation
+      - SrcPkg
+      - SrcVer
+      - Suite
+      - TableComment
+      - Tag
+  parser_type: SQL::Translator::Parser::DBIx::Class
+  producer_args: {}
+  producer_type: SQL::Translator::Producer::YAML
+  show_warnings: 0
+  trace: 0
+  version: 0.11018