first
This commit is contained in:
31
scripts/init_db.sql
Normal file
31
scripts/init_db.sql
Normal file
@@ -0,0 +1,31 @@
|
||||
-- Включение расширений 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();
|
||||
Reference in New Issue
Block a user