sbdchd / squawk

🐘 linter for PostgreSQL, focused on migrations
https://squawkhq.com
GNU General Public License v3.0
541 stars 37 forks source link

Is require-concurrent-index-creation necessary straight after table creation? #349

Open maciej opened 1 month ago

maciej commented 1 month ago

Currently if even if an index is created directly after the table it refers to require-concurrent-index-creation will be triggered. Index creation on an empty table is virtually instantaneous and locking a table that is unlikely to receive writes until the migration script finishes seems like a non-issue to me.

Example migrate script:

create table if not exists customer
(
    email text
);

create unique index if not exists idx_custome_email on customer (email);

squawk output:

> squawk up.sql
up.sql:5:2: warning: require-concurrent-index-creation

   5 | create unique index if not exists idx_custome_email on customer (email);

  note: Creating an index blocks writes.
  help: Create the index CONCURRENTLY.

find detailed examples and solutions for each rule at https://squawkhq.com/docs/rules

I'd suggest relaxing the rule in cases where tables and their indexes are created in the same file.

sbdchd commented 1 month ago

Yeah if the table has just been created it won't matter since there's no data

chdsbd commented 1 month ago

If you wrap your migration in a transaction squawk won't warn:

begin;
create table if not exists customer
(
    email text
);

create unique index if not exists idx_custome_email on customer (email);
commit;