-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup_db.py
More file actions
54 lines (44 loc) · 1.5 KB
/
Copy pathsetup_db.py
File metadata and controls
54 lines (44 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import asyncio
from urllib.parse import urlparse
import asyncpg
from app.config import DATABASE_URL
def parse_database_settings():
parsed = urlparse(DATABASE_URL)
return {
"user": parsed.username or "postgres",
"password": parsed.password or "",
"host": parsed.hostname or "localhost",
"port": parsed.port or 5432,
"database": (parsed.path or "").lstrip("/") or "rag_chatbot",
}
async def setup():
settings = parse_database_settings()
admin_connection = await asyncpg.connect(
user=settings["user"],
password=settings["password"],
database="postgres",
host=settings["host"],
port=settings["port"],
)
try:
try:
await admin_connection.execute(f"CREATE DATABASE {settings['database']};")
print(f"Database {settings['database']} created.")
except asyncpg.exceptions.DuplicateDatabaseError:
print(f"Database {settings['database']} already exists.")
finally:
await admin_connection.close()
database_connection = await asyncpg.connect(
user=settings["user"],
password=settings["password"],
database=settings["database"],
host=settings["host"],
port=settings["port"],
)
try:
await database_connection.execute("CREATE EXTENSION IF NOT EXISTS vector;")
print("Vector extension is enabled.")
finally:
await database_connection.close()
if __name__ == "__main__":
asyncio.run(setup())