Skip to content

index-concurrently

CREATE INDEX without CONCURRENTLY — locks the table against writes.

Why

Building an index normally blocks writes to an existing PostgreSQL table for the duration of the build.

Fix

Use CREATE INDEX CONCURRENTLY in a nontransactional migration.

Examples

Before — flagged Blocking index build on an existing table
migrations/002_email_index.sql
CREATE INDEX users_email_idx ON users (email);
After — preferred Concurrent index build
migrations/002_email_index.sql
CREATE INDEX CONCURRENTLY users_email_idx ON users (email);
Before — flagged Executable dollar-quoted migration SQL remains checked
supabase/migrations/001_body.sql
DO $$ BEGIN CREATE INDEX orders_idx ON orders(id); END $$;
After — preferred SQL keywords inside scalar dollar data are not executed
supabase/migrations/001_data.sql
SELECT
$data$CREATE INDEX orders_idx ON orders(id);$data$;