58 lines
1.5 KiB
PL/PgSQL
58 lines
1.5 KiB
PL/PgSQL
begin;
|
|
|
|
create extension "basejump-supabase_test_helpers" version '0.0.6';
|
|
|
|
select
|
|
no_plan();
|
|
|
|
CREATE OR REPLACE FUNCTION check_schema_conditions()
|
|
RETURNS void AS
|
|
$$
|
|
DECLARE
|
|
_table RECORD;
|
|
_column RECORD;
|
|
columnCheckCount INTEGER;
|
|
BEGIN
|
|
FOR _table IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public')
|
|
LOOP
|
|
-- 1. Check if every table has RLS enabled
|
|
IF (
|
|
SELECT relrowsecurity FROM pg_class
|
|
INNER JOIN pg_namespace n ON n.oid = pg_class.relnamespace
|
|
WHERE n.nspname = 'public' AND relname = _table.tablename
|
|
) IS FALSE THEN
|
|
RAISE EXCEPTION 'Table "%" does not have RLS enabled.', _table.tablename;
|
|
END IF;
|
|
|
|
-- 2. Check that every text column in the current table has a constraint
|
|
FOR _column IN (SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = _table.tablename AND data_type = 'text')
|
|
LOOP
|
|
SELECT COUNT(*)
|
|
INTO columnCheckCount
|
|
FROM information_schema.constraint_column_usage
|
|
WHERE table_schema = 'public' AND table_name = _table.tablename AND column_name = _column.column_name;
|
|
|
|
IF columnCheckCount = 0 THEN
|
|
RAISE NOTICE 'Text column "%.%" does not have a constraint
|
|
.',
|
|
_table.tablename, _column.column_name;
|
|
END IF;
|
|
END LOOP;
|
|
END LOOP;
|
|
|
|
RAISE NOTICE 'Schema check completed.';
|
|
END
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
select lives_ok($$
|
|
select
|
|
check_schema_conditions();
|
|
$$, 'check_schema_conditions()');
|
|
|
|
select
|
|
*
|
|
from
|
|
finish();
|
|
|
|
rollback;
|