29 lines
952 B
Python
29 lines
952 B
Python
import asyncio
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import asyncpg
|
|
|
|
|
|
async def main() -> None:
|
|
root = Path(__file__).resolve().parents[1]
|
|
conn = await asyncpg.connect(os.environ["DATABASE_URL"])
|
|
try:
|
|
await conn.execute(
|
|
"CREATE TABLE IF NOT EXISTS schema_migrations (version TEXT PRIMARY KEY, applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW())"
|
|
)
|
|
for path in sorted((root / "db" / "migrations").glob("*.sql")):
|
|
exists = await conn.fetchval("SELECT 1 FROM schema_migrations WHERE version=$1", path.name)
|
|
if exists:
|
|
continue
|
|
async with conn.transaction():
|
|
await conn.execute(path.read_text(encoding="utf-8"))
|
|
await conn.execute("INSERT INTO schema_migrations(version) VALUES($1)", path.name)
|
|
print(f"applied {path.name}")
|
|
finally:
|
|
await conn.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|