postgres-mcp-tools
Version:
PostgreSQL-based memory system with vector search capabilities for AI applications, including MCP integration for Claude
92 lines (70 loc) âĸ 3.03 kB
JavaScript
/**
* This script initializes the PostgreSQL database with the required schema and extensions.
* It reads the SQL initialization file and executes it against the PostgreSQL instance.
*/
import pg from 'pg';
import fs from 'fs';
import path from 'path';
import dotenv from 'dotenv';
import { fileURLToPath } from 'url';
// Get the directory name
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const rootDir = path.resolve(__dirname, '..');
// Load environment variables
dotenv.config({ path: path.join(rootDir, '.env') });
// PostgreSQL connection configuration
const pgConfig = {
user: process.env.POSTGRES_USER || 'memory_user',
host: process.env.POSTGRES_HOST || 'localhost',
database: process.env.POSTGRES_DB || 'memory_db',
password: process.env.POSTGRES_PASSWORD || 'change_me_in_production',
port: parseInt(process.env.POSTGRES_PORT || '5432', 10),
ssl: process.env.POSTGRES_SSL === 'true' ? { rejectUnauthorized: false } : false,
};
// Function to read and execute SQL initialization file
async function initializeDatabase() {
console.log('\x1b[36m%s\x1b[0m', 'đī¸ Initializing PostgreSQL database...');
try {
// Read SQL initialization file
const sqlFilePath = path.join(rootDir, 'init', '01-init.sql');
if (!fs.existsSync(sqlFilePath)) {
throw new Error(`SQL initialization file not found at ${sqlFilePath}`);
}
const sqlContent = fs.readFileSync(sqlFilePath, 'utf8');
// Connect to PostgreSQL
const client = new pg.Client(pgConfig);
await client.connect();
console.log('\x1b[32m%s\x1b[0m', 'â Connected to PostgreSQL');
// Execute SQL initialization
await client.query(sqlContent);
console.log('\x1b[32m%s\x1b[0m', 'â Executed SQL initialization scripts');
// Close connection
await client.end();
console.log('\x1b[32m%s\x1b[0m', 'â Database initialization completed successfully');
} catch (error) {
console.error('\x1b[31m%s\x1b[0m', `â Database initialization failed: ${error.message}`);
if (error.message.includes('role "memory_user" does not exist')) {
console.log('\x1b[33m%s\x1b[0m', 'âšī¸ Hint: You may need to create the PostgreSQL user first:');
console.log(' CREATE USER memory_user WITH PASSWORD \'your_password\';');
console.log(' ALTER USER memory_user WITH SUPERUSER;');
}
if (error.message.includes('database "memory_db" does not exist')) {
console.log('\x1b[33m%s\x1b[0m', 'âšī¸ Hint: You may need to create the database first:');
console.log(' CREATE DATABASE memory_db;');
console.log(' GRANT ALL PRIVILEGES ON DATABASE memory_db TO memory_user;');
}
process.exit(1);
}
}
// Main function
async function main() {
try {
await initializeDatabase();
} catch (error) {
console.error('\x1b[31m%s\x1b[0m', `â Unexpected error: ${error.message}`);
process.exit(1);
}
}
main();