BREAKING CHANGE: Complete database redesign Migrations: - Remove all 6.x.x and 7.0.0 migrations - Create single consolidated migration 20250101000000_consolidated_schema - Add Diesel initial setup migration Schema Optimizations: - All domain values use SMALLINT instead of VARCHAR/TEXT (2 bytes vs 20+ bytes) - Sharding infrastructure: shard_config, tenant_shard_map tables - All tables include tenant_id and shard_id for horizontal scaling - Proper indexing strategies for high-throughput queries - Foreign key constraints for data integrity - Updated_at triggers via diesel_manage_updated_at Tables (35 total): - Core: tenants, users, bots, bot_configuration, bot_channels - Sessions: user_sessions, message_history - Memory: bot_memories - Auto Tasks: auto_tasks, execution_plans, task_approvals, task_decisions - Safety: safety_audit_log, intent_classifications - Apps: generated_apps, designer_changes, designer_pending_changes - KB: kb_collections, kb_documents, session_kb_associations, kb_sources - Tools: tools, system_automations, pending_info - Analytics: usage_analytics, analytics_events - Tasks: tasks, task_comments - Accounts: connected_accounts, session_account_associations - Communication: whatsapp_numbers, clicks - Access: table_role_access, context_injections - Organizations: organizations, user_organizations Rust Schema: - Updated schema.rs to match new consolidated schema - All diesel table definitions with proper types - Foreign key relationships defined WARNING: This is a DESTRUCTIVE migration - drop existing database before applying
33 lines
1.1 KiB
PL/PgSQL
33 lines
1.1 KiB
PL/PgSQL
-- This file was automatically created by Diesel to setup helper functions
|
|
-- and other internal bookkeeping. This file is safe to edit, any future
|
|
-- temporary files will be placed in a different location.
|
|
|
|
-- Sets up a trigger for the given table to automatically set a column called
|
|
-- `updated_at` whenever the row is modified (unless `updated_at` was included
|
|
-- in the modified columns)
|
|
--
|
|
-- # Example
|
|
--
|
|
-- ```sql
|
|
-- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW());
|
|
--
|
|
-- SELECT diesel_manage_updated_at('users');
|
|
-- ```
|
|
CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$
|
|
BEGIN
|
|
EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s
|
|
FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl);
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$
|
|
BEGIN
|
|
IF (
|
|
NEW IS DISTINCT FROM OLD AND
|
|
NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at
|
|
) THEN
|
|
NEW.updated_at := current_timestamp;
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|