Files
swp-02-aufbereitung/check_db.py
T
2026-09-07 12:25:07 +02:00

66 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""Rauchtest fuer den Datenbankzugang.
Meldet sich an, liest den Bestand und zeigt, worauf Phase 2 aufsetzt.
Nur SELECT - dieses Skript schreibt nichts.
python3 check_db.py
"""
import sys
from db import verbindung
def main():
with verbindung() as conn:
nutzer, datenbank, version = conn.execute(
"select current_user, current_database(), version()"
).fetchone()
print(f"verbunden als {nutzer}@{datenbank}")
print(f" {version.split(' on ')[0]}")
erw = [r[0] for r in conn.execute("select extname from pg_extension order by 1")]
print(f" Extensions: {', '.join(erw)}")
for fehlend in ("vector",):
if fehlend not in erw:
print(f" fehlt noch fuer Phase 2: {fehlend}")
print("\nTabellen")
for name, in conn.execute(
"""select relname from pg_class c join pg_namespace n on n.oid = c.relnamespace
where c.relkind = 'r' and n.nspname = 'public' order by relname"""
):
anzahl = conn.execute(f'select count(*) from "{name}"').fetchone()[0]
print(f" {name:22} {anzahl:>8}")
von, bis, slots, gesamt = conn.execute(
"select min(slot), max(slot), count(distinct slot), count(*) from raw_items"
).fetchone()
if not gesamt:
print("\nraw_items ist leer - Phase 1 hat hier noch nichts abgelegt.")
return 0
print(f"\nraw_items: {gesamt} Items in {slots} Slots, {von} bis {bis}")
# Volltextabdeckung entscheidet, worauf Dubletten und Embeddings
# ueberhaupt rechnen koennen - sie ist je Quelle sehr verschieden.
print("\nje Quelle")
print(f" {'quelle':<16}{'items':>7}{'volltext':>10}{'teaser':>8}{'revidiert':>11}")
for quelle, n, volltext, teaser, revidiert in conn.execute(
"""select quelle, count(*), count(volltext), count(teaser),
count(*) filter (where revisionen > 0)
from raw_items group by 1 order by 2 desc"""
):
print(f" {quelle:<16}{n:>7}{volltext:>10}{teaser:>8}{revidiert:>11}")
print("\njuengste Items")
for id_, quelle, titel in conn.execute(
"select id, quelle, titel from raw_items order by id desc limit 5"
):
print(f" {id_:>7} {quelle:<14}{titel[:60]}")
return 0
if __name__ == "__main__":
sys.exit(main())