31 lines
1.2 KiB
PL/PgSQL
31 lines
1.2 KiB
PL/PgSQL
-- Включение расширений 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(); |