---
# System prepended metadata

title: Migrations

---

# Migrations
## What are database migrations used for?
The database migrations are used for migrating data from a source database to a target database, and migrating can also help when needing to upgrade to a later database version. Both the source and target database use the PostgreSQL database system, but it is possible to use a different system between the two databases.

## db-migrate node module
The db-migrate module is a migration framework for implementing database migrations. It offers commands and access to multiple APIs for achieving a full migration implementation. 
```
npm i db-migrate
```
The PostgreSQL driver must be installed along with db-migrate in order to make the database connection.
```
npm i db-migrate-pg
```

## Commands

### up
Executes all the "up" migrations that are located in the migrations directory.

Example of an "up" migration: 
```
exports.up = function(db) {
  return null;
};
```

### down
Executes the "down" migrations that are located in the migrations directory. By default it only executes the last executed migration. To execute a specific "down" migration the "down" command followed by the migration name can be used.

Example of a "down" migration:
```
exports.down = function(db) {
  return null;
};
```

### reset
Executes *all* the "down" migrations inside the first scope.

### create 
The create command creates a migration template where a correctly formatted migration file and some boilerplate code are provided.

### db:create
The db:create command creates a database inside PostgreSQL or whichever database system is being used.

### db:drop
The db:drop command drops a database inside PostgreSQL or whichever database system is being used.

## Migration API for SQL

### db.createTable
Creates a new database table with the specified columns.

### db.dropTable
Drops a database table.

## Migration Files

### add-settings.js
**up:** Executes the db.createTable to create a "settings" table.

Below is a list of settings attributes:
* key
* value

**down:** Executes the db.dropTable to drop the "settings" table.

### add-connections.js
**up:** Executes the db.createTable to create a "connections" table. 

Below is a list of connections attributes:
* connection_id
* state
* my_did
* alias
* request_id
* invitation_key
* invitation_mode
* invitation_url
* invitation
* accept
* initiator
* their_role
* their_did
* their_label
* routing_state
* inbound_connection_id
* error_msg
* created_at
* updated_at

**down:** Executes the db.dropTable to drop the "connections" table.

### add-contacts.js
**up:** Executes the db.createTable to create a "contacts" table.

Below is a list of contacts attributes:
* contact_id
* label
* created_at
* updated_at
* meta_data

**down:** Executes the db.dropTable to drop the "contacts" table.

### add-connections-to-contacts.js
**up:** Executes the db.createTable to create a "connections_to_contacts" table.

Below is a list of connections_to_contacts attributes.
* connection_id
* contact_id

**down:** Executes the db.dropTable to drop the "connections_to_contacts" table.

### add-schemas.js 
**up:** Executes the db.creatTable to create a "schemas" table. 

Below is a list of schemas attributes:
* schema_id
* name
* version
* protocol
* sequence_number
* origination
* attribute_names

**down:** Executes the db.dropTable to drop the "schemas" table.

### add-credential-definitions.js
**up:** Executes the db.createTable to create a "credential_definitions" table.

Below is a list of credential_definitions attributes:
* credential_definition_id
* tag
* schema_id
* type
* protocol
* value

**down:** Executes the db.dropTable to drop the "credential_definitions" table.

### add-held-credentials.js
**up:** Executes the db.createTable to create a "held_credentials" table.

Below is a list of held_credentials attributes:
- credential_id 
- schema_id
- credential_definition_id
- req_req
- revoc_reg_id
- witness
- signature
- signature_correctness_proof
- values

**down:** Executes the db.dropTable to drop the "held_credentials" table.

### add-issue-credentials.js
**up:** Executes the db.createTable to create a "issue_credentials" table.

Below is a list of issue_credentials attributes:
* credential_exchange_id
* credential_id
* credential
* raw_credential
* revocation_id
* connection_id
* state
* role
* initiator
* thread_id
* parent_thread_id
* schema_id
* credential_definition_id
* revoc_reg_id
* credential_proposal_dict
* credential_offer
* credential_offer_dict
* credential_request
* credential_request_metadata
* auto_issue
* auto_offer
* auto_remove
* error_msg
* trace
* created_at
* update_at

