TIL: Postgres: Índice parcial no campo booleano Tp

Eu me deparei com algo interessante ao trabalhar em uma migração em um aplicativo Rails:

Ao criar um índice parcial em um campo booleano ISe =na cláusula where, o índice parcial não é a mesma coisa.

Por exemplo:
Dada uma tabela productscom uma coluna booleana, counterfeit
criei um índice sobre falsificação com a restrição counterfeit = true.

add_column :products, :counterfiet, :boolean
add_index
:products, :id, algorithm: :concurrently, where: "(counterfiet = TRUE)"

Ele atinge o índice quando eu procuro usando o seguinte:
SELECT * FROM "products" WHERE "products"."counterfeit" = TRUE
Selects usa o índice que acabei de criar.

No entanto, se consultar usando este próximo formulário, ele faz uma varredura sequencial:
SELECT * FROM "products" WHERE "products"."counterfeit" IS TRUE

Para que funcione em qualquer um dos formulários, indexei usando o seguinte:

add_index :products, :id, algorithm: :concurrently, where: "(counterfiet = TRUE OR counterfiet IS TRUE)"

Agora, os dois formulários usam o índice!