Du kan skapa ett trigramindex som stöder din fråga.
För det behöver du pg_trgm
förlängning; kör följande som superanvändare:
CREATE EXTENSION pg_trgm;
Sedan kan du skapa ett GIN-index:
CREATE INDEX ON dir USING gin (path gin_trgm_ops);
Detta index kan användas med ditt andra och tredje tillvägagångssätt, så det borde göra susen för dig.
Med korta mönster som det i dina exempel kommer indexet inte att vara särskilt effektivt.
Du kan också använda ett GiST-index, som förmodligen kommer att vara mindre, men långsammare att söka.
Observera att du kan använda det indexet även med mönster som börjar med %
.