| """Database initialization.""" |
|
|
| from sqlalchemy import text |
| from src.db.postgres.connection import engine, Base |
| from src.db.postgres.models import ( |
| ChatMessage, |
| DatabaseClient, |
| Document, |
| MessageSource, |
| Room, |
| User, |
| ) |
|
|
|
|
| async def init_db(): |
| """Initialize database tables and required extensions.""" |
| async with engine.begin() as conn: |
| |
| |
| |
| await conn.execute(text("SELECT pg_advisory_xact_lock(1573678846307946496)")) |
| await conn.execute(text("CREATE EXTENSION IF NOT EXISTS vector")) |
|
|
| |
| await conn.run_sync(Base.metadata.create_all) |
|
|
| |
| await conn.execute(text( |
| "ALTER TABLE rooms ADD COLUMN IF NOT EXISTS status VARCHAR NOT NULL DEFAULT 'active'" |
| )) |
|
|
| |
| |
| |
| |
| await conn.execute(text(""" |
| DO $$ |
| BEGIN |
| IF EXISTS ( |
| SELECT FROM pg_attribute a |
| JOIN pg_class c ON c.oid = a.attrelid |
| WHERE c.relname = 'langchain_pg_embedding' |
| AND a.attname = 'embedding' |
| AND a.atttypmod > 0 |
| ) THEN |
| CREATE INDEX IF NOT EXISTS idx_langchain_pg_embedding_hnsw |
| ON langchain_pg_embedding USING hnsw (embedding vector_cosine_ops); |
| END IF; |
| END $$ |
| """)) |
|
|
| |
| |
| await conn.execute(text(""" |
| DO $$ |
| BEGIN |
| IF EXISTS ( |
| SELECT FROM information_schema.tables |
| WHERE table_name = 'langchain_pg_embedding' |
| ) THEN |
| CREATE INDEX IF NOT EXISTS idx_langchain_pg_embedding_fts |
| ON langchain_pg_embedding USING GIN (to_tsvector('english', document)); |
| END IF; |
| END $$ |
| """)) |
|
|