7 pontos por GN⁺ 2024-11-13 | 2 comentários | Compartilhar no WhatsApp

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

 
bbulbum 2024-11-19

Vou precisar ler isso algum dia, sobre o que não se deve fazer.

 
GN⁺ 2024-11-13
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

    • Assim como a organização de código em outras linguagens, uma indentação consistente etc. reduz o tempo necessário para entender e permite focar nas partes importantes
    • Eu evitaria usar maiúsculas em identificadores como actuallyUsingCaseInIdentifiers
  • Encontrei 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.)

    • Por exemplo, a forma como o null interage com índices e restrições de unicidade também não é intuitiva no MySQL
    • Quando há, em uma tabela de usuários, uma coluna de e-mail que não aceita null e uma coluna de nome de usuário que aceita null, se existir uma restrição de unicidade como (email, username), é possível inserir várias vezes o mesmo e-mail com nome de usuário null
  • O conselho de normalizar os dados deve ser tratado com cautela

    • O autor mencionou 10 tipos diferentes de normalização, mas a maioria das pessoas não precisa usar 7 deles
  • 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 de NULL no SQL

  • Adicionar um índice pode não ter efeito algum

    • Há partes da filosofia do Postgres que parecem rígidas demais ou difíceis de entender
    • Espero que versões futuras adicionem suporte a hints
  • Ler artigos como este e conseguir entender 90% deles dá orgulho do trabalho que exerci