/** * Test AlloyDB Connection * * Run with: npx tsx scripts/test-alloydb.ts */ import { getAlloyDbClient, checkAlloyDbHealth, executeQuery } from '../lib/db/alloydb'; async function testConnection() { console.log('๐Ÿงช Testing AlloyDB Connection\n'); console.log('='.repeat(50)); try { // Test 1: Health check console.log('\n1๏ธโƒฃ Health Check...'); const healthy = await checkAlloyDbHealth(); if (!healthy) { console.error('โŒ Health check failed!'); console.log('\nTroubleshooting:'); console.log(' 1. Is AlloyDB Auth Proxy running?'); console.log(' 2. Check environment variables in .env.local'); console.log(' 3. Verify service account has permissions'); process.exit(1); } console.log('โœ… Health check passed!'); // Test 2: PostgreSQL version console.log('\n2๏ธโƒฃ PostgreSQL Version...'); const versionResult = await executeQuery<{ version: string }>('SELECT version()'); console.log('โœ… Version:', versionResult.rows[0].version.split(',')[0]); // Test 3: Check extensions console.log('\n3๏ธโƒฃ Checking Extensions...'); const extResult = await executeQuery<{ extname: string }>( "SELECT extname FROM pg_extension WHERE extname IN ('vector', 'uuid-ossp')" ); const installedExts = extResult.rows.map(r => r.extname); if (installedExts.includes('vector')) { console.log('โœ… pgvector extension installed'); } else { console.log('โŒ pgvector extension NOT installed'); console.log(' Run: CREATE EXTENSION vector;'); } if (installedExts.includes('uuid-ossp')) { console.log('โœ… uuid-ossp extension installed'); } else { console.log('โŒ uuid-ossp extension NOT installed'); console.log(' Run: CREATE EXTENSION "uuid-ossp";'); } // Test 4: Check for knowledge_chunks table console.log('\n4๏ธโƒฃ Checking Tables...'); const tableResult = await executeQuery<{ table_name: string }>( `SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'knowledge_chunks'` ); if (tableResult.rows.length > 0) { console.log('โœ… knowledge_chunks table exists'); // Check indexes const indexResult = await executeQuery<{ indexname: string }>( `SELECT indexname FROM pg_indexes WHERE tablename = 'knowledge_chunks'` ); console.log(`โœ… ${indexResult.rows.length} indexes created:`); indexResult.rows.forEach(row => { console.log(` - ${row.indexname}`); }); // Count chunks const countResult = await executeQuery<{ count: string }>( 'SELECT COUNT(*) as count FROM knowledge_chunks' ); const count = parseInt(countResult.rows[0].count, 10); console.log(`โœ… Total chunks: ${count}`); } else { console.log('โš ๏ธ knowledge_chunks table NOT found'); console.log(' Run the schema file:'); console.log(' psql "host=127.0.0.1 port=5432 dbname=vibn user=YOUR_SA" \\'); console.log(' -f lib/db/knowledge-chunks-schema.sql'); } // Test 5: Test vector operations (if table exists and vector extension installed) if (tableResult.rows.length > 0 && installedExts.includes('vector')) { console.log('\n5๏ธโƒฃ Testing Vector Operations...'); try { // Create a test embedding const testEmbedding = Array.from({ length: 768 }, () => Math.random()); // Test vector similarity query (should not error even with empty table) await executeQuery( `SELECT id FROM knowledge_chunks ORDER BY embedding <=> $1::vector LIMIT 1`, [JSON.stringify(testEmbedding)] ); console.log('โœ… Vector similarity queries working!'); } catch (error) { console.log('โŒ Vector operations failed:', error); } } console.log('\n' + '='.repeat(50)); console.log('๐ŸŽ‰ AlloyDB is ready to use!'); console.log('='.repeat(50)); console.log('\nNext steps:'); console.log(' 1. Start your app: npm run dev'); console.log(' 2. Import a knowledge item to test chunking'); console.log(' 3. Send a chat message to test vector search'); console.log(''); process.exit(0); } catch (error) { console.error('\nโŒ Connection failed!'); console.error('Error:', error instanceof Error ? error.message : String(error)); console.log('\nTroubleshooting:'); console.log(' 1. Check .env.local has correct values'); console.log(' 2. Ensure AlloyDB Auth Proxy is running:'); console.log(' alloydb-auth-proxy --credentials-file=~/vibn-alloydb-key.json --port=5432 YOUR_INSTANCE_URI'); console.log(' 3. Verify service account permissions'); console.log(' 4. Check network connectivity'); console.log(''); process.exit(1); } } // Run test console.log('Starting AlloyDB connection test...\n'); console.log('Environment:'); console.log(' ALLOYDB_HOST:', process.env.ALLOYDB_HOST); console.log(' ALLOYDB_PORT:', process.env.ALLOYDB_PORT); console.log(' ALLOYDB_DATABASE:', process.env.ALLOYDB_DATABASE); console.log(' ALLOYDB_USER:', process.env.ALLOYDB_USER?.substring(0, 30) + '...'); console.log(''); testConnection();