CREATE EXTENSION IF NOT EXISTS pg_trgm; UPDATE users SET phone = '0' || LPAD(id::text, 19, '0') WHERE phone IS NULL; ALTER TABLE users ALTER COLUMN email DROP NOT NULL, ALTER COLUMN phone SET NOT NULL, ALTER COLUMN name DROP NOT NULL; DROP INDEX IF EXISTS uk_users_email_active; CREATE UNIQUE INDEX uk_users_email_active ON users(email) WHERE email IS NOT NULL AND deleted_at IS NULL; CREATE UNIQUE INDEX IF NOT EXISTS uk_users_phone_active ON users(phone) WHERE deleted_at IS NULL; CREATE INDEX IF NOT EXISTS idx_users_status_created_at ON users(status, created_at DESC) WHERE deleted_at IS NULL; CREATE INDEX IF NOT EXISTS idx_users_email_trgm_active ON users USING GIN (email gin_trgm_ops) WHERE email IS NOT NULL AND deleted_at IS NULL; CREATE INDEX IF NOT EXISTS idx_users_phone_trgm_active ON users USING GIN (phone gin_trgm_ops) WHERE deleted_at IS NULL; CREATE INDEX IF NOT EXISTS idx_users_name_trgm_active ON users USING GIN (name gin_trgm_ops) WHERE name IS NOT NULL AND deleted_at IS NULL;