JavaScript (Node.js) में डेटाबेस माइग्रेशन: टूल्स और व्यावहारिक गाइड
Node.js पर आधुनिक वेब एप्लिकेशन डेवलपमेंट में डेटाबेस के साथ काम करना आम बात है। जैसे-जैसे प्रोजेक्ट बढ़ता है, टेबल्स, इंडेक्स और रिलेशनशिप में बदलाव होना लाजमी है। सर्वर पर मैन्युअली SQL स्क्रिप्ट चलाना गड़बड़ी और एरर का रास्ता है। इस समस्या का हल है डेटाबेस माइग्रेशन (database migrations)। यह स्कीमा में बदलावों को वर्जन करने का एक तरीका है, जिससे डेवलपर्स की टीम सुरक्षित और समन्वित तरीके से डेटाबेस स्ट्रक्चर को अपडेट कर सकती है।
JavaScript इकोसिस्टम में माइग्रेशन के लिए कई परिपक्व टूल्स मौजूद हैं। आइए तीन प्रमुख तरीकों को लोकप्रिय लाइब्रेरीज़ के उदाहरणों के साथ समझते हैं।
1. Knex.js — सार्वभौमिक क्वेरी बिल्डर
Knex.js सिर्फ एक SQL-बिल्डर नहीं है, बल्कि माइग्रेशन और सीडिंग (टेस्ट डेटा भरने) के लिए एक पूर्ण टूल है। यह PostgreSQL, MySQL, SQLite और अन्य डेटाबेस को सपोर्ट करता है। इसका मुख्य फायदा यह है कि आप माइग्रेशन JavaScript में लिखते हैं, और Knex उन्हें आपके डेटाबेस के डायलेक्ट में बदल देता है।
इंस्टॉलेशन और सेटअप
npm install knex
npm install pg # PostgreSQL के लिए
कॉन्फ़िगरेशन फ़ाइल knexfile.js बनाएँ:
module.exports = {
development: {
client: 'pg',
connection: {
host: 'localhost',
user: 'user',
password: 'pass',
database: 'mydb'
},
migrations: {
directory: './migrations'
}
}
};
माइग्रेशन बनाना और चलाना
यूज़र्स टेबल के लिए माइग्रेशन बनाएँ:
npx knex migrate:make create_users_table
migrations फ़ोल्डर में टाइमस्टैम्प वाली फ़ाइल बनेगी। इसे एडिट करें:
exports.up = function(knex) {
return knex.schema.createTable('users', (table) => {
table.increments('id').primary();
table.string('username', 100).notNullable().unique();
table.string('email').notNullable();
table.timestamps(true, true); // created_at और updated_at
});
};
exports.down = function(knex) {
return knex.schema.dropTableIfExists('users');
};
माइग्रेशन लागू करें:
npx knex migrate:latest
पिछली माइग्रेशन वापस लें:
npx knex migrate:rollback
Knex में माइग्रेशन के अंदर शुद्ध SQL भी चलाया जा सकता है, अगर विशेष लॉजिक की ज़रूरत हो।
2. Sequelize — शक्तिशाली माइग्रेशन सिस्टम वाला ORM
Sequelize Node.js का लोकप्रिय ORM है, जो PostgreSQL, MySQL, MariaDB, SQLite और MSSQL को सपोर्ट करता है। इसका CLI माइग्रेशन जनरेट और मैनेज करने के लिए आसान कमांड प्रदान करता है, जो मॉडल्स के साथ गहराई से जुड़े होते हैं।
शुरुआत कैसे करें
npm install sequelize sequelize-cli pg
npx sequelize-cli init
एक कमांड से मॉडल और माइग्रेशन बनाएँ:
npx sequelize-cli model:generate --name User --attributes username:string,email:string
इससे दो फ़ाइलें बनेंगी: मॉडल models/user.js और migrations/ में माइग्रेशन। माइग्रेशन का उदाहरण:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
username: {
type: Sequelize.STRING(100),
allowNull: false,
unique: true
},
email: {
type: Sequelize.STRING,
allowNull: false
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
लागू करना और वापस लेना:
npx sequelize-cli db:migrate
npx sequelize-cli db:migrate:undo
3. TypeORM — TypeScript और JavaScript के लिए माइग्रेशन
TypeORM एक आधुनिक ORM है जो TypeScript और JavaScript दोनों को सपोर्ट करता है। यह डेकोरेटर-आधारित दृष्टिकोण प्रदान करता है और माइग्रेशन को बहुत सरल बनाता है।
सेटअप
npm install typeorm reflect-metadata pg
ormconfig.json फ़ाइल बनाएँ:
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "user",
"password": "pass",
"database": "mydb",
"synchronize": false,
"migrations": ["migrations/*.ts"]
}
माइग्रेशन बनाना
npx typeorm migration:create -n CreateUsersTable
माइग्रेशन फ़ाइल में कोड:
import {MigrationInterface, QueryRunner, Table} from "typeorm";
export class CreateUsersTable1234567890 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(new Table({
name: "users",
columns: [
{
name: "id",
type: "int",
isPrimary: true,
isGenerated: true,
generationStrategy: "increment"
},
{
name: "username",
type: "varchar",
length: "100",
isUnique: true
},
{
name: "email",
type: "varchar"
},
{
name: "createdAt",
type: "timestamp",
default: "now()"
},
{
name: "updatedAt",
type: "timestamp",
default: "now()"
}
]
}));
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable("users");
}
}
माइग्रेशन चलाएँ:
npx typeorm migration:run
वापस लें:
npx typeorm migration:revert
निष्कर्ष: कौन सा टूल चुनें?
तीनों टूल्स में से किसी एक का चुनाव आपकी ज़रूरतों पर निर्भर करता है। Knex.js हल्का और लचीला है, Sequelize ORM के साथ गहरा एकीकरण देता है, और TypeORM TypeScript प्रोजेक्ट्स के लिए सबसे उपयुक्त है। माइग्रेशन को अपनाकर आप अपने डेटाबेस स्कीमा को सुरक्षित, संस्करण-नियंत्रित और टीम के लिए सुलभ बना सकते हैं।