Add Liquibase.

Change-Id: I95f2e630f03bcf08c5a8fb2dfba80021da350c75
diff --git a/src/main/resources/db/changeLog-1.0.xml b/src/main/resources/db/changeLog-1.0.xml
new file mode 100644
index 0000000..c4c911a
--- /dev/null
+++ b/src/main/resources/db/changeLog-1.0.xml
@@ -0,0 +1,1163 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog
+  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+  xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
+  xmlns:pro="http://www.liquibase.org/xml/ns/pro"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="
+    http://www.liquibase.org/xml/ns/dbchangelog-ext
+    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
+    http://www.liquibase.org/xml/ns/pro
+    http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.9.xsd
+    http://www.liquibase.org/xml/ns/dbchangelog
+    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd">
+
+  <changeSet author="mulk (generated)" id="1592058325319-1">
+    <createTable tableName="article_types">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="article_types_pkey"/>
+      </column>
+      <column name="name" type="VARCHAR"/>
+      <column name="page_template" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-2">
+    <createTable tableName="cached_pages">
+      <column name="alias" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="cached_pages_pkey"/>
+      </column>
+      <column name="characteristic_hash" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="cached_pages_pkey"/>
+      </column>
+      <column defaultValueComputed="now()" name="date" type="TIMESTAMP WITHOUT TIME ZONE">
+        <constraints nullable="false"/>
+      </column>
+      <column name="content" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-3">
+    <createTable tableName="used_transaction_keys">
+      <column name="key" type="BIGINT">
+        <constraints nullable="false" primaryKey="true"
+          primaryKeyName="used_transaction_keys_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-4">
+    <createTable tableName="users">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="users_pkey"/>
+      </column>
+      <column name="name" type="VARCHAR"/>
+      <column name="status" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="email" type="VARCHAR"/>
+      <column name="website" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-5">
+    <createTable tableName="openids">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="openids_pkey"/>
+      </column>
+      <column name="openid" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="openids_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-6">
+    <createTable tableName="passwords">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="passwords_pkey"/>
+      </column>
+      <column name="password" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="passwords_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-7">
+    <createTable tableName="articles">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="articles_pkey"/>
+      </column>
+      <column name="type" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-8">
+    <createTable tableName="journal_pingback">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="journal_pingbackpk"/>
+      </column>
+      <column name="entry_id" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="uuid" type="CHAR(36)">
+        <constraints nullable="false"/>
+      </column>
+      <column name="date" type="BIGINT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="url" type="TEXT"/>
+      <column name="spam_p" type="BOOLEAN"/>
+      <column name="submitter_ip" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="submitter_user_agent" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-9">
+    <createTable tableName="article_revisions">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="article_revisions_pkey"/>
+      </column>
+      <column name="article" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column defaultValueComputed="now()" name="date" type="TIMESTAMP WITHOUT TIME ZONE"/>
+      <column name="title" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="content" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="author" type="INTEGER"/>
+      <column name="format" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="status" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="global_id" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-10">
+    <createTable tableName="article_revision_parenthood">
+      <column name="parent" type="INTEGER">
+        <constraints nullable="false" primaryKey="true"
+          primaryKeyName="article_revision_parenthood_pkey"/>
+      </column>
+      <column name="child" type="INTEGER">
+        <constraints nullable="false" primaryKey="true"
+          primaryKeyName="article_revision_parenthood_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-11">
+    <createTable tableName="journal_comment">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="JOURNAL_COMMENTPK"/>
+      </column>
+      <column name="entry_id" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="uuid" type="CHAR(36)">
+        <constraints nullable="false"/>
+      </column>
+      <column name="date" type="BIGINT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="body" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="author" type="TEXT"/>
+      <column name="email" type="TEXT"/>
+      <column name="website" type="TEXT"/>
+      <column name="spam_p" type="BOOLEAN"/>
+      <column defaultValue="0.0.0.0" name="submitter_ip" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="submitter_user_agent" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-12">
+    <createTable tableName="user_permissions">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_permissions_pkey"/>
+      </column>
+      <column name="permission" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_permissions_pkey"/>
+      </column>
+      <column name="status" type="BOOLEAN"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-13">
+    <createTable tableName="journal_category">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="journal_categorypk"/>
+      </column>
+      <column name="uuid" type="CHAR(36)">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-14">
+    <createTable tableName="journals">
+      <column name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="journals_pkey"/>
+      </column>
+      <column name="path_prefix" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-15">
+    <createTable tableName="category_inclusions">
+      <column name="category" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="category_inclusions_pkey"/>
+      </column>
+      <column name="supercategory" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="category_inclusions_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-16">
+    <createTable tableName="journal_entry">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="journal_entrypk"/>
+      </column>
+      <column name="uuid" type="CHAR(36)">
+        <constraints nullable="false"/>
+      </column>
+      <column name="title" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="date" type="BIGINT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="last_modification" type="BIGINT"/>
+      <column name="body" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+      <column defaultValue="markdown" name="type" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-17">
+    <createTable tableName="journal_trackback">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="journal_trackbackpk"/>
+      </column>
+      <column name="entry_id" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="uuid" type="CHAR(36)">
+        <constraints nullable="false"/>
+      </column>
+      <column name="date" type="BIGINT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="excerpt" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="title" type="TEXT"/>
+      <column name="blog_name" type="TEXT"/>
+      <column name="url" type="TEXT"/>
+      <column name="spam_p" type="BOOLEAN"/>
+      <column name="submitter_ip" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+      <column name="submitter_user_agent" type="TEXT">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-18">
+    <createTable tableName="user_settings">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_settings_pkey"/>
+      </column>
+      <column name="setting" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_settings_pkey"/>
+      </column>
+      <column name="value" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-19">
+    <createTable tableName="article_category_memberships">
+      <column name="article" type="INTEGER">
+        <constraints nullable="false" primaryKey="true"
+          primaryKeyName="article_category_memberships_pkey"/>
+      </column>
+      <column name="category" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true"
+          primaryKeyName="article_category_memberships_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-20">
+    <createTable tableName="categories">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="categories_pkey"/>
+      </column>
+      <column name="name" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-21">
+    <createTable tableName="journal_entries">
+      <column name="journal" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="journal_entries_pkey"/>
+      </column>
+      <column name="index" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="journal_entries_pkey"/>
+      </column>
+      <column name="article" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-22">
+    <createTable tableName="article_aliases">
+      <column name="alias" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="article_aliases_pkey"/>
+      </column>
+      <column name="article" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-23">
+    <createTable tableName="comment_revisions">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="comment_revisions_pkey"/>
+      </column>
+      <column name="comment" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column defaultValueComputed="now()" name="date" type="TIMESTAMP WITHOUT TIME ZONE"/>
+      <column name="content" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="author" type="INTEGER"/>
+      <column name="format" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="status" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="article_revision" type="INTEGER"/>
+      <column name="submitter_ip" type="INET"/>
+      <column name="submitter_user_agent" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-24">
+    <createTable tableName="article_revision_characteristics">
+      <column name="revision" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="characteristic" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="value" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-25">
+    <createTable tableName="comments">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="comments_pkey"/>
+      </column>
+      <column name="article" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="global_id" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-26">
+    <createTable tableName="login_certificates">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="login_certificates_pkey"/>
+      </column>
+      <column name="certificate" type="BYTEA">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="login_certificates_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-27">
+    <addForeignKeyConstraint baseColumnNames="type" baseTableName="articles"
+      constraintName="articles_type_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="article_types" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-28">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="openids"
+      constraintName="openids_user_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-29">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="passwords"
+      constraintName="passwords_user_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-30">
+    <createView fullDefinition="false" viewName="article_comment_counts">SELECT a.id AS article,
+      count(c.*) AS comment_count
+      FROM (articles a
+      LEFT JOIN comments c ON (((c.article = a.id) AND (EXISTS ( SELECT comment_revisions.id,
+      comment_revisions.comment,
+      comment_revisions.date,
+      comment_revisions.content,
+      comment_revisions.author,
+      comment_revisions.format,
+      comment_revisions.status,
+      comment_revisions.article_revision,
+      comment_revisions.submitter_ip,
+      comment_revisions.submitter_user_agent
+      FROM comment_revisions
+      WHERE ((comment_revisions.comment = c.id) AND ((comment_revisions.status)::text = ANY
+      (ARRAY[('approved'::character varying)::text, ('trusted'::character varying)::text]))))))))
+      GROUP BY a.id;
+    </createView>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-31">
+    <addForeignKeyConstraint baseColumnNames="article" baseTableName="comments"
+      constraintName="comments_article_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="articles" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-32">
+    <addForeignKeyConstraint baseColumnNames="article" baseTableName="journal_entries"
+      constraintName="journal_entries_article_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="articles" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-33">
+    <createView fullDefinition="false" viewName="article_branch_tips">SELECT
+      article_revisions.article,
+      article_revisions.id AS revision
+      FROM (( SELECT article_revisions_1.id
+      FROM article_revisions article_revisions_1
+      EXCEPT
+      SELECT article_revision_parenthood.parent
+      FROM article_revision_parenthood) branch_tips
+      JOIN article_revisions USING (id));
+    </createView>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-34">
+    <createView fullDefinition="false" viewName="article_publishing_dates">SELECT
+      article_revisions.article,
+      min(article_revisions.date) AS publishing_date
+      FROM article_revisions
+      WHERE ((article_revisions.status)::text = ANY (ARRAY[('published'::character varying)::text,
+      ('syndicated'::character varying)::text]))
+      GROUP BY article_revisions.article;
+    </createView>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-35">
+    <addForeignKeyConstraint baseColumnNames="article" baseTableName="article_revisions"
+      constraintName="article_revisions_article_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="articles" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-36">
+    <addForeignKeyConstraint baseColumnNames="author" baseTableName="article_revisions"
+      constraintName="article_revisions_author_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-37">
+    <createIndex indexName="article_revisions_english_ts_idx" tableName="article_revisions">
+      <column computed="true"
+        name="((setweight(to_tsvector('english'::regconfig, (title)::text), 'A'::char) || setweight(to_tsvector('english'::regconfig, (content)::text), 'D'::char)))"/>
+    </createIndex>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-38">
+    <createIndex indexName="article_revisions_french_ts_idx" tableName="article_revisions">
+      <column computed="true"
+        name="((setweight(to_tsvector('french'::regconfig, (title)::text), 'A'::char) || setweight(to_tsvector('french'::regconfig, (content)::text), 'D'::char)))"/>
+    </createIndex>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-39">
+    <createIndex indexName="article_revisions_german_ts_idx" tableName="article_revisions">
+      <column computed="true"
+        name="((setweight(to_tsvector('german'::regconfig, (title)::text), 'A'::char) || setweight(to_tsvector('german'::regconfig, (content)::text), 'D'::char)))"/>
+    </createIndex>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-40">
+    <addUniqueConstraint columnNames="global_id" constraintName="article_revisions_global_id_key"
+      tableName="article_revisions"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-41">
+    <addForeignKeyConstraint baseColumnNames="child" baseTableName="article_revision_parenthood"
+      constraintName="article_revision_parenthood_child_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="article_revisions" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-42">
+    <addForeignKeyConstraint baseColumnNames="parent" baseTableName="article_revision_parenthood"
+      constraintName="article_revision_parenthood_parent_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="article_revisions" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-43">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="user_permissions"
+      constraintName="user_permissions_user_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-44">
+    <addForeignKeyConstraint baseColumnNames="entry_id" baseTableName="journal_pingback"
+      constraintName="journal_pingback_journal_entryfk" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="journal_entry" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-45">
+    <addForeignKeyConstraint baseColumnNames="entry_id" baseTableName="journal_trackback"
+      constraintName="journal_trackback_journal_entryfk" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="journal_entry" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-46">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="user_settings"
+      constraintName="user_settings_user_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-47">
+    <addForeignKeyConstraint baseColumnNames="article" baseTableName="article_category_memberships"
+      constraintName="article_category_memberships_article_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="articles" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-48">
+    <addForeignKeyConstraint baseColumnNames="category" baseTableName="category_inclusions"
+      constraintName="category_inclusions_category_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="categories" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-49">
+    <addForeignKeyConstraint baseColumnNames="supercategory" baseTableName="category_inclusions"
+      constraintName="category_inclusions_supercategory_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="categories" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-50">
+    <addForeignKeyConstraint baseColumnNames="journal" baseTableName="journal_entries"
+      constraintName="journal_entries_journal_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="journals" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-51">
+    <addForeignKeyConstraint baseColumnNames="article" baseTableName="article_aliases"
+      constraintName="article_aliases_article_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="articles" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-52">
+    <addForeignKeyConstraint baseColumnNames="author" baseTableName="comment_revisions"
+      constraintName="comment_revisions_author_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-53">
+    <addForeignKeyConstraint baseColumnNames="revision"
+      baseTableName="article_revision_characteristics"
+      constraintName="article_revision_characteristics_revision_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="article_revisions" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-54">
+    <addUniqueConstraint columnNames="revision, characteristic, value"
+      constraintName="article_revision_characteristics_revision_key"
+      tableName="article_revision_characteristics"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-55">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="login_certificates"
+      constraintName="login_certificates_user_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-56">
+    <addForeignKeyConstraint baseColumnNames="entry_id" baseTableName="journal_comment"
+      constraintName="journal_comment_journal_entryfk" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="journal_entry" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-57">
+    <addForeignKeyConstraint baseColumnNames="comment" baseTableName="comment_revisions"
+      constraintName="comment_revisions_comment_fkey" deferrable="false" initiallyDeferred="false"
+      onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="comments" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592058325319-58">
+    <createSequence cacheSize="1" cycle="false" dataType="bigint" incrementBy="1"
+      maxValue="9223372036854775807" minValue="1" sequenceName="transaction_key_seq"
+      startValue="1"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-1">
+    <createTable schemaName="benki" tableName="openids">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="openid" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="openids_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-2">
+    <createTable schemaName="benki" tableName="lazychat_references">
+      <column name="referrer" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="lazychat_references_pkey"/>
+      </column>
+      <column name="referee" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="lazychat_references_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-3">
+    <createTable schemaName="benki" tableName="rsa_keys">
+      <column name="modulus" type="numeric">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="rsa_keys_pkey"/>
+      </column>
+      <column name="exponent" type="numeric">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="rsa_keys_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-4">
+    <createTable schemaName="benki" tableName="user_jids">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_jids_pkey"/>
+      </column>
+      <column name="jid" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_jids_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-5">
+    <createTable schemaName="benki" tableName="wiki_page_revisions">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="wiki_page_revisions_pkey"/>
+      </column>
+      <column name="page" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column defaultValueComputed="now()" name="date" type="TIMESTAMP WITH TIME ZONE"/>
+      <column name="title" type="VARCHAR"/>
+      <column name="content" type="VARCHAR"/>
+      <column name="author" type="INTEGER"/>
+      <column name="format" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-6">
+    <createTable schemaName="benki" tableName="user_roles">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_roles_pkey"/>
+      </column>
+      <column name="role" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_roles_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-7">
+    <createTable schemaName="benki" tableName="post_targets">
+      <column name="message" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="lazychat_targets_pkey"/>
+      </column>
+      <column name="target" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="lazychat_targets_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-8">
+    <createTable schemaName="benki" tableName="user_nicknames">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="nickname" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_nicknames_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-9">
+    <createTable schemaName="benki" tableName="posts">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="posts_pkey"/>
+      </column>
+      <column name="owner" type="INTEGER"/>
+      <column defaultValueComputed="now()" name="date" type="TIMESTAMP WITH TIME ZONE"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-10">
+    <createTable schemaName="benki" tableName="users">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="users_pkey"/>
+      </column>
+      <column name="first_name" type="VARCHAR"/>
+      <column name="middle_names" type="VARCHAR"/>
+      <column name="last_name" type="VARCHAR"/>
+      <column name="email" type="VARCHAR"/>
+      <column name="website" type="VARCHAR"/>
+      <column name="status" type="VARCHAR"/>
+      <column name="role" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-11">
+    <createTable schemaName="benki" tableName="webids">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="webid" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="webids_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-12">
+    <createTable schemaName="benki" tableName="page_keys">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="page" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="page_keys_pkey"/>
+      </column>
+      <column name="key" type="numeric">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="page_keys_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-13">
+    <createTable schemaName="benki" tableName="role_tags">
+      <column name="role" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="role_tags_pkey"/>
+      </column>
+      <column name="tag" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="role_tags_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-14">
+    <createTable schemaName="benki" tableName="user_rsa_keys">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_rsa_keys_pkey"/>
+      </column>
+      <column name="modulus" type="numeric">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_rsa_keys_pkey"/>
+      </column>
+      <column name="exponent" type="numeric">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_rsa_keys_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-15">
+    <createTable schemaName="benki" tableName="user_email_addresses">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false"/>
+      </column>
+      <column name="email" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_email_addresses_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-16">
+    <createTable schemaName="benki" tableName="role_subroles">
+      <column name="superrole" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="role_subroles_pkey"/>
+      </column>
+      <column name="subrole" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="role_subroles_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-17">
+    <createTable schemaName="benki" tableName="roles">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="roles_pkey"/>
+      </column>
+      <column name="name" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-18">
+    <createTable schemaName="benki" tableName="bookmark_tags">
+      <column name="bookmark" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="bookmark_tags_pkey"/>
+      </column>
+      <column name="tag" type="VARCHAR">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="bookmark_tags_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-19">
+    <createTable schemaName="benki" tableName="user_default_target">
+      <column name="user" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_default_target_pkey"/>
+      </column>
+      <column name="target" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="user_default_target_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-20">
+    <createTable schemaName="benki" tableName="wiki_pages">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="wiki_pages_pkey"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-21">
+    <addForeignKeyConstraint baseColumnNames="modulus,exponent" baseTableName="user_rsa_keys"
+      baseTableSchemaName="benki" constraintName="user_rsa_keys_modulus_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
+      referencedColumnNames="modulus,exponent" referencedTableName="rsa_keys"
+      referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-22">
+    <createIndex indexName="user_jids_user" schemaName="benki" tableName="user_jids">
+      <column name="user"/>
+    </createIndex>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-23">
+    <createIndex indexName="user_nicknames_user" schemaName="benki" tableName="user_nicknames">
+      <column name="user"/>
+    </createIndex>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-24">
+    <createTable schemaName="benki" tableName="bookmarks">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="bookmarks_pkey"/>
+      </column>
+      <column name="owner" type="INTEGER"/>
+      <column defaultValueComputed="now()" name="date" type="TIMESTAMP WITH TIME ZONE"/>
+      <column name="uri" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+      <column name="title" type="VARCHAR"/>
+      <column name="description" type="VARCHAR"/>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-25">
+    <createTable schemaName="benki" tableName="lazychat_messages">
+      <column autoIncrement="true" name="id" type="INTEGER">
+        <constraints nullable="false" primaryKey="true" primaryKeyName="lazychat_messages_pkey"/>
+      </column>
+      <column name="owner" type="INTEGER"/>
+      <column defaultValueComputed="now()" name="date" type="TIMESTAMP WITH TIME ZONE"/>
+      <column name="content" type="VARCHAR"/>
+      <column name="format" type="VARCHAR">
+        <constraints nullable="false"/>
+      </column>
+    </createTable>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-26">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="webids"
+      baseTableSchemaName="benki" constraintName="webids_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-27">
+    <addForeignKeyConstraint baseColumnNames="author" baseTableName="wiki_page_revisions"
+      baseTableSchemaName="benki" constraintName="wiki_page_revisions_author_fkey"
+      deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
+      referencedColumnNames="id" referencedTableName="users" referencedTableSchemaName="benki"
+      validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-28">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="page_keys"
+      baseTableSchemaName="benki" constraintName="page_keys_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-29">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="user_rsa_keys"
+      baseTableSchemaName="benki" constraintName="user_rsa_keys_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-30">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="user_email_addresses"
+      baseTableSchemaName="benki" constraintName="user_email_addresses_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-31">
+    <createView fullDefinition="false" schemaName="benki" viewName="effective_role_subroles">WITH
+      RECURSIVE t(superrole, subrole) AS (
+      SELECT roles.id,
+      roles.id
+      FROM roles
+      UNION
+      SELECT t_1.superrole,
+      rs.subrole
+      FROM (t t_1
+      JOIN role_subroles rs ON ((rs.superrole = t_1.subrole)))
+      )
+      SELECT t.superrole,
+      t.subrole
+      FROM t;
+    </createView>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-32">
+    <addForeignKeyConstraint baseColumnNames="target" baseTableName="user_default_target"
+      baseTableSchemaName="benki" constraintName="user_default_target_target_fkey"
+      deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
+      referencedColumnNames="id" referencedTableName="roles" referencedTableSchemaName="benki"
+      validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-33">
+    <addForeignKeyConstraint baseColumnNames="role" baseTableName="user_roles"
+      baseTableSchemaName="benki" constraintName="user_roles_role_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="roles" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-34">
+    <addForeignKeyConstraint baseColumnNames="role" baseTableName="users"
+      baseTableSchemaName="benki" constraintName="users_role_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="roles" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-35">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="user_default_target"
+      baseTableSchemaName="benki" constraintName="user_default_target_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-36">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="openids"
+      baseTableSchemaName="benki" constraintName="openids_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-37">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="user_jids"
+      baseTableSchemaName="benki" constraintName="user_jids_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-38">
+    <addForeignKeyConstraint baseColumnNames="page" baseTableName="wiki_page_revisions"
+      baseTableSchemaName="benki" constraintName="wiki_page_revisions_page_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="wiki_pages" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-39">
+    <createView fullDefinition="false" schemaName="benki" viewName="effective_user_roles">SELECT
+      ur."user",
+      er.subrole AS role
+      FROM (user_roles ur
+      JOIN effective_role_subroles er ON ((er.superrole = ur.role)))
+      UNION
+      SELECT u.id AS "user",
+      rt.role
+      FROM users u,
+      role_tags rt
+      WHERE ((rt.tag)::text = ANY (ARRAY[('everyone'::character varying)::text, ('world'::character
+      varying)::text]))
+      UNION
+      SELECT NULL::integer AS "user",
+      rt.role
+      FROM role_tags rt
+      WHERE ((rt.tag)::text = 'world'::text);
+    </createView>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-40">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="user_roles"
+      baseTableSchemaName="benki" constraintName="user_roles_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-41">
+    <addForeignKeyConstraint baseColumnNames="target" baseTableName="post_targets"
+      baseTableSchemaName="benki" constraintName="lazychat_targets_target_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="roles" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-42">
+    <createView fullDefinition="false" schemaName="benki" viewName="user_visible_posts">SELECT
+      eur."user",
+      t.message
+      FROM effective_user_roles eur,
+      post_targets t
+      WHERE (t.target = eur.role)
+      UNION
+      SELECT m.owner AS "user",
+      m.id AS message
+      FROM posts m;
+    </createView>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-43">
+    <addForeignKeyConstraint baseColumnNames="user" baseTableName="user_nicknames"
+      baseTableSchemaName="benki" constraintName="user_nicknames_user_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-44">
+    <addForeignKeyConstraint baseColumnNames="owner" baseTableName="bookmarks"
+      baseTableSchemaName="benki" constraintName="bookmarks_owner_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-45">
+    <createView fullDefinition="false" schemaName="benki" viewName="user_visible_bookmarks">SELECT
+      uvp."user",
+      uvp.message
+      FROM (user_visible_posts uvp
+      JOIN bookmarks bm ON ((bm.id = uvp.message)));
+    </createView>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-46">
+    <addForeignKeyConstraint baseColumnNames="owner" baseTableName="lazychat_messages"
+      baseTableSchemaName="benki" constraintName="lazychat_messages_author_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-47">
+    <addForeignKeyConstraint baseColumnNames="referrer" baseTableName="lazychat_references"
+      baseTableSchemaName="benki" constraintName="lazychat_references_referrer_fkey"
+      deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
+      referencedColumnNames="id" referencedTableName="lazychat_messages"
+      referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-48">
+    <createView fullDefinition="false" schemaName="benki" viewName="user_visible_lazychat_messages">
+      SELECT uvp."user",
+      uvp.message
+      FROM (user_visible_posts uvp
+      JOIN lazychat_messages lm ON ((lm.id = uvp.message)));
+    </createView>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-49">
+    <addForeignKeyConstraint baseColumnNames="owner" baseTableName="posts"
+      baseTableSchemaName="benki" constraintName="posts_owner_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="users" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-50">
+    <addForeignKeyConstraint baseColumnNames="subrole" baseTableName="role_subroles"
+      baseTableSchemaName="benki" constraintName="role_subroles_subrole_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="roles" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-51">
+    <addForeignKeyConstraint baseColumnNames="superrole" baseTableName="role_subroles"
+      baseTableSchemaName="benki" constraintName="role_subroles_superrole_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
+      referencedTableName="roles" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+  <changeSet author="mulk (generated)" id="1592059602097-52">
+    <addForeignKeyConstraint baseColumnNames="bookmark" baseTableName="bookmark_tags"
+      baseTableSchemaName="benki" constraintName="bookmark_tags_bookmark_fkey" deferrable="false"
+      initiallyDeferred="false" onDelete="NO ACTION" onUpdate="CASCADE" referencedColumnNames="id"
+      referencedTableName="bookmarks" referencedTableSchemaName="benki" validate="true"/>
+  </changeSet>
+
+</databaseChangeLog>
diff --git a/src/main/resources/db/changeLog.xml b/src/main/resources/db/changeLog.xml
new file mode 100644
index 0000000..bae8dda
--- /dev/null
+++ b/src/main/resources/db/changeLog.xml
@@ -0,0 +1,11 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog
+  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="
+    http://www.liquibase.org/xml/ns/dbchangelog
+    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd">
+
+  <include file="db/changeLog-1.0.xml"/>
+
+</databaseChangeLog>
diff --git a/src/main/resources/db/liquibase.properties b/src/main/resources/db/liquibase.properties
new file mode 100644
index 0000000..79aca15
--- /dev/null
+++ b/src/main/resources/db/liquibase.properties
@@ -0,0 +1,3 @@
+url = jdbc:postgresql:///mulkcms?currentSchemas=public,benki
+changeLogFile = src/main/resources/db/changeLog.xml
+schemas = public,benki