-- Включение расширений PostgreSQL CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pg_trgm"; -- для поиска по шаблону CREATE EXTENSION IF NOT EXISTS "btree_gin"; -- для составных индексов -- Создание кастомных индексов для JSONB CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_submissions_email ON submissions ((data->>'email')) WHERE data ? 'email'; -- Функция для валидации JSONB схемы CREATE OR REPLACE FUNCTION validate_submission_data() RETURNS trigger AS $$ BEGIN -- Проверяем, что data не пустой IF NEW.data IS NULL OR NEW.data = '{}'::jsonb THEN RAISE EXCEPTION 'Submission data cannot be empty'; END IF; -- Проверяем, что все обязательные поля присутствуют IF NEW.form_id IS NOT NULL THEN -- Дополнительная валидация через триггер END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER validate_submission BEFORE INSERT OR UPDATE ON submissions FOR EACH ROW EXECUTE FUNCTION validate_submission_data();