**down:** Executes the db.dropTable to drop the "issue_credentials" table.

### add-demographic-data.js

**up:** Executes the db.createTable to create a "demographic_data" table.

Below is a list of demographic_data attributes:
* contact_id
* email
* phone
* address
* created_at
* update_at

**down:** Executes the db.dropTable to drop the "demographic_data" table.

### add-users.js

**up:** Executes the db.createTable to create a "users" table.

Below is a list of users attributes:
* user_id
* username
* email
* password
* token
* created_at
* update_at

**down:** Executes the db.dropTable to drop the "users" table.

### add-roles.js

**up:** Executes the db.createTable to create a "roles" table.

Below is a list of roles attributes:
* role_id
* role_name

**down:** Executes the db.dropTable to drop the "roles" table.

### add-roles-to-users.js

**up:** Executes the db.createTable to create a "roles_to_users" table.

Below is a list of roles_to_users attributes:
* role_id
* user_id

**down:** Executes the db.dropTable to drop the "roles_to_users" table.

### roles-dafault-set.js

**up:** Executes three database commands to interact with the "roles" table. The first command executes the db.runSql for using a SQL query to delete from the table. The next two database commands execute db.insert for inserting values into the table columns.

Below is a list of values and their corresponding columns:
* First Database Insert
    * Value "admin" to column "role_name"
* Second Database Insert
    * Value "technician" to column "role_name"

**down:** Executes the db.runSql for using a SQL query to delete from the "roles" table.

### add-passports.js
**up:** Executes the db.createTable to create a "passports" table.

Below is a list of passports attributes:
* contact_id
* passport_number
* surname
* given_names
* sex
* date_of_birth
* place_of_birth
* nationality
* date_of_issue
* date_of_expiration
* type
* code
* authority
* photo
* created_at
* update_at

**down:** 
Executes the db.dropTable to drop the "passports" table.

### users-default-set.js

**up:** 
Executes two database commands to interact with the "users" table. The first command executes db.runSql for using a SQL query to delete from the table. The second command executes db.insert to insert values into the table columns.

Below is a list of values and their corresponding columns:
* Value "admin" to column "username"
* Value "admin@client.com" to column "email"
* Value `hashedPassword` to column "password"
* Value `castedTimeStamp` to column "created_at"
* Value `castedTimeStamp` to column "update_at"

**down:** Executes db.runSql for using a SQL query to delete from the "users" table.

### roles-to-users-set.js
**up:** Executes two database commands to interact with the "roles_to_users" table. The first command executes db.runSql for using a SQL query to delete from the table. The second command executes db.insert to insert values into the table columns.

Below is a list of values and their corresponding columns:
* Value "1" to column "role_id"
* Value "1" to column "user_id"

**down:** Executes db.runSql for using a SQL query to delete from the "roles_to_users" table.

### add-images.js
**up:** Executes db.createTable to create the "images" table.

Below is a list of images attributes:
* image_id
* name
* type
* image

**down:** Executes db.dropTable to drop the "images" table.

### settings-default-logo.js
**up:** Executes two database commands to interact with the "images" table. The first command executes db.runSql for using a SQL query to delete from the table. The second command executes db.insert to insert values into the table columns.

Below is a list of values and their corresponding columns:
* Value 'logo.png' to column "name"
* Value 'logo' to column "type"
* Value `base64` to column "image"

**down:** Executes db.runSql for using a SQL query to delete from the "images" table.

### settings-default-set.js
**up:** Executes four database commands to interact with the "settings" table. The first command executes db.runSql for using a SQL query to delete from the table. The next three database commands execute db.insert.

Below is a list of values and their corresponding columns:
* First Database Insert
    * Value "theme" to column "key"
    * Value `"{css properties}"` to column "value"
* Second Database Insert
    * Value "smtp" to column "key" 
    * Value `"{smtp object}"` to column "value"
* Third Database Insert
    * Value "organization" to column "key"
    * Value `"{companyName}"` to column "value"
 