- Algumas desvantagens surpreendentes que descobri depois de mexer no SQLite por alguns dias
ALTER COLUMN não é suportado. A recomendação oficial para alterar uma coluna: "criar uma nova tabela"
DROP CONSTRAINT não é suportado. A recomendação oficial para remover uma restrição: "criar uma nova tabela"
- O SQLite não tem tipos de dados nas colunas. Os tipos de dados (são apenas 5) existem apenas nos valores, então qualquer coisa pode entrar em qualquer lugar
- Se você pedir uma coluna com um tipo não suportado ou inexistente, ele faz a coisa errada sem aviso ou erro. Ao subir um esquema como
CREATE TABLE my_table (id bigserial, messages jsonb[]), parecia que funcionava, então no primeiro dia achei por engano que o SQLite suportava serial e arrays
- Usando
CREATE TABLE my_table (...) STRICT, é possível permitir apenas um dos 5 tipos suportados: integer, real, text, blob, any
- Recentemente houve muito interesse no novo suporte a
jsonb do SQLite. Diferente do Postgres, jsonb na verdade não é um tipo de dado, mas um formato de entrada e saída das funções embutidas jsonb*. Quando armazenado de forma persistente, ele é blob, um dos 5 tipos básicos
- Outros tipos muito importantes, como
timestamptz, também estão ausentes. Se você quiser data/hora, precisa armazenar como timestamp Unix em integer ou string no formato ISO8601, e há várias funções embutidas para lidar com isso
- O SQLite tem recursos impressionantes relacionados a streaming que eu quero experimentar, mas a experiência inicial de DX certamente foi um pouco desconfortável
- Às vezes me pergunto o quanto estou preso a certa narrativa. Por exemplo, será que o Postgres é mesmo o melhor banco de dados do mundo? Essa experiência certamente reforçou minha convicção. Sim, o Postgres é o melhor
6 comentários
Parece que a intenção é algo mais como SQLHeavy, e não SQLite.
Existem bancos de dados de vários tipos. Tive a impressão de que o SQLite segue sua própria filosofia.
Por que tentaram usar o SQLite como se fosse o Postgres?
Parece aquela sensação de alguém que usou Linux pela primeira vez e diz: “Nem o Hancom Office funciona direito e os jogos que eu jogo também não rodam. No fim das contas, sistema operacional bom é Windows!”
O hype em torno do
sqliteno Hacker News não está exagerado? Desde 2022, têm aparecido muitas postagens no Hacker News defendendo que osqlitepode substituir um RDBMS operado separadamente.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
Outros: https://hn.algolia.com/?dateEnd=1720854657&dateRange=custom&da…
Acho que o SQLite pode ser uma alternativa bastante atraente quando usar uma família de bancos de dados como Postgres ou MySQL parece overkill.
Por exemplo, no caso de um serviço pequeno, o custo de um DB gerenciado pode acabar sendo desproporcionalmente alto, e operar tudo por conta própria também traz um certo peso.
Por outro lado, dizem que, no caso do SQLite, até certo nível de escala não há falta de desempenho e, especialmente com ferramentas como Litestream, a carga operacional quase desaparece, o que parece ser uma boa vantagem.
Sem nem chegar ao ponto de recursos de replicação, o
sqlitejá é muito bom porque também é fácil fazer backup e basta gerenciar o estado do daemon do serviço, mas para integrar com JPA é preciso fazer várias coisinhas, então acabei achando que não dá para usar em projetos que precisam ser repassados para outra pessoa. Se houver a intenção, como no texto original, de tratar o esquema de dados de forma mais rigorosa, então também não serve para esse tipo de uso.Eu tinha começado a escrever o comentário anterior e parei no meio, mas o que eu queria dizer é que alguns boatos infundados sobre o
sqliteacabam criando a ilusão de que osqliteé uma solução para tudo.