- Quelques défauts surprenants découverts après avoir manipulé SQLite pendant quelques jours
ALTER COLUMN n’est pas pris en charge. Recommandation officielle pour modifier une colonne : « créer une nouvelle table »
DROP CONSTRAINT n’est pas pris en charge. Recommandation officielle pour supprimer une contrainte : « créer une nouvelle table »
- SQLite n’a pas de type de données au niveau des colonnes. Les types de données (il n’y en a que 5) n’existent que pour les valeurs, donc tout peut aller partout
- Si l’on demande une colonne d’un type non pris en charge ou inexistant, SQLite effectue l’opération erronée sans avertissement ni erreur. En définissant un schéma comme
CREATE TABLE my_table (id bigserial, messages jsonb[]), j’ai eu l’impression que cela fonctionnait, et j’ai donc cru à tort pendant la première journée que SQLite prenait en charge les types serial et les tableaux
- Avec
CREATE TABLE my_table (...) STRICT, on peut n’autoriser que l’un des 5 types pris en charge : integer, real, text, blob, any
- Le nouveau support de
jsonb dans SQLite a récemment beaucoup attiré l’attention. Contrairement à Postgres, jsonb n’est pas réellement un type de données, mais un format utilisé en entrée/sortie par les fonctions intégrées jsonb*. Lorsqu’il est stocké de façon persistante, il s’agit d’un blob, l’un des 5 types de base
- D’autres types très importants, comme
timestamptz, sont également absents. Si l’on veut gérer des dates/heures, il faut les stocker sous forme de timestamp Unix en integer ou de chaîne au format ISO8601, et plusieurs fonctions intégrées sont fournies pour ce genre d’opérations
- SQLite dispose de fonctionnalités impressionnantes liées au streaming que j’aimerais essayer, mais l’expérience DX initiale a clairement été un peu inconfortable
- Je me demande parfois à quel point on se laisse enfermer dans certains récits. Par exemple, Postgres est-il vraiment la meilleure base de données au monde ? Cette expérience n’a fait que renforcer ma conviction. Oui, Postgres est le meilleur
6 commentaires
On dirait plutôt qu’on veut du SQLHeavy, et non du SQLite.
Il existe toutes sortes de bases de données. J’ai eu le sentiment que SQLite fonctionne selon sa propre philosophie.
Pourquoi vouloir utiliser SQLite comme Postgres ?
Ça me donne l’impression de quelqu’un qui essaie Linux pour la première fois et dit : « Hancom Office marche mal et les jeux auxquels je joue ne se lancent pas non plus. Au fond, le vrai système d’exploitation, c’est Windows ! »
Le battage médiatique autour de
sqlitesur Hacker News n’est-il pas un peu excessif ? Depuis 2022, on voit souvent sur Hacker News des affirmations selon lesquellessqlitepourrait remplacer un SGBDR exploité séparément.1: https://news.ycombinator.com/item?id=31318708
2. https://news.ycombinator.com/item?id=31152490
3. https://news.ycombinator.com/item?id=34812527
4. https://news.ycombinator.com/item?id=36208568
Autres : https://hn.algolia.com/?dateEnd=1720854657&dateRange=custom&da…
Je pense que lorsque l’utilisation d’une famille de bases de données comme Postgres ou MySQL semble excessive, SQLite peut être une alternative tout à fait séduisante.
Par exemple, pour un petit service, le coût d’une DB managée peut parfois être disproportionné, et l’exploiter soi-même représente aussi une charge.
À l’inverse, dans le cas de SQLite, on dit que les performances restent suffisantes jusqu’à une certaine échelle, et surtout qu’avec des outils comme Litestream, la charge d’exploitation est presque inexistante, ce qui en fait une option intéressante.
Sans même aller jusqu’aux fonctions de réplication, sqlite est vraiment bien parce que les sauvegardes sont simples et qu’il suffit de gérer l’état du démon de service, mais pour le brancher à JPA il faut faire diverses choses, donc j’ai trouvé qu’on ne pouvait pas l’utiliser sur un projet qu’il faudra transmettre à quelqu’un d’autre. Et si, comme dans le billet d’origine, on a la volonté de gérer le schéma de données de manière plus stricte, ce n’est pas adapté à ce type d’usage.
J’avais commencé à écrire le commentaire précédent sans le terminer, mais ce que je voulais dire, c’est que certaines rumeurs infondées sur sqlite donnent l’illusion que sqlite serait une solution miracle.