Ce qui se passe
PlanetScale a annoncé le 16 septembre 2026 TIN — pour Text INdex —, une
extension de recherche plein texte pour Postgres, publiée en version stable.
L'usage tient en deux instructions : un index, puis un opérateur dédié dans le
WHERE.
CREATE INDEX idx_description ON products USING tin(description);
-- Conjonction : tous les termes
SELECT * FROM products WHERE description ==> 'stretch denim jeans'
ORDER BY tin.score(ctid) DESC LIMIT 10;
-- Phrase exacte, et disjonction entre crochets
SELECT COUNT(*) FROM photos WHERE tags ==> '"san francisco"';
SELECT * FROM emails WHERE body ==> '[insider trading conspiracy]';Le périmètre couvert est le point : expressions booléennes, requêtes de phrase
et de proximité, correspondance floue, jokers et expressions régulières sur les
termes, repli de casse et d'accents, COUNT(*) et top-k classé par BM25.
L'éditeur note que trois index plein texte existent déjà pour Postgres, mais
qu'aucun ne cochait toutes ces cases tout en supportant jointures, écritures
continues, réplication, sauvegardes et visibilité transactionnelle correcte.
Les chiffres, et d'où ils viennent
Le banc d'essai est celui de PlanetScale, contre ses concurrents directs — à lire comme tel. Corpus Stack Exchange de 85 Go, 150 millions de documents, 1 719 requêtes générées à partir de sous-chaînes de 2 à 15 termes. Machine : AWS i7i.8xlarge, NVMe local, Postgres 18.6 confiné à 8 vCPU et 32 Go. Versions comparées : TIN 1.0.2, ParadeDB 0.25.2, pg_textsearch 1.4.0 et l'index GIN natif. Seuls TIN et ParadeDB ont terminé l'ensemble des scénarios.
| Construction de l'index | Durée | Taille | RAM nécessaire |
|---|---|---|---|
| TIN 1.0.2 | 8 min 10 | 50,7 Go | 32 Go |
| ParadeDB 0.25.2 | 19 min 20 | 52,1 Go | 64 Go |
| pg_textsearch 1.4.0 | 26 min 49 | 41,5 Go | 128 Go |
| Postgres GIN | 2 h 09 min 04 | 28,0 Go | 64 Go |
Sur des requêtes mixtes classées top-10, TIN tient 199 requêtes par seconde contre 7,9 pour ParadeDB, avec un p99 de 256 ms contre 6 765 ms. Sur conjonction et phrase, l'écart est de 10× face à ParadeDB et 541× face à GIN. GIN ne termine pas les scénarios de disjonction : il épuise la mémoire.
Le scénario le plus parlant est celui avec écritures concurrentes, à 1 000 UPDATE par seconde : sur dix minutes, TIN passe 270 279 mises à jour, ParadeDB 185 584, et pg_textsearch 735 — chez ce dernier, le trafic de lecture continu empêche les écritures d'obtenir leurs verrous, et elles calent au bout de quelques secondes.
Dernier chiffre, moins spectaculaire mais structurant : la donnée lue par requête. 65 Mo pour TIN contre 582 Mo pour ParadeDB sur le scénario mixte. C'est ce qui explique une partie de l'écart, et surtout ce qui fait que les autres requêtes du même serveur ne subissent pas la recherche.
La limite à vérifier avant de bâtir dessus
L'annonce parle d'une disponibilité immédiate « pour toutes les bases Postgres et Neki » — c'est-à-dire sur la plateforme de PlanetScale. Rien dans le billet ne décrit l'installation de l'extension sur un serveur Postgres que vous administrez. Sur une base auto-hébergée, c'est le premier point à trancher.
Source : Introducing TIN: full-text search for Postgres, PlanetScale, 16 septembre 2026.