Coisas que eu gostaria de saber sobre Postgres
- A vastidão da documentação do Postgres: a documentação oficial do Postgres é excelente, mas é tão extensa que fica difícil para engenheiros iniciantes lerem tudo do começo ao fim.
Normalização de dados
- Normalização de dados: é o processo de remover dados duplicados do esquema do banco de dados. Por exemplo, em vez de ter uma coluna
user_email na tabela documents, é melhor relacioná-la com a tabela users por meio de uma chave estrangeira.
- Necessidade de desnormalização: às vezes, a desnormalização é necessária para ler determinados dados mais rapidamente. No entanto, dados desnormalizados trazem o custo de inconsistência de dados ou aumento da complexidade de escrita.
Seguir os conselhos dos criadores do Postgres
- "Coisas que não se deve fazer" na Wiki do Postgres: a Wiki oficial do Postgres tem uma lista de "coisas que não se deve fazer". Mesmo sem entender tudo, ela ajuda a evitar erros.
- Recomendações: usar o tipo
text para armazenar todo texto, usar timestampz/time with time zone para armazenar todos os timestamps e nomear tabelas em snake_case.
Peculiaridades gerais de SQL
- SQL não diferencia maiúsculas de minúsculas: palavras-chave SQL não diferenciam maiúsculas de minúsculas. Isso não é exclusivo do Postgres.
- A peculiaridade de
NULL: em SQL, NULL significa "desconhecido" e, quando combinado com a maioria dos operadores, o resultado também será NULL. É possível comparar NULL usando operadores como IS NULL e IS NOT NULL.
Tornando o psql mais útil
- Melhorando a legibilidade da saída: é possível configurar um pager do terminal para visualizar melhor saídas longas. Dá para definir
less como pager.
- Tornando
NULL menos ambíguo: no psql, é possível definir a string que representa NULL para deixá-lo mais claro na saída.
- Usando autocompletar: o
psql oferece suporte a autocompletar, facilitando a digitação de palavras-chave SQL e nomes de tabelas.
O efeito de adicionar índices
- Definição de índice: um índice é uma estrutura de dados que ajuda a consultar dados com mais rapidez.
- Limitações dos índices: em um banco de dados local com poucas linhas, índices podem não ser úteis. Ao indexar várias colunas, a ordem importa.
Uso de JSONB
- Vantagens e desvantagens do JSONB: o Postgres oferece recursos para armazenar e consultar JSON com eficiência, mas, se usado de forma inadequada, o desempenho pode piorar.
- Limitações estruturais do JSONB: colunas JSONB não garantem uma estrutura, então não são tão autodocumentadas quanto um esquema de tabela padrão.
Outras dicas úteis
- Problemas de transações longas: se uma transação durar tempo demais, ela pode atrapalhar o acesso de outros clientes ao banco de dados.
- Recursos poderosos do Postgres: o Postgres oferece pontos fortes de bancos de dados orientados a documentos e, com JSONB, permite armazenar e consultar dados com eficiência.
2 comentários
Vou precisar ler isso algum dia, sobre o que não se deve fazer.
Opinião do Hacker News
O Postgres diferencia maiúsculas de minúsculas, mas escrever palavras-chave em maiúsculas nas queries serve para melhorar a legibilidade. Não é obrigatório, mas é útil formatar a query para que ela fique mais fácil de ler durante a depuração
actuallyUsingCaseInIdentifiersEncontrei pela primeira vez a entrada da wiki "Don't Do This" e ela é muito útil
Muito do conteúdo não é exclusivo do Postgres (por exemplo: as peculiaridades do
null, ordem das colunas de índice etc.)nullinterage com índices e restrições de unicidade também não é intuitiva no MySQLnulle uma coluna de nome de usuário que aceitanull, se existir uma restrição de unicidade como(email, username), é possível inserir várias vezes o mesmo e-mail com nome de usuárionullO conselho de normalizar os dados deve ser tratado com cautela
Gostaria que os desenvolvedores se preocupassem mais com normalização e parassem de colocar tudo em colunas JSON(b)
A palavra "jornada" soa desagradável em blogs por causa do uso excessivo
A seção de código é tão ruim no mobile que quase não dá para rolar
Na especificação JSON,
nullé um valor constante e é diferente deNULLno SQLAdicionar um índice pode não ter efeito algum
Ler artigos como este e conseguir entender 90% deles dá orgulho do trabalho que exerci