7 puntos por GN⁺ 2024-11-13 | 2 comentarios | Compartir por WhatsApp

Cosas que me habría gustado saber sobre Postgres

  • La enorme documentación de Postgres: La documentación oficial de Postgres es excelente, pero es tan extensa que puede ser difícil para un ingeniero principiante leerla de principio a fin.

Normalización de datos

  • Normalización de datos: Es el proceso de eliminar datos duplicados en un esquema de base de datos. Por ejemplo, es mejor no poner una columna user_email en la tabla documents, sino relacionarla con la tabla users mediante una clave foránea.
  • La necesidad de desnormalizar: A veces también es necesario desnormalizar para leer ciertos datos más rápido. Sin embargo, los datos desnormalizados implican el costo de inconsistencias en los datos o mayor complejidad de escritura.

Seguir el consejo de quienes crean Postgres

  • La lista de "cosas que no debes hacer" en la Wiki de Postgres: En la Wiki oficial de Postgres hay una lista de "cosas que no debes hacer". Incluso si no la entiendes del todo, puede ayudarte a evitar errores.
  • Recomendaciones: Usar el tipo text para almacenar todo el texto, usar timestampz/time with time zone para almacenar todas las marcas de tiempo y escribir los nombres de las tablas en snake_case.

Particularidades generales de SQL

  • SQL no distingue mayúsculas y minúsculas: Las palabras clave de SQL no distinguen entre mayúsculas y minúsculas. Esto no se limita solo a Postgres.
  • La rareza de NULL: En SQL, NULL significa "desconocido" y, al combinarse con la mayoría de los operadores, el resultado también es NULL. Se pueden usar operadores como IS NULL e IS NOT NULL para comparar con NULL.

Hacer psql más útil

  • Mejorar la legibilidad de la salida: Puedes configurar un paginador de terminal para que las salidas largas se vean mejor. Se puede usar less como paginador.
  • Aclarar un NULL ambiguo: En psql, puedes definir la cadena que representa NULL para dejarlo claro en la salida.
  • Usar autocompletado: psql admite autocompletado para escribir con facilidad palabras clave de SQL o nombres de tablas.

El efecto de agregar índices

  • Definición de índice: Un índice es una estructura de datos que ayuda a consultar datos rápidamente.
  • Limitaciones de los índices: Si en una base de datos local casi no hay filas, un índice puede no ser útil. Al indexar varias columnas, el orden importa.

Uso de JSONB

  • Ventajas y desventajas de JSONB: Postgres ofrece funciones para almacenar y consultar JSON de forma eficiente, pero si se usa mal, el rendimiento puede degradarse.
  • Limitaciones estructurales de JSONB: Una columna JSONB no garantiza la estructura, por lo que no se autodocumenta tanto como un esquema de tablas estándar.

Otros consejos útiles

  • Problemas de las transacciones largas: Si una transacción dura demasiado, puede impedir que otros clientes accedan a la base de datos.
  • Las potentes capacidades de Postgres: Postgres ofrece fortalezas de una base de datos orientada a documentos y permite almacenar y consultar datos eficientemente mediante JSONB.

2 comentarios

 
bbulbum 2024-11-19

Definitivamente tendré que leer alguna vez lo que no se debe hacer.

 
GN⁺ 2024-11-13
Opinión de Hacker News
  • Postgres distingue entre mayúsculas y minúsculas, pero escribir las palabras clave en mayúsculas en las consultas es para mejorar la legibilidad. No es obligatorio, pero es útil formatear las consultas para que sean más fáciles de leer al depurarlas

    • Similar a ordenar el código en otros lenguajes, una indentación consistente, etc., reduce el tiempo de comprensión y permite enfocarse en las partes importantes
    • Quisiera evitar usar mayúsculas en identificadores como actuallyUsingCaseInIdentifiers
  • Acabo de descubrir la entrada del wiki "Don't Do This" y es muy útil

  • Gran parte del contenido no es exclusivo de Postgres (por ejemplo, las rarezas de null, el orden de las columnas en los índices, etc.)

    • Por ejemplo, la forma en que null interactúa con los índices y las restricciones únicas tampoco es intuitiva en MySQL
    • Si en una tabla de usuarios hay una columna de email que no permite null y una columna de nombre de usuario que sí lo permite, entonces con una restricción única como (email, username) puedes insertar varias veces el mismo email junto con un nombre de usuario null
  • El consejo de normalizar los datos debe tomarse con cautela

    • El autor mencionó 10 tipos distintos de normalización, pero la mayoría de la gente no necesita usar 7 de ellos
  • Ojalá los desarrolladores se preocuparan más por la normalización y dejaran de meterlo todo en columnas JSON(b)

  • La palabra "viaje" se siente desagradable en blogs por su uso excesivo

  • La sección de código es tan incómoda en móvil que casi no se puede desplazar

  • En la especificación de JSON, null es un valor constante y es distinto de NULL en SQL

  • Agregar índices puede no tener ningún efecto

    • Hay partes de la filosofía de Postgres que se sienten demasiado rígidas o difíciles de entender
    • Tengo esperanza de que en versiones futuras se agregue soporte para hints
  • Leer artículos así y entender el 90% me hace sentir orgullo por el trabajo que he tenido a cargo