@@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS sessions_archive (
55 username TEXT NOT NULL ,
66 ip TEXT ,
77 user_agent TEXT ,
8- status TEXT CHECK (status IN (' active' , ' expired' )) NOT NULL ,
8+ status TEXT CHECK (status IN (' active' , ' expired' , ' pending ' )) NOT NULL ,
99 created_at TIMESTAMP NOT NULL ,
1010 last_active_at TIMESTAMP NOT NULL ,
1111 expiry TIMESTAMP NOT NULL ,
@@ -21,106 +21,12 @@ CREATE TABLE IF NOT EXISTS transactions_archive (
2121 operation VARCHAR (20 ) NOT NULL CHECK (operation IN (' getfacl' , ' setfacl' )),
2222 target_path TEXT NOT NULL ,
2323 entries JSONB NOT NULL DEFAULT ' []' ::jsonb,
24- status VARCHAR ( 20 ) NOT NULL CHECK (status IN (' pending' , ' success' , ' failed' )),
24+ status TEXT CHECK (status IN (' pending' , ' success' , ' failed' )) NOT NULL ,
2525 error_msg TEXT ,
2626 output TEXT ,
2727 executed_by VARCHAR (255 ) NOT NULL ,
2828 duration_ms BIGINT ,
2929 created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
3030);
3131
32- -- * Indexing for Sessions * --
33-
34- -- Primary lookup indexes
35- CREATE INDEX IF NOT EXISTS idx_sessions_username ON sessions_archive(username);
36- CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions_archive(status);
37- CREATE INDEX IF NOT EXISTS idx_sessions_ip ON sessions_archive(ip);
38-
39- -- Time-based indexes for chronological queries
40- CREATE INDEX IF NOT EXISTS idx_sessions_created_at ON sessions_archive(created_at);
41- CREATE INDEX IF NOT EXISTS idx_sessions_last_active_at ON sessions_archive(last_active_at);
42- CREATE INDEX IF NOT EXISTS idx_sessions_expiry ON sessions_archive(expiry);
43- CREATE INDEX IF NOT EXISTS idx_sessions_archived_at ON sessions_archive(archived_at);
44-
45- -- Composite indexes for common query patterns
46- CREATE INDEX IF NOT EXISTS idx_sessions_username_status ON sessions_archive(username, status);
47- CREATE INDEX IF NOT EXISTS idx_sessions_username_created_at ON sessions_archive(username, created_at DESC );
48- CREATE INDEX IF NOT EXISTS idx_sessions_username_last_active ON sessions_archive(username, last_active_at DESC );
49- CREATE INDEX IF NOT EXISTS idx_sessions_status_created_at ON sessions_archive(status, created_at DESC );
50- CREATE INDEX IF NOT EXISTS idx_sessions_status_archived_at ON sessions_archive(status, archived_at DESC );
51-
52- -- Performance indexes for analytics and monitoring
53- CREATE INDEX IF NOT EXISTS idx_sessions_completed_count ON sessions_archive(completed_count) WHERE completed_count > 0 ;
54- CREATE INDEX IF NOT EXISTS idx_sessions_failed_count ON sessions_archive(failed_count) WHERE failed_count > 0 ;
55- CREATE INDEX IF NOT EXISTS idx_sessions_user_agent ON sessions_archive(user_agent) WHERE user_agent IS NOT NULL ;
56-
57- -- Specialized composite indexes for complex queries
58- CREATE INDEX IF NOT EXISTS idx_sessions_username_ip ON sessions_archive(username, ip);
59- CREATE INDEX IF NOT EXISTS idx_sessions_ip_created_at ON sessions_archive(ip, created_at DESC );
60- CREATE INDEX IF NOT EXISTS idx_sessions_expiry_status ON sessions_archive(expiry, status);
61-
62- -- Partial indexes for active sessions monitoring
63- CREATE INDEX IF NOT EXISTS idx_sessions_active_last_active ON sessions_archive(last_active_at DESC )
64- WHERE status = ' active' ;
65- CREATE INDEX IF NOT EXISTS idx_sessions_expired_recent ON sessions_archive(expiry DESC )
66- WHERE status = ' expired' ;
67-
68- -- Performance indexes for user activity analysis
69- CREATE INDEX IF NOT EXISTS idx_sessions_high_activity ON sessions_archive(username, completed_count DESC )
70- WHERE completed_count > 10 ;
71- CREATE INDEX IF NOT EXISTS idx_sessions_problematic ON sessions_archive(username, failed_count DESC )
72- WHERE failed_count > 5 ;
73-
74- -- Indexes for cleanup and maintenance operations
75- CREATE INDEX IF NOT EXISTS idx_sessions_old_archived ON sessions_archive(archived_at)
76- WHERE archived_at < NOW() - INTERVAL ' 90 days' ;
77- CREATE INDEX IF NOT EXISTS idx_sessions_old_expired ON sessions_archive(expiry)
78- WHERE status = ' expired' AND expiry < NOW() - INTERVAL ' 30 days' ;
79-
80- -- Security and audit indexes
81- CREATE INDEX IF NOT EXISTS idx_sessions_ip_count ON sessions_archive(ip, username, created_at)
82- WHERE ip IS NOT NULL ;
83- CREATE INDEX IF NOT EXISTS idx_sessions_concurrent_users ON sessions_archive(username, created_at, expiry)
84- WHERE status = ' active' ;
85-
86- -- * Indexing for Transactions * --
87-
88- -- Primary lookup indexes
89- CREATE INDEX IF NOT EXISTS idx_transactions_session_id ON transactions_archive(session_id);
90- CREATE INDEX IF NOT EXISTS idx_transactions_status ON transactions_archive(status);
91- CREATE INDEX IF NOT EXISTS idx_transactions_operation ON transactions_archive(operation);
92-
93- -- Time-based indexes for chronological queries
94- CREATE INDEX IF NOT EXISTS idx_transactions_timestamp ON transactions_archive(timestamp );
95- CREATE INDEX IF NOT EXISTS idx_transactions_created_at ON transactions_archive(created_at);
96-
97- -- Composite indexes for common query patterns
98- CREATE INDEX IF NOT EXISTS idx_transactions_session_status ON transactions_archive(session_id, status);
99- CREATE INDEX IF NOT EXISTS idx_transactions_session_operation ON transactions_archive(session_id, operation);
100- CREATE INDEX IF NOT EXISTS idx_transactions_session_timestamp ON transactions_archive(session_id, timestamp DESC );
101- CREATE INDEX IF NOT EXISTS idx_transactions_session_created_at ON transactions_archive(session_id, created_at DESC );
102-
103- -- Performance indexes for filtering and analytics
104- CREATE INDEX IF NOT EXISTS idx_transactions_target_path ON transactions_archive(target_path);
105- CREATE INDEX IF NOT EXISTS idx_transactions_executed_by ON transactions_archive(executed_by);
106- CREATE INDEX IF NOT EXISTS idx_transactions_duration ON transactions_archive(duration_ms) WHERE duration_ms IS NOT NULL ;
107-
108- -- Specialized composite indexes for complex queries
109- CREATE INDEX IF NOT EXISTS idx_transactions_session_path ON transactions_archive(session_id, target_path);
110- CREATE INDEX IF NOT EXISTS idx_transactions_status_timestamp ON transactions_archive(status, timestamp DESC );
111- CREATE INDEX IF NOT EXISTS idx_transactions_operation_timestamp ON transactions_archive(operation, timestamp DESC );
112-
113- -- JSONB indexes for ACL entries queries (if you need to query within entries)
114- CREATE INDEX IF NOT EXISTS idx_transactions_entries_gin ON transactions_archive USING GIN (entries);
115-
116- -- Partial indexes for active/recent data (performance optimization)
117- CREATE INDEX IF NOT EXISTS idx_transactions_recent_pending ON transactions_archive(session_id, timestamp DESC )
118- WHERE status = ' pending' ;
119- CREATE INDEX IF NOT EXISTS idx_transactions_recent_failed ON transactions_archive(session_id, timestamp DESC )
120- WHERE status = ' failed' ;
121-
122- -- Index for cleanup operations (if you periodically clean old records)
123- CREATE INDEX IF NOT EXISTS idx_transactions_cleanup ON transactions_archive(created_at)
124- WHERE created_at < NOW() - INTERVAL ' 30 days' ;
125-
126- CREATE INDEX idx_sessions_archive_time ON sessions_archive(archived_at DESC );
32+ /* add indexing for optimization */
0 commit comments