diff --git a/Reference Data/python_project/scripts/dump_views.py b/Reference Data/python_project/scripts/dump_views.py new file mode 100644 index 0000000..50c1071 --- /dev/null +++ b/Reference Data/python_project/scripts/dump_views.py @@ -0,0 +1,47 @@ +import sys +from pathlib import Path + +# Add parent directory to Python path so we can import helpers +parent_dir = Path(__file__).parent.parent +sys.path.insert(0, str(parent_dir)) + +from helpers.config import get_db_connection + +# Output folder: ITSA/Database Backups/SQL Views/ +ITSA_ROOT = Path(__file__).parent.parent.parent.parent +OUTPUT_DIR = ITSA_ROOT / "Database Backups" / "SQL Views" + + +def dump_views(): + OUTPUT_DIR.mkdir(parents=True, exist_ok=True) + + conn = get_db_connection() + cur = conn.cursor() + + # Fetch all user-defined views (exclude system schemas) + cur.execute(""" + SELECT schemaname, viewname, definition + FROM pg_views + WHERE schemaname NOT IN ('pg_catalog', 'information_schema') + ORDER BY schemaname, viewname + """) + + views = cur.fetchall() + print(f"Found {len(views)} views\n") + + for schema, view_name, definition in views: + sql = f"CREATE OR REPLACE VIEW {schema}.{view_name} AS\n{definition.rstrip()};\n" + + filename = f"{schema}.{view_name}.sql" if schema != "public" else f"{view_name}.sql" + filepath = OUTPUT_DIR / filename + + filepath.write_text(sql, encoding="utf-8") + print(f" Dumped: {filename}") + + cur.close() + conn.close() + print(f"\nDone — {len(views)} views saved to:\n {OUTPUT_DIR}") + + +if __name__ == "__main__": + dump_views()