77 lines
2.8 KiB
JavaScript
77 lines
2.8 KiB
JavaScript
// Скрипт для обновления таблицы verification_codes
|
||
const { Pool } = require('pg');
|
||
require('dotenv').config();
|
||
|
||
// Создаем подключение к базе данных
|
||
const pool = new Pool({
|
||
host: process.env.POSTGRES_HOST || 'localhost',
|
||
port: process.env.POSTGRES_PORT || 5432,
|
||
database: process.env.POSTGRES_DB || 'dapp_business',
|
||
user: process.env.POSTGRES_USER || 'postgres',
|
||
password: process.env.POSTGRES_PASSWORD || 'postgres',
|
||
});
|
||
|
||
async function updateVerificationTable() {
|
||
try {
|
||
console.log('Начинаем обновление таблицы verification_codes...');
|
||
|
||
// Проверяем, существует ли таблица
|
||
const checkTableResult = await pool.query(`
|
||
SELECT EXISTS (
|
||
SELECT FROM information_schema.tables
|
||
WHERE table_schema = 'public'
|
||
AND table_name = 'verification_codes'
|
||
);
|
||
`);
|
||
|
||
const tableExists = checkTableResult.rows[0].exists;
|
||
|
||
if (!tableExists) {
|
||
console.log('Таблица verification_codes не существует. Пропускаем обновление.');
|
||
return;
|
||
}
|
||
|
||
// Проверяем, разрешает ли уже колонка null значения
|
||
const checkColumnResult = await pool.query(`
|
||
SELECT is_nullable
|
||
FROM information_schema.columns
|
||
WHERE table_schema = 'public'
|
||
AND table_name = 'verification_codes'
|
||
AND column_name = 'user_id';
|
||
`);
|
||
|
||
if (checkColumnResult.rows.length > 0 && checkColumnResult.rows[0].is_nullable === 'YES') {
|
||
console.log('Колонка user_id уже разрешает NULL значения. Пропускаем обновление.');
|
||
return;
|
||
}
|
||
|
||
// Начинаем транзакцию
|
||
await pool.query('BEGIN');
|
||
|
||
// Изменяем ограничение для поля user_id
|
||
await pool.query(`
|
||
ALTER TABLE verification_codes
|
||
ALTER COLUMN user_id DROP NOT NULL;
|
||
`);
|
||
|
||
// Добавляем комментарий к колонке
|
||
await pool.query(`
|
||
COMMENT ON COLUMN verification_codes.user_id IS 'ID пользователя (может быть NULL для временных кодов)';
|
||
`);
|
||
|
||
// Фиксируем транзакцию
|
||
await pool.query('COMMIT');
|
||
|
||
console.log('Таблица verification_codes успешно обновлена!');
|
||
} catch (error) {
|
||
// Откатываем транзакцию в случае ошибки
|
||
await pool.query('ROLLBACK');
|
||
console.error('Ошибка при обновлении таблицы verification_codes:', error);
|
||
} finally {
|
||
// Закрываем соединение с базой данных
|
||
await pool.end();
|
||
}
|
||
}
|
||
|
||
// Выполняем обновление
|
||
updateVerificationTable();
|