Migration Script menggunakan Umzug untuk Sequelize

Kustiawanto Halim
Auto Personalia
Published in
3 min readMar 7, 2017

--

Migration script adalah script yang digunakan untuk memudahkan kita dalam melakukan migrasi baik berupa environment atau hanya sekedar database. Dalam studi kasus PPL kali ini, kelompok kami hanya akan melakukan migrasi database. Walaupun terkesan sederhana tetapi migration script sangat bermanfaat dan bisa memudahkan pekerjaan.

Migration Script itu apa?

Secara sederhana, migration script dapat membantu kita untuk melakukan migrasi, bisa berupa perubahan versi aplikasi ataupun pindah server. Ilustrasi sederhana yang dapat menggambarkan migration script adalah pindah rumah. Pada saat pindah dari rumah, maka kita akan berkemas untuk memindahkan barang-barang yang ada di dalam rumah kita untuk dipindahkan ke rumah yang baru. Bayangkan proses memindahkan barang-barang yang ada, hingga pemasangan di rumah yang baru dilakukan oleh sebuah migration script sehingga mempermudah kita dalam pindah rumah.

Pada kenyataannya, migration script dalam database biasa digunakan untuk melakukan drop table, membuat table baru, menambahkan column baru pada table, atau melakukan split table. Migration script dapat dibuat secara manual oleh database programmer atau dibuat secara otomatis.

Sequelize

Sequelize adalah adalah ORM dengan tipe promise untuk Node.js yang dapat mendukung dialeg MySQL. Sequelize sangat mudah untuk digunakan dalam pengembangan aplikasi berbasis Node.js.

Model

Sequelize digunakan dalam pembuatan model. Berikut adalah contoh model menggunakan sequelize.

module.exports = function(sequelize, DataTypes) {
return sequelize.define("employees", {
email: DataTypes.STRING,
password: DataTypes.TEXT,
name: DataTypes.TEXT,
join_date: DataTypes.DATE,
place_of_birth: DataTypes.TEXT,
date_of_birth: DataTypes.DATEONLY,
is_admin: DataTypes.BOOLEAN,
salary: DataTypes.INTEGER,
retire_date: DataTypes.DATE
}, {
tableName: 'employees',
indexes: [{
unique: true,
fields: ['email']
}]
});
};

Dalam kasus ini, kita membuat sebuah module yang akan mengembalikan object Sequelize employees beserta datatype yang sesuai.

Umzug

Umzug adalah sebuah agnostic migration tool framework untuk Node.js. Secara spesifik tool ini tidak dikhususkan untuk database, tapi menyediakan API yang baik dan mendukung Sequelize.

Instalasi

Untuk melakukan instalasi umzug, dapat dilakukan sebagai berikut:

npm install --save umzug

Penggunaan

Secara umum, untuk menggunakan umzug yang harus dilakukan adalah sebagai berikut:

var Umzug = require('umzug');
var umzug = new Umzug({});
umzug.someMethod().then(function (result) {
// lakukan sesuatu dengan hasilnya
});

Dalam kasus migrasi, umzug digunakan untuk memanggil migration up sebagai berikut:

umzug.up().then(function (migrations) {
// "migrations" will be an Array with the names of the
// executed migrations.
});

Implementasi

Setelah membahas cara instalasi dan penggunaan umzug, maka kita akan membahas tahap implementasi. Berikut adalah potongan kode yang digunakan untuk menjalankan migrasi.

// ... define other variable here
var Umzug = require('umzug');
var umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: model.sequelize,
tableName: '_migration'
},
logging: false,
upName: 'up',
downName: 'down',
migrations: {
params: [model.sequelize.getQueryInterface(), Sequelize],
path: 'migrations',
pattern: /^.*\.js$/,
}
});
umzug.up().then(function(migrations, err) {
console.log(migrations);
app.listen(3000, function() {
console.log('listening on port 3000');
});
});

Dalam kasus ini, model adalah seluruh file yang menjadi model dan disimpan dalam folder models. Seluruh file migration akan disimpan dalam folder migrations. Perintah umzug.up() akan menjalankan migrasi yang ada, setelah selesai melaksanakan migrasi akan menjalankan server (app) pada port 3000.

Berikut adalah salah satu contoh module migrasi untuk melakukan drop table.

module.exports = {
up: function (QueryInterface, Sequelize) {
return QueryInterface.dropAllTables();
},
down: function (QueryInterface, Sequelize) {}
};

Berikut adalah salah satu contoh module migrasi untuk membuat table employees.

module.exports = {
up: function (QueryInterface, Sequelize) {
return QueryInterface.createTable("employees", {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
email: {
type: Sequelize.STRING,
unique: true,
allowNull: false
},
password: {
type: Sequelize.STRING,
allowNull: false
},
name: {
type: Sequelize.STRING,
allowNull: false
},
join_date: {
type: Sequelize.DATE,
allowNull: false
},
place_of_birth: Sequelize.STRING,
date_of_birth: {
type: Sequelize.DATEONLY,
allowNull: false
},
is_admin: {
type: Sequelize.BOOLEAN,
allowNull: false
},
salary: {
type: Sequelize.INTEGER,
allowNull: false
},
retire_date: Sequelize.DATE
}, {});
},
down: function (QueryInterface) {
return QueryInterface.dropTable(tableName);
}
};

Kesimpulan

Dalam pembuatan migration script sebagai bagian dari provisioning script dalam tugas PPL ini, saya sangat menyadari betapa penting dan bermanfaatnya penggunaaan migration script dalam memudahkan pekerjaan kita apabila melakukan migrasi aplikasi.

--

--

Kustiawanto Halim
Auto Personalia

Mobile Apps Developer (Android, iOS, Flutter) | IoT enthusiast