fix(db-tools): resolve REINDEX transaction error by executing directly via pg client, and dynamically support all database tables in integrity dashboard
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
-- Update check_database_integrity to check all tables
|
||||
CREATE OR REPLACE FUNCTION public.check_database_integrity()
|
||||
RETURNS jsonb
|
||||
SECURITY DEFINER
|
||||
AS $$
|
||||
DECLARE
|
||||
tables_to_check text[] := ARRAY[
|
||||
'users',
|
||||
'settings',
|
||||
'companies',
|
||||
'categories',
|
||||
'products',
|
||||
'product_modules',
|
||||
'orders',
|
||||
'profiles',
|
||||
'end_customers',
|
||||
'licenses',
|
||||
'pos_modules'
|
||||
];
|
||||
t text;
|
||||
t_exists boolean;
|
||||
t_count bigint;
|
||||
tables_result jsonb := jsonb_build_object();
|
||||
fk_errors_count bigint := 0;
|
||||
result jsonb;
|
||||
BEGIN
|
||||
FOREACH t IN ARRAY tables_to_check LOOP
|
||||
SELECT EXISTS (
|
||||
SELECT 1 FROM pg_tables WHERE schemaname = 'public' AND tablename = t
|
||||
) INTO t_exists;
|
||||
|
||||
t_count := 0;
|
||||
IF t_exists THEN
|
||||
EXECUTE format('SELECT count(*) FROM public.%I', t) INTO t_count;
|
||||
END IF;
|
||||
|
||||
tables_result := tables_result || jsonb_build_object(t, jsonb_build_object('exists', t_exists, 'count', t_count));
|
||||
END LOOP;
|
||||
|
||||
-- Count foreign key errors (orphaned licenses)
|
||||
SELECT EXISTS (SELECT 1 FROM pg_tables WHERE schemaname = 'public' AND tablename = 'licenses') INTO t_exists;
|
||||
IF t_exists THEN
|
||||
SELECT EXISTS (SELECT 1 FROM pg_tables WHERE schemaname = 'public' AND tablename = 'end_customers') INTO t_exists;
|
||||
IF t_exists THEN
|
||||
EXECUTE '
|
||||
SELECT count(*)
|
||||
FROM public.licenses l
|
||||
LEFT JOIN public.end_customers c ON l.end_customer_id = c.id
|
||||
WHERE c.id IS NULL AND l.end_customer_id IS NOT NULL
|
||||
' INTO fk_errors_count;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
result := jsonb_build_object(
|
||||
'tables', tables_result,
|
||||
'errors', jsonb_build_object(
|
||||
'foreign_keys', fk_errors_count
|
||||
)
|
||||
);
|
||||
|
||||
RETURN result;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
Reference in New Issue
Block a user