Support to clean all projects

This commit is contained in:
WQY\qiong
2023-03-22 19:24:50 +08:00
parent f2bd39a35a
commit d8dff0118b
3 changed files with 21 additions and 1 deletions

View File

@@ -6,6 +6,8 @@ from .connection import g_conn_dict as conn
_project_open_count: dict[str, int] = {}
_server_databases = ['template0', 'template1', 'postgres', 'project']
def list_project() -> list[str]:
ps = []
with pg.connect(conninfo="dbname=postgres host=127.0.0.1", autocommit=True) as conn:
@@ -33,6 +35,21 @@ def delete_project(name: str) -> None:
with conn.cursor() as cur:
cur.execute(f"drop database {name}")
def clean_project(excluded: list[str] = []) -> None:
projects = list_project()
with pg.connect(conninfo="dbname=postgres host=127.0.0.1", autocommit=True) as conn:
with conn.cursor(row_factory=dict_row) as cur:
row = cur.execute(f"select current_database()").fetchone()
if row != None:
current_db = row['current_database']
if current_db in projects:
projects.remove(current_db)
for project in projects:
if project in _server_databases or project in excluded:
continue
cur.execute(f"select pg_terminate_backend(pid) from pg_stat_activity where datname = '{project}'")
cur.execute(f"drop database {project}")
def open_project(name: str) -> None:
if name not in _project_open_count:
conn[name] = pg.connect(conninfo=f"dbname={name} host=127.0.0.1", autocommit=True)