Tenho dificuldade em entender duas limitações do postgres quando se trata de criar índices e excluí-los no modo concorrente:
o primeiro sobre CREATE INDEX CONCURRENTLY
:
As compilações de índice regulares permitem que outras compilações de índice regulares na mesma tabela ocorram simultaneamente, mas somente uma compilação de índice simultânea pode ocorrer em uma tabela por vez.
na verdade eu tentei isso, mas eu poderia aplicar dois comandos com CREATE INDEX CONCURRENTLY
e ambos os índices eram válidos. Isso significa apenas que o Postgres permite executar o comando duas vezes, mas
o segundo sobre DROP INDEX CONCURRENTLY
:
Há várias ressalvas a serem observadas ao usar esta opção. Apenas um nome de índice pode ser especificado, e a opção CASCADE não é suportada. (Assim, um índice que suporta uma restrição UNIQUE ou PRIMARY KEY não pode ser descartado desta forma.)
atualmente não li os documentos e removi um índice com DROP INDEX CONCURRENTLY
isso era UNIQUE
. No entanto, funcionou e o índice foi removido, esqueci de algo aqui?
1.
CREATE INDEX CONCURRENTLY
Você pode criar qualquer número de índices com
CREATE INDEX CONCURRENTLY
. Eles só não podem ser criados simultaneamente . Apenas um índice pode ser construído simultaneamente por vez. Você provavelmente os construiu sequencialmente , ou seja, um de cada vez.CONCURRENTLY
não é uma propriedade do índice, mas uma instrução de como construí-lo.Parece relacionado a este mal-entendido:
2.
DROP INDEX CONCURRENTLY
UNIQUE
restrições (ALTER TABLE tbl ADD CONSTRAINT ...
) são parte do padrão SQL e implementadas no Postgres usando umUNIQUE
índice, que você também pode criar por conta própria (CREATE UNIQUE INDEX ...
). A funcionalidade do primeiro é um superconjunto do último.Você pode remover um índice exclusivo
CONCURRENTLY
, mas não se for apenas um detalhe de implementação de uma restrição. Isso precisaria daCASCADE
funcionalidade que não é suportada - conforme sua citação.Relacionado: