diff --git a/.ci/dev/publish-branch/Jenkinsfile.nightly b/.ci/dev/publish-branch/Jenkinsfile.nightly
index 4b331e9f5d..f0cff55966 100644
--- a/.ci/dev/publish-branch/Jenkinsfile.nightly
+++ b/.ci/dev/publish-branch/Jenkinsfile.nightly
@@ -119,7 +119,12 @@ pipeline {
                         usernamePassword(credentialsId: 'corda-publisher-docker-hub-credentials',
                                 usernameVariable: 'DOCKER_USERNAME',
                                 passwordVariable: 'DOCKER_PASSWORD')]) {
-                    sh "./gradlew pushOfficialImages"
+                    sh script: [
+                            './gradlew',
+                            'docker:pushDockerImage',
+                            '-Pdocker.image.repository=corda/corda',
+                            '--image OFFICIAL'
+                            ].join(' ')
                 }
             }
         }
diff --git a/.ci/dev/regression/Jenkinsfile b/.ci/dev/regression/Jenkinsfile
index fb6e3896ff..4a08d54fe7 100644
--- a/.ci/dev/regression/Jenkinsfile
+++ b/.ci/dev/regression/Jenkinsfile
@@ -273,6 +273,28 @@ pipeline {
             }
         }
 
+        stage('Publish Release Candidate to Internal Repository') {
+            when {
+                expression { isReleaseCandidate }
+            }
+            steps {
+                withCredentials([
+                        usernamePassword(credentialsId: 'docker-image-pusher-os',
+                                usernameVariable: 'DOCKER_USERNAME',
+                                passwordVariable: 'DOCKER_PASSWORD')
+                ]) {
+                    sh script: [
+                            './gradlew',
+                            COMMON_GRADLE_PARAMS,
+                            '-Pdocker.image.repository=entdocker.software.r3.com/corda',
+                            'docker:pushDockerImage',
+                            '--image OFFICIAL',
+                            '--registry-url=entdocker.software.r3.com'
+                            ].join(' ')
+                }
+            }
+        }
+
         stage('Publish Release to Docker Hub') {
             when {
                 expression { isReleaseTag && !isInternalRelease && !isReleaseCandidate}
@@ -286,7 +308,9 @@ pipeline {
                     sh script: [
                             './gradlew',
                             COMMON_GRADLE_PARAMS,
-                            'pushOfficialImages'
+                            'docker:pushDockerImage',
+                            '-Pdocker.image.repository=corda/corda',
+                            '--image OFFICIAL'
                             ].join(' ')
                 }
             }
diff --git a/finance/workflows/src/main/resources/migration/cash.changelog-v1.xml b/finance/workflows/src/main/resources/migration/cash.changelog-v1.xml
index 1f8e2c6635..ca6fd91a75 100644
--- a/finance/workflows/src/main/resources/migration/cash.changelog-v1.xml
+++ b/finance/workflows/src/main/resources/migration/cash.changelog-v1.xml
@@ -2,7 +2,8 @@
 <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
                    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/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
+                   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/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd"
+                   logicalFilePath="migration/node-services.changelog-init.xml">
 
     <changeSet id="1525793504" author="R3.Corda">
         <!-- drop indexes before adding not null constraints to the underlying table, recreating index immediately after -->
diff --git a/node/src/main/kotlin/net/corda/node/services/upgrade/ContractUpgradeServiceImpl.kt b/node/src/main/kotlin/net/corda/node/services/upgrade/ContractUpgradeServiceImpl.kt
index b28ef53b8a..351864a741 100644
--- a/node/src/main/kotlin/net/corda/node/services/upgrade/ContractUpgradeServiceImpl.kt
+++ b/node/src/main/kotlin/net/corda/node/services/upgrade/ContractUpgradeServiceImpl.kt
@@ -19,7 +19,7 @@ class ContractUpgradeServiceImpl(cacheFactory: NamedCacheFactory) : ContractUpgr
     @Table(name = "${NODE_DATABASE_PREFIX}contract_upgrades")
     class DBContractUpgrade(
             @Id
-            @Column(name = "state_ref", length = 96, nullable = false)
+            @Column(name = "state_ref", length = 176, nullable = false)
             var stateRef: String = "",
 
             /** refers to the UpgradedContract class name*/
diff --git a/node/src/main/resources/migration/node-core.changelog-v21.xml b/node/src/main/resources/migration/node-core.changelog-v21.xml
index 7773bc7f91..ee04567f1a 100644
--- a/node/src/main/resources/migration/node-core.changelog-v21.xml
+++ b/node/src/main/resources/migration/node-core.changelog-v21.xml
@@ -4,11 +4,45 @@
                    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
 
     <changeSet author="R3.Corda" id="node_transaction_id_size">
+        <dropPrimaryKey tableName="node_transactions" constraintName="node_transactions_pkey"/>
+        <dropPrimaryKey tableName="node_scheduled_states" constraintName="node_scheduled_states_pkey"/>
+
+        <dropNotNullConstraint tableName="node_transactions" columnName="tx_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="node_scheduled_states" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+
         <modifyDataType tableName="node_transactions"
                         columnName="tx_id"
                         newDataType="NVARCHAR(144)"/>
         <modifyDataType tableName="node_scheduled_states"
                         columnName="transaction_id"
                         newDataType="NVARCHAR(144)"/>
+
+        <addNotNullConstraint tableName="node_transactions" columnName="tx_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="node_scheduled_states" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+
+        <addPrimaryKey columnNames="tx_id" constraintName="node_transactions_pkey" tableName="node_transactions"/>
+        <addPrimaryKey columnNames="output_index, transaction_id" constraintName="node_scheduled_states_pkey"
+                       tableName="node_scheduled_states"/>
+    </changeSet>
+
+    <changeSet author="R3.Corda" id="node_transaction_id_size_non-clustered_pk" onValidationFail="MARK_RAN">
+        <dropPrimaryKey tableName="node_transactions" constraintName="node_transactions_pkey"/>
+        <addPrimaryKey tableName="node_transactions" columnNames="tx_id" constraintName="node_transactions_pkey"
+                       clustered="false"/>
+    </changeSet>
+
+    <changeSet author="R3.Corda" id="node_contract_upgrades_state_ref_size">
+        <dropPrimaryKey tableName="node_contract_upgrades" constraintName="node_contract_upgrades_pkey"/>
+
+        <dropNotNullConstraint tableName="node_contract_upgrades" columnName="state_ref" columnDataType="NVARCHAR(96)" />
+
+        <modifyDataType tableName="node_contract_upgrades"
+                        columnName="state_ref"
+                        newDataType="NVARCHAR(176)"/>
+
+        <addNotNullConstraint tableName="node_contract_upgrades" columnName="state_ref" columnDataType="NVARCHAR(176)"/>
+
+        <addPrimaryKey columnNames="state_ref" constraintName="node_contract_upgrades_pkey"
+                       tableName="node_contract_upgrades"/>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/node/src/main/resources/migration/node-notary.changelog-v4.xml b/node/src/main/resources/migration/node-notary.changelog-v4.xml
index c2a15576ec..7cd5a8117d 100644
--- a/node/src/main/resources/migration/node-notary.changelog-v4.xml
+++ b/node/src/main/resources/migration/node-notary.changelog-v4.xml
@@ -4,6 +4,14 @@
                    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
 
     <changeSet author="R3.Corda" id="node_notary_transaction_id_size">
+        <dropPrimaryKey tableName="node_notary_committed_txs" constraintName="node_notary_transactions_pkey"/>
+        <dropPrimaryKey tableName="node_notary_committed_states" constraintName="node_notary_states_pkey"/>
+
+        <dropNotNullConstraint tableName="node_notary_committed_txs" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="node_notary_committed_states" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="node_notary_committed_states" columnName="consuming_transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="node_notary_request_log" columnName="consuming_transaction_id" columnDataType="NVARCHAR(64)" />
+
         <modifyDataType tableName="node_notary_committed_txs"
                         columnName="transaction_id"
                         newDataType="NVARCHAR(144)"/>
@@ -16,5 +24,21 @@
         <modifyDataType tableName="node_notary_request_log"
                         columnName="consuming_transaction_id"
                         newDataType="NVARCHAR(144)"/>
+
+        <addNotNullConstraint tableName="node_notary_committed_txs" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="node_notary_committed_states" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="node_notary_committed_states" columnName="consuming_transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="node_notary_request_log" columnName="consuming_transaction_id" columnDataType="NVARCHAR(144)"/>
+
+        <addPrimaryKey columnNames="transaction_id" constraintName="node_notary_transactions_pkey" tableName="node_notary_committed_txs"/>
+        <addPrimaryKey columnNames="output_index, transaction_id" constraintName="node_notary_states_pkey"
+                       tableName="node_notary_committed_states"/>
     </changeSet>
+
+    <changeSet id="node_notary_transaction_id_size-non-clustered_pk" author="R3.Corda" onValidationFail="MARK_RAN">
+        <dropPrimaryKey tableName="node_notary_committed_states" constraintName="node_notary_states_pkey"/>
+        <addPrimaryKey tableName="node_notary_committed_states" columnNames="output_index, transaction_id"
+                       constraintName="node_notary_states_pkey" clustered="false"/>
+    </changeSet>
+
 </databaseChangeLog>
\ No newline at end of file
diff --git a/node/src/main/resources/migration/notary-bft-smart.changelog-v2.xml b/node/src/main/resources/migration/notary-bft-smart.changelog-v2.xml
index a63bc827ca..bc62adb0fe 100644
--- a/node/src/main/resources/migration/notary-bft-smart.changelog-v2.xml
+++ b/node/src/main/resources/migration/notary-bft-smart.changelog-v2.xml
@@ -4,6 +4,14 @@
                    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
 
     <changeSet author="R3.Corda" id="node_bft_transaction_id_size">
+        <dropPrimaryKey tableName="node_bft_committed_states" constraintName="node_bft_states_pkey"/>
+        <dropPrimaryKey tableName="node_bft_committed_txs" constraintName="node_bft_transactions_pkey"/>
+
+        <dropNotNullConstraint tableName="node_bft_committed_states" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="node_bft_committed_states" columnName="consuming_transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="node_notary_request_log" columnName="consuming_transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="node_bft_committed_txs" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+
         <modifyDataType tableName="node_bft_committed_states"
                         columnName="transaction_id"
                         newDataType="NVARCHAR(144)"/>
@@ -13,5 +21,23 @@
         <modifyDataType tableName="node_notary_request_log"
                         columnName="consuming_transaction_id"
                         newDataType="NVARCHAR(144)"/>
+        <modifyDataType tableName="node_bft_committed_txs"
+                        columnName="transaction_id"
+                        newDataType="NVARCHAR(144)"/>
+
+        <addNotNullConstraint tableName="node_bft_committed_states" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="node_bft_committed_states" columnName="consuming_transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="node_notary_request_log" columnName="consuming_transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="node_bft_committed_txs" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+
+        <addPrimaryKey columnNames="output_index, transaction_id" constraintName="node_bft_states_pkey"
+                       tableName="node_bft_committed_states"/>
+        <addPrimaryKey columnNames="transaction_id" constraintName="node_bft_transactions_pkey" tableName="node_bft_committed_txs"/>
+    </changeSet>
+
+    <changeSet id="node_bft_transaction_id_size-non-clustered_pk" author="R3.Corda" onValidationFail="MARK_RAN">
+        <dropPrimaryKey tableName="node_bft_committed_states" constraintName="node_bft_states_pkey"/>
+        <addPrimaryKey tableName="node_bft_committed_states" columnNames="output_index, transaction_id"
+                       constraintName="node_bft_states_pkey" clustered="false"/>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/node/src/main/resources/migration/notary-raft.changelog-v2.xml b/node/src/main/resources/migration/notary-raft.changelog-v2.xml
index ddb0db5742..10b7d76452 100644
--- a/node/src/main/resources/migration/notary-raft.changelog-v2.xml
+++ b/node/src/main/resources/migration/notary-raft.changelog-v2.xml
@@ -4,16 +4,34 @@
                    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/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd"
                    logicalFilePath="migration/node-services.changelog-init.xml">
-    <changeSet author="R3.Corda" id="nullability">
-        <addNotNullConstraint tableName="node_raft_committed_states" columnName="state_index" columnDataType="BIGINT"/>
-        <addNotNullConstraint tableName="node_raft_committed_states" columnName="state_value" columnDataType="BLOB"/>
-    </changeSet>
     <changeSet author="R3.Corda" id="node_raft_transaction_id_size">
+        <dropPrimaryKey tableName="node_raft_committed_txs" constraintName="node_raft_transactions_pkey"/>
+
+        <dropNotNullConstraint tableName="node_raft_committed_txs" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="node_notary_request_log" columnName="consuming_transaction_id" columnDataType="NVARCHAR(64)" />
+
         <modifyDataType tableName="node_raft_committed_txs"
                         columnName="transaction_id"
                         newDataType="NVARCHAR(144)"/>
         <modifyDataType tableName="node_notary_request_log"
                         columnName="consuming_transaction_id"
                         newDataType="NVARCHAR(144)"/>
+
+        <addNotNullConstraint tableName="node_raft_committed_txs" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="node_notary_request_log" columnName="consuming_transaction_id" columnDataType="NVARCHAR(144)"/>
+
+        <addPrimaryKey columnNames="transaction_id" constraintName="node_raft_transactions_pkey" tableName="node_raft_committed_txs"/>
+    </changeSet>
+
+    <changeSet author="R3.Corda" id="node_raft_committed_states_id_size">
+        <dropPrimaryKey tableName="node_raft_committed_states" constraintName="node_raft_state_pkey"/>
+        <dropNotNullConstraint tableName="node_raft_committed_states" columnName="id" columnDataType="NVARCHAR(128)"/>
+
+        <modifyDataType tableName="node_raft_committed_states"
+                        columnName="id"
+                        newDataType="NVARCHAR(208)"/>
+
+        <addNotNullConstraint tableName="node_raft_committed_states" columnName="id" columnDataType="NVARCHAR(208)"/>
+        <addPrimaryKey columnNames="id" constraintName="node_raft_state_pkey" tableName="node_raft_committed_states"/>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/node/src/main/resources/migration/vault-schema.changelog-master.xml b/node/src/main/resources/migration/vault-schema.changelog-master.xml
index d3616c5c0c..44684647fa 100644
--- a/node/src/main/resources/migration/vault-schema.changelog-master.xml
+++ b/node/src/main/resources/migration/vault-schema.changelog-master.xml
@@ -12,5 +12,5 @@
     <include file="migration/vault-schema.changelog-v7.xml"/>
     <include file="migration/vault-schema.changelog-v8.xml"/>
     <include file="migration/vault-schema.changelog-v11.xml"/>
-    <include file="migration/vault-schema.changelog-v12.xml"/>
+    <include file="migration/vault-schema.changelog-v13.xml"/>
 </databaseChangeLog>
diff --git a/node/src/main/resources/migration/vault-schema.changelog-v12.xml b/node/src/main/resources/migration/vault-schema.changelog-v12.xml
deleted file mode 100644
index 8dc736a149..0000000000
--- a/node/src/main/resources/migration/vault-schema.changelog-v12.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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.5.xsd">
-
-    <changeSet author="R3.Corda" id="vault_transaction_id_size">
-        <modifyDataType tableName="vault_fungible_states"
-                        columnName="transaction_id"
-                        newDataType="NVARCHAR(144)"/>
-        <modifyDataType tableName="vault_fungible_states_parts"
-                        columnName="transaction_id"
-                        newDataType="NVARCHAR(144)"/>
-        <modifyDataType tableName="vault_linear_states"
-                        columnName="transaction_id"
-                        newDataType="NVARCHAR(144)"/>
-        <modifyDataType tableName="vault_linear_states_parts"
-                        columnName="transaction_id"
-                        newDataType="NVARCHAR(144)"/>
-        <modifyDataType tableName="vault_states"
-                        columnName="transaction_id"
-                        newDataType="NVARCHAR(144)"/>
-        <modifyDataType tableName="vault_transaction_notes"
-                        columnName="transaction_id"
-                        newDataType="NVARCHAR(144)"/>
-        <modifyDataType tableName="state_party"
-                        columnName="transaction_id"
-                        newDataType="NVARCHAR(144)"/>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/node/src/main/resources/migration/vault-schema.changelog-v13.xml b/node/src/main/resources/migration/vault-schema.changelog-v13.xml
new file mode 100644
index 0000000000..beb66dba82
--- /dev/null
+++ b/node/src/main/resources/migration/vault-schema.changelog-v13.xml
@@ -0,0 +1,103 @@
+<?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.5.xsd">
+
+    <changeSet author="R3.Corda" id="vault_transaction_id_size">
+        <!-- dropView to avoid org.postgresql.util.PSQLException: cannot alter type of a column used by a view or rule -->
+        <dropView viewName="v_pkey_hash_ex_id_map"/>
+
+        <dropForeignKeyConstraint baseTableName="vault_fungible_states_parts"
+                                  constraintName="FK__fung_st_parts__fung_st"/>
+        <dropForeignKeyConstraint baseTableName="vault_linear_states_parts"
+                                  constraintName="FK__lin_stat_parts__lin_stat"/>
+        <dropPrimaryKey tableName="vault_fungible_states" constraintName="vault_fungible_states_pkey"/>
+        <dropPrimaryKey tableName="vault_linear_states" constraintName="vault_linear_states_pkey"/>
+        <dropPrimaryKey tableName="vault_states" constraintName="vault_states_pkey"/>
+        <dropIndex indexName="transaction_id_index" tableName="vault_transaction_notes"/>
+
+        <dropNotNullConstraint tableName="vault_fungible_states" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="vault_fungible_states_parts" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="vault_linear_states" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="vault_linear_states_parts" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+        <dropNotNullConstraint tableName="vault_states" columnName="transaction_id" columnDataType="NVARCHAR(64)" />
+
+        <modifyDataType tableName="vault_fungible_states"
+                        columnName="transaction_id"
+                        newDataType="NVARCHAR(144)"/>
+        <modifyDataType tableName="vault_fungible_states_parts"
+                        columnName="transaction_id"
+                        newDataType="NVARCHAR(144)"/>
+        <modifyDataType tableName="vault_linear_states"
+                        columnName="transaction_id"
+                        newDataType="NVARCHAR(144)"/>
+        <modifyDataType tableName="vault_linear_states_parts"
+                        columnName="transaction_id"
+                        newDataType="NVARCHAR(144)"/>
+        <modifyDataType tableName="vault_states"
+                        columnName="transaction_id"
+                        newDataType="NVARCHAR(144)"/>
+        <modifyDataType tableName="vault_transaction_notes"
+                        columnName="transaction_id"
+                        newDataType="NVARCHAR(144)"/>
+        <modifyDataType tableName="state_party"
+                        columnName="transaction_id"
+                        newDataType="NVARCHAR(144)"/>
+
+        <addNotNullConstraint tableName="vault_fungible_states" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="vault_fungible_states_parts" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="vault_linear_states" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="vault_linear_states_parts" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+        <addNotNullConstraint tableName="vault_states" columnName="transaction_id" columnDataType="NVARCHAR(144)"/>
+
+        <addPrimaryKey tableName="vault_fungible_states" columnNames="transaction_id, output_index"
+                       constraintName="vault_fungible_states_pkey"/>
+        <addPrimaryKey tableName="vault_linear_states" columnNames="transaction_id, output_index"
+                       constraintName="vault_linear_states_pkey"/>
+        <addPrimaryKey tableName="vault_states" columnNames="transaction_id, output_index"
+                       constraintName="vault_states_pkey"/>
+        <createIndex indexName="transaction_id_index" tableName="vault_transaction_notes">
+            <column name="transaction_id"/>
+        </createIndex>
+    </changeSet>
+
+    <changeSet author="R3.Corda" id="vault_transaction_id_size_non-clustered_pk-1" onValidationFail="MARK_RAN">
+        <dropPrimaryKey tableName="vault_fungible_states" constraintName="vault_fungible_states_pkey"/>
+        <addPrimaryKey tableName="vault_fungible_states" columnNames="transaction_id, output_index"
+                       constraintName="vault_fungible_states_pkey" clustered="false"/>
+    </changeSet>
+
+    <changeSet author="R3.Corda" id="vault_transaction_id_size_non-clustered_pk-2" onValidationFail="MARK_RAN">
+        <dropPrimaryKey tableName="vault_linear_states" constraintName="vault_linear_states_pkey"/>
+        <addPrimaryKey tableName="vault_linear_states" columnNames="transaction_id, output_index"
+                       constraintName="vault_linear_states_pkey" clustered="false"/>
+    </changeSet>
+
+    <changeSet author="R3.Corda" id="vault_transaction_id_size_non-clustered_pk-3" onValidationFail="MARK_RAN">
+        <dropPrimaryKey tableName="vault_states" constraintName="vault_states_pkey"/>
+        <addPrimaryKey tableName="vault_states" columnNames="transaction_id, output_index"
+                       constraintName="vault_states_pkey" clustered="false"/>
+    </changeSet>
+
+    <changeSet author="R3.Corda" id="vault_transaction_id_size_2">
+        <addForeignKeyConstraint baseColumnNames="transaction_id,output_index"
+                                 baseTableName="vault_fungible_states_parts"
+                                 constraintName="FK__fung_st_parts__fung_st"
+                                 referencedColumnNames="transaction_id,output_index"
+                                 referencedTableName="vault_fungible_states"/>
+        <addForeignKeyConstraint baseColumnNames="transaction_id,output_index" baseTableName="vault_linear_states_parts"
+                                 constraintName="FK__lin_stat_parts__lin_stat"
+                                 referencedColumnNames="transaction_id,output_index"
+                                 referencedTableName="vault_linear_states"/>
+        <createView viewName="v_pkey_hash_ex_id_map">
+            select
+            state_party.public_key_hash,
+            state_party.transaction_id,
+            state_party.output_index,
+            pk_hash_to_ext_id_map.external_id
+            from state_party
+            join pk_hash_to_ext_id_map
+            on state_party.public_key_hash = pk_hash_to_ext_id_map.public_key_hash
+        </createView>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/node/src/test/kotlin/net/corda/node/utilities/PersistentMapTests.kt b/node/src/test/kotlin/net/corda/node/utilities/PersistentMapTests.kt
index f2d08608cf..3f15c6d298 100644
--- a/node/src/test/kotlin/net/corda/node/utilities/PersistentMapTests.kt
+++ b/node/src/test/kotlin/net/corda/node/utilities/PersistentMapTests.kt
@@ -47,6 +47,22 @@ class PersistentMapTests {
         }
     }
 
+    @Test(timeout=300_000)
+    fun `make sure persistence works with SHA-512`() {
+        val testHash = SecureHash.random(SecureHash.SHA2_512).toString()
+
+        database.transaction {
+            val map = createTestMap()
+            map[testHash] = "test"
+            assertEquals(map[testHash], "test")
+        }
+
+        database.transaction {
+            val reloadedMap = createTestMap()
+            assertEquals("test", reloadedMap[testHash])
+        }
+    }
+
     @Test(timeout=300_000)
 	fun `make sure persistence works using assignment operator`() {
         val testHash = SecureHash.randomSHA256().toString()