fix(0042_iam_tables.sql): Fix PostgreSQL partial unique constraint syntax
Issue: Table constraint with WHERE clause is invalid PostgreSQL syntax Error: 42601: syntax error at or near "WHERE" at position 1525 Solution: Move partial uniqueness to separate CREATE UNIQUE INDEX statement - Removed invalid WHERE clause from table UNIQUE() constraint - Created proper partial unique index with WHERE condition - PostgreSQL syntax now correct Syntax fix: ❌ UNIQUE(col1, col2) WHERE condition (invalid in table def) ✅ CREATE UNIQUE INDEX idx ON table(col1, col2) WHERE condition Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -108,10 +108,7 @@ CREATE TABLE IF NOT EXISTS public.role_assignment (
|
|||||||
|
|
||||||
-- Idempotency & correlation
|
-- Idempotency & correlation
|
||||||
correlation_id UUID UNIQUE NOT NULL DEFAULT gen_random_uuid(),
|
correlation_id UUID UNIQUE NOT NULL DEFAULT gen_random_uuid(),
|
||||||
checksum VARCHAR(64),
|
checksum VARCHAR(64)
|
||||||
|
|
||||||
-- Constraints: One role per identity (except temporary/special cases)
|
|
||||||
UNIQUE(identity_id, role_id) WHERE assignment_state NOT IN ('REVOKED', 'REJECTED')
|
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX idx_role_assignment_identity ON public.role_assignment(identity_id);
|
CREATE INDEX idx_role_assignment_identity ON public.role_assignment(identity_id);
|
||||||
@@ -119,6 +116,11 @@ CREATE INDEX idx_role_assignment_role ON public.role_assignment(role_id);
|
|||||||
CREATE INDEX idx_role_assignment_state ON public.role_assignment(assignment_state);
|
CREATE INDEX idx_role_assignment_state ON public.role_assignment(assignment_state);
|
||||||
CREATE INDEX idx_role_assignment_correlation ON public.role_assignment(correlation_id);
|
CREATE INDEX idx_role_assignment_correlation ON public.role_assignment(correlation_id);
|
||||||
|
|
||||||
|
-- Partial unique constraint: One active role per identity
|
||||||
|
CREATE UNIQUE INDEX idx_role_assignment_unique_active
|
||||||
|
ON public.role_assignment(identity_id, role_id)
|
||||||
|
WHERE assignment_state NOT IN ('REVOKED', 'REJECTED');
|
||||||
|
|
||||||
-- 4. PERMISSION TABLE (Granular Permissions)
|
-- 4. PERMISSION TABLE (Granular Permissions)
|
||||||
CREATE TABLE IF NOT EXISTS public.permission (
|
CREATE TABLE IF NOT EXISTS public.permission (
|
||||||
permission_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
permission_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
|||||||
Reference in New Issue
Block a user