On Thu, Aug 17, 2023 at 8:37 PM Stefan Knecht <knecht.ste...@gmail.com>
wrote:

> Hello
>
> Why does this happen?
>
> profile_aggregates=> create index concurrently foo_idx on agg (status,
> foots, created_ts);
>
>
> ^CCancel request sent
> ERROR:  canceling statement due to user request
> profile_aggregates=>
> profile_aggregates=>  create index concurrently foo_idx on agg (status,
> foots, created_ts);
> ERROR:  relation " foo_idx" already exists
>
> Are these operations not atomic ?
>
>
No, being atomic would interfere with doing things concurrently.  Per the
docs:

In a concurrent index build, the index is actually entered as an “invalid”
index into the system catalogs in one transaction, then two table scans
occur in two more transactions.
...
If a problem arises while scanning the table, such as a deadlock or a
uniqueness violation in a unique index, the CREATE INDEX command will fail
but leave behind an “invalid” index.

"Problem" includes you forcibly killing it while it is running.

https://www.postgresql.org/docs/current/sql-createindex.html

David J.

Reply via email to