Skip to content

Commit 51cb16f

Browse files
Updated schema for status
1 parent 5018f51 commit 51cb16f

File tree

2 files changed

+6
-99
lines changed

2 files changed

+6
-99
lines changed

db/queries/sessions.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
-- name: StoreSessionPQ :one
22
INSERT INTO sessions_archive (
33
id, username, ip, user_agent, status,
4-
created_at, last_active_at, expiry
4+
created_at, last_active_at, expiry,
5+
completed_count, failed_count
56
) VALUES (
6-
$1, $2, $3, $4, $5, $6, $7, $8
7+
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10
78
) RETURNING *;
89

910
-- name: GetSessionPQ :one

db/schema.sql

Lines changed: 3 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)