database.ts•1.39 kB
import { DataSource } from 'typeorm';
import { Feed } from '../entities/Feed';
import { Article } from '../entities/Article';
import dotenv from 'dotenv';
// 确保环境变量已加载
dotenv.config();
// 创建数据库连接
export const AppDataSource = new DataSource({
type: 'postgres',
host: process.env.DB_HOST || 'localhost',
port: parseInt(process.env.DB_PORT || '5433'),
username: process.env.DB_USER || process.env.DB_USERNAME || 'mcp_user',
password: process.env.DB_PASSWORD || '123456',
database: process.env.DB_NAME || process.env.DB_DATABASE || 'mcp_rss',
entities: [Feed, Article],
synchronize: true,
logging: false
});
// 初始化数据库连接
export async function initDatabase(): Promise<void> {
try {
// Initialize TypeORM connection
await AppDataSource.initialize();
// Enable pgvector extension
await AppDataSource.query('CREATE EXTENSION IF NOT EXISTS vector');
// Convert embedding column to vector type if it exists as text
await AppDataSource.query(`
ALTER TABLE article
ALTER COLUMN embedding TYPE vector(1536)
USING embedding::vector
`).catch(() => {
// If column doesn't exist or already vector type, ignore error
});
// console.log('Database connection initialized');
} catch (error) {
console.error('Database connection failed:', error);
process.exit(1);
}
};