New dump_views script
This commit is contained in:
47
Reference Data/python_project/scripts/dump_views.py
Normal file
47
Reference Data/python_project/scripts/dump_views.py
Normal file
@@ -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()
|
||||||
Reference in New Issue
Block a user