{% extends "base.html" %} {% block title %}Voxint — database{% endblock %} {% block body %} {% from "settings/_tab_strip.html" import settings_tabs with context %} {{ settings_tabs("database") }} {# Console 2.0 P6 database sub-page (issue #161): size, per-table row estimates, and the retention/GC settings. Counts are estimates from pg_stat_user_tables, not live COUNT(*), and every query is fail-soft: a down or unmigrated database renders an honest "could not read" state instead of an error. #}

Database

Size

{% if database.available %}

Total database size: {{ (database.size_bytes / 1048576) | round(1) }} MiB ({{ database.size_bytes }} bytes)

{% if database.tables %}

Largest tables

Estimated live rows, largest first. Estimates come from Postgres statistics and can lag recent writes.

{% for t in database.tables %} {% endfor %}
TableEstimated rows
{{ t.name }}{{ t.estimated_rows }}
{% else %}

No table statistics reported yet.

{% endif %} {% else %}

Could not read the database size right now. The database may be down or not yet migrated.

{% endif %}

Retention and cleanup

Media retention reclaims only the large normalized-audio intermediate for old finished runs; source media, transcripts, and the adjudication history are always kept. These are the values the running app booted with; set them in your .env (keys MEDIA_RETENTION_ENABLED, MEDIA_RETENTION_SECONDS, GC_SWEEP_SECONDS, GC_BATCH_LIMIT) and restart Voxint to change them.

{% for r in database.retention %} {% endfor %}
{{ r.label }}{{ r.value }}

Backups

Back up your data regularly. If you installed with the native launcher, run voxint-native.sh backup to create a timestamped database dump. Otherwise, stop Voxint (or ensure the database is quiet) and use pg_dump to copy your Postgres data. Keep backups somewhere off this machine.

{% endblock %}