Files
SkyArtShop/backend/check-db-status.js

111 lines
3.6 KiB
JavaScript
Raw Normal View History

2026-01-04 17:52:37 -06:00
#!/usr/bin/env node
const { pool, query } = require("./config/database");
async function checkDatabase() {
console.log("🔍 Checking Database Status...\n");
try {
// 1. Check connection
console.log("1⃣ Testing Connection...");
const connResult = await query(
"SELECT NOW() as time, current_database() as db"
);
console.log(`✅ Connected to: ${connResult.rows[0].db}`);
console.log(`⏰ Server time: ${connResult.rows[0].time}\n`);
// 2. List all tables
console.log("2⃣ Listing Tables...");
const tablesResult = await query(`
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY tablename
`);
console.log(`📋 Tables (${tablesResult.rows.length}):`);
tablesResult.rows.forEach((row) => console.log(` - ${row.tablename}`));
console.log();
// 3. Check row counts
console.log("3⃣ Checking Row Counts...");
const countResult = await query(`
SELECT
(SELECT COUNT(*) FROM products) as products,
(SELECT COUNT(*) FROM product_images) as product_images,
(SELECT COUNT(*) FROM portfolioprojects) as portfolioprojects,
(SELECT COUNT(*) FROM blogposts) as blogposts,
(SELECT COUNT(*) FROM pages) as pages,
(SELECT COUNT(*) FROM adminusers) as adminusers,
(SELECT COUNT(*) FROM uploads) as uploads,
(SELECT COUNT(*) FROM media_folders) as media_folders,
(SELECT COUNT(*) FROM site_settings) as site_settings
`);
console.log("📊 Row counts:");
Object.entries(countResult.rows[0]).forEach(([table, count]) => {
console.log(` ${table.padEnd(20)}: ${count}`);
});
console.log();
// 4. Check for missing columns
console.log("4⃣ Checking Product Columns...");
const productCols = await query(`
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'products'
ORDER BY ordinal_position
`);
console.log(`📝 Products table has ${productCols.rows.length} columns`);
// 5. Check indexes
console.log("\n5⃣ Checking Indexes...");
const indexResult = await query(`
SELECT
tablename,
COUNT(*) as index_count
FROM pg_indexes
WHERE schemaname = 'public'
GROUP BY tablename
ORDER BY tablename
`);
console.log("🔍 Index counts:");
indexResult.rows.forEach((row) => {
console.log(` ${row.tablename.padEnd(25)}: ${row.index_count} indexes`);
});
console.log();
// 6. Check foreign keys
console.log("6⃣ Checking Foreign Keys...");
const fkResult = await query(`
SELECT
tc.table_name,
kcu.column_name,
ccu.table_name AS foreign_table,
rc.delete_rule
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
JOIN information_schema.referential_constraints AS rc
ON tc.constraint_name = rc.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY'
AND tc.table_schema = 'public'
ORDER BY tc.table_name
`);
console.log(`🔗 Foreign keys (${fkResult.rows.length}):`);
fkResult.rows.forEach((row) => {
console.log(
` ${row.table_name}.${row.column_name}${row.foreign_table} (${row.delete_rule})`
);
});
console.log();
console.log("✅ Database check complete!");
} catch (error) {
console.error("❌ Error:", error.message);
} finally {
await pool.end();
}
}
checkDatabase();