64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
// migrate-sync.js
|
||
// Этот скрипт создает записи о миграциях в таблице pgmigrations без применения изменений
|
||
// Используется для синхронизации существующей базы с миграциями
|
||
|
||
require('dotenv').config();
|
||
const { Client } = require('pg');
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
// Подключение к базе данных из переменных окружения
|
||
const client = new Client({
|
||
host: process.env.DB_HOST || 'localhost',
|
||
port: parseInt(process.env.DB_PORT) || 5432,
|
||
database: process.env.DB_NAME || 'telegram_tinder_bot',
|
||
user: process.env.DB_USERNAME || 'postgres',
|
||
password: process.env.DB_PASSWORD
|
||
});
|
||
|
||
async function syncMigrations() {
|
||
try {
|
||
console.log('Подключение к базе данных...');
|
||
await client.connect();
|
||
|
||
// Создаем таблицу миграций, если её нет
|
||
await client.query(`
|
||
CREATE TABLE IF NOT EXISTS pgmigrations (
|
||
id SERIAL PRIMARY KEY,
|
||
name VARCHAR(255) NOT NULL,
|
||
run_on TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
|
||
)
|
||
`);
|
||
|
||
// Получаем список файлов миграций
|
||
const migrationsDir = path.join(__dirname, '../migrations');
|
||
const files = fs.readdirSync(migrationsDir)
|
||
.filter(file => file.endsWith('.js'))
|
||
.sort();
|
||
|
||
// Проверяем, какие миграции уже записаны
|
||
const { rows: existingMigrations } = await client.query('SELECT name FROM pgmigrations');
|
||
const existingNames = existingMigrations.map(m => m.name);
|
||
|
||
// Записываем новые миграции
|
||
for (const file of files) {
|
||
const migrationName = file.replace('.js', '');
|
||
if (!existingNames.includes(migrationName)) {
|
||
console.log(`Добавление записи о миграции: ${migrationName}`);
|
||
await client.query('INSERT INTO pgmigrations(name) VALUES($1)', [migrationName]);
|
||
} else {
|
||
console.log(`Миграция ${migrationName} уже записана`);
|
||
}
|
||
}
|
||
|
||
console.log('✅ Синхронизация миграций завершена успешно');
|
||
await client.end();
|
||
} catch (error) {
|
||
console.error('❌ Ошибка при синхронизации миграций:', error);
|
||
await client.end();
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
syncMigrations();
|