143 lines
4.6 KiB
JavaScript
143 lines
4.6 KiB
JavaScript
/**
|
|
* Script pour vérifier la structure de la base de données
|
|
* Usage: node scripts/check-database.js
|
|
*/
|
|
import { pool } from '../db.js';
|
|
|
|
async function checkDatabase() {
|
|
try {
|
|
console.log('🔍 Vérification de la base de données...\n');
|
|
|
|
// 1. Vérifier la connexion
|
|
console.log('📡 Test de connexion...');
|
|
const connectionTest = await pool.query('SELECT NOW() as time, current_database() as database');
|
|
console.log('✅ Connecté à:', connectionTest.rows[0].database);
|
|
console.log('⏰ Heure serveur:', connectionTest.rows[0].time);
|
|
console.log('');
|
|
|
|
// 2. Lister toutes les tables
|
|
console.log('📋 Tables disponibles:');
|
|
const tablesQuery = `
|
|
SELECT table_name
|
|
FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
AND table_type = 'BASE TABLE'
|
|
ORDER BY table_name;
|
|
`;
|
|
const tables = await pool.query(tablesQuery);
|
|
|
|
if (tables.rows.length === 0) {
|
|
console.log('⚠️ Aucune table trouvée. Exécutez: npm run db:schema');
|
|
console.log('');
|
|
} else {
|
|
tables.rows.forEach((row, index) => {
|
|
console.log(` ${index + 1}. ${row.table_name}`);
|
|
});
|
|
console.log('');
|
|
|
|
// 3. Compter les enregistrements dans chaque table
|
|
console.log('📊 Nombre d\'enregistrements par table:');
|
|
for (const table of tables.rows) {
|
|
const countQuery = `SELECT COUNT(*) as count FROM ${table.table_name}`;
|
|
const count = await pool.query(countQuery);
|
|
console.log(` ${table.table_name.padEnd(20)} : ${count.rows[0].count} enregistrements`);
|
|
}
|
|
console.log('');
|
|
}
|
|
|
|
// 4. Vérifier les types enum
|
|
console.log('🏷️ Types ENUM disponibles:');
|
|
const enumsQuery = `
|
|
SELECT t.typname as enum_name,
|
|
array_agg(e.enumlabel ORDER BY e.enumsortorder) as values
|
|
FROM pg_type t
|
|
JOIN pg_enum e ON t.oid = e.enumtypid
|
|
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
|
|
WHERE n.nspname = 'public'
|
|
GROUP BY t.typname
|
|
ORDER BY t.typname;
|
|
`;
|
|
const enums = await pool.query(enumsQuery);
|
|
|
|
if (enums.rows.length > 0) {
|
|
enums.rows.forEach(row => {
|
|
console.log(` ${row.enum_name}: [${row.values.join(', ')}]`);
|
|
});
|
|
console.log('');
|
|
}
|
|
|
|
// 5. Vérifier les vues
|
|
console.log('👁️ Vues disponibles:');
|
|
const viewsQuery = `
|
|
SELECT table_name
|
|
FROM information_schema.views
|
|
WHERE table_schema = 'public'
|
|
ORDER BY table_name;
|
|
`;
|
|
const views = await pool.query(viewsQuery);
|
|
|
|
if (views.rows.length === 0) {
|
|
console.log(' Aucune vue trouvée');
|
|
console.log('');
|
|
} else {
|
|
views.rows.forEach((row, index) => {
|
|
console.log(` ${index + 1}. ${row.table_name}`);
|
|
});
|
|
console.log('');
|
|
}
|
|
|
|
// 6. Afficher la structure de chaque table
|
|
console.log('📐 Structure des tables:');
|
|
console.log('='.repeat(80));
|
|
|
|
for (const table of tables.rows) {
|
|
const columnsQuery = `
|
|
SELECT
|
|
column_name,
|
|
data_type,
|
|
character_maximum_length,
|
|
column_default,
|
|
is_nullable,
|
|
udt_name
|
|
FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = $1
|
|
ORDER BY ordinal_position;
|
|
`;
|
|
const columns = await pool.query(columnsQuery, [table.table_name]);
|
|
|
|
console.log(`\n📄 Table: ${table.table_name}`);
|
|
console.log('-'.repeat(80));
|
|
|
|
columns.rows.forEach(col => {
|
|
const type = col.udt_name === 'uuid' ? 'UUID' :
|
|
col.data_type === 'character varying' ? `VARCHAR(${col.character_maximum_length})` :
|
|
col.data_type === 'USER-DEFINED' ? col.udt_name :
|
|
col.data_type.toUpperCase();
|
|
|
|
const nullable = col.is_nullable === 'NO' ? 'NOT NULL' : 'NULL';
|
|
const defaultVal = col.column_default ? `DEFAULT ${col.column_default}` : '';
|
|
|
|
console.log(` • ${col.column_name.padEnd(25)} ${type.padEnd(20)} ${nullable.padEnd(10)} ${defaultVal}`);
|
|
});
|
|
}
|
|
|
|
console.log('\n' + '='.repeat(80));
|
|
console.log('\n✅ Vérification terminée!');
|
|
|
|
} catch (error) {
|
|
console.error('❌ Erreur:', error.message);
|
|
if (error.code === 'ECONNREFUSED') {
|
|
console.error('\n💡 La base de données n\'est pas accessible. Vérifiez:');
|
|
console.error(' 1. Que PostgreSQL est démarré');
|
|
console.error(' 2. Les paramètres de connexion dans .env');
|
|
console.error(' 3. Que le port 5433 est ouvert');
|
|
}
|
|
} finally {
|
|
await pool.end();
|
|
}
|
|
}
|
|
|
|
// Exécuter la vérification
|
|
checkDatabase();
|