Files
SkyArtShop/backend/check-db-status.js
Local Server c1da8eff42 webupdatev1
2026-01-04 17:52:37 -06:00

111 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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();