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
Definitivamente tendré que leer alguna vez lo que no se debe hacer.
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
actuallyUsingCaseInIdentifiersAcabo 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.)nullinteractúa con los índices y las restricciones únicas tampoco es intuitiva en MySQLnully 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 usuarionullEl consejo de normalizar los datos debe tomarse con cautela
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,
nulles un valor constante y es distinto deNULLen SQLAgregar índices puede no tener ningún efecto
Leer artículos así y entender el 90% me hace sentir orgullo por el trabajo que he tenido a cargo