Let a super admin read the database from the app
A new super admin settings page, /admin/settings/database, lists every table with its record count and size, and one page of the open table's records newest key first. Values are cut inside SQL (400 characters, with a flag saying so) and a record opens whole in a modal, so a table of long texts reads without shipping it all. A search matches every column's text, word by word or as a phrase, which is the one thing that also works on a virtual table. Nothing in it writes: the catalog, the records and the single record are all reads, GET only.
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* How many bytes each table takes on disk. `dbstat` reports pages per
|
||||
* b-tree; an index's pages are named after the index (`autoindex` or the
|
||||
* schema's own), so the join puts them back under the table they belong
|
||||
* to. A table with no pages yet has no row here.
|
||||
*/
|
||||
export default function buildTableSizesSql(): string {
|
||||
return `SELECT
|
||||
COALESCE(i.tbl_name, d.name) AS table_name,
|
||||
SUM(d.pgsize) AS bytes
|
||||
FROM dbstat AS d
|
||||
LEFT JOIN sqlite_master AS i ON i.type = 'index' AND i.name = d.name
|
||||
GROUP BY COALESCE(i.tbl_name, d.name)`;
|
||||
}
|
||||
|
||||
export type TableSizeRow = {
|
||||
table_name: string;
|
||||
bytes: number;
|
||||
};
|
||||
Reference in New Issue
Block a user