Cuestionario: Deep Postgres: Parte 1
¿SQL te hace chillar?
Parte 1 de 2. Ir a la Parte 2
PostgreSQL 🐘 Es, sin duda, mi base de datos favorita. Siempre descubro trucos y sorpresas, así que decidí recopilarlos en un nuevo Quiz.
Este quiz combina características conocidas y menos divulgadas de PostgreSQL: desde agregados integrados hasta conversiones de tipo, restricciones y mucho más.
¡Buena suerte! 🍀
¿Cuál NO es una función de agregado incorporada en PostgreSQL?
SELECT MIN(grade) as lowest, MAX(grade) as highest, AVG(grade) as average, MEDIAN(grade) as middleFROM grades;MEDIAN no es incorporada! Necesitas:
PERCENTILE_CONT(0.5)WITHIN GROUP (ORDER BY grade)Agregados incorporados comunes:
MIN,MAX,COUNTAVG,SUMARRAY_AGG,STRING_AGG- Varias funciones estadísticas
¿Cuál de estas conversiones de tipo es inválida ❌?
PostgreSQL admite tres sintaxis de casting:
- ANSI SQL:
CAST(expression AS type). - PostgreSQL:
expression::type. - Literal tipado:
type 'literal'.
Todas son funcionalmente equivalentes, pero:
CAST()es la más portable.::es específico de PostgreSQL pero se usa con frecuencia.- El estilo infijo
type 'literal'es menos común pero sigue siendo válido.
¿Cuántos valores NULL se permiten aquí?
CREATE TABLE student_emails ( student_id INTEGER, email VARCHAR(255), UNIQUE(email));Restricciones UNIQUE en PostgreSQL:
- Permiten múltiples valores NULL.
NULL≠NULLen las verificaciones de unicidad.
Para evitar valores NULL, agrega NOT NULL:
CREATE TABLE student_emails ( student_id INTEGER, email VARCHAR(255) NOT NULL, UNIQUE(email));¿Qué devuelve esto?
SELECT '2024-11-27'::date + interval '24 hours';¡Los intervalos son una herramienta poderosa para simplificar operaciones con rangos de fechas!
Aritmética de fechas en PostgreSQL:
+ interval '24 hours'añade 24 horas+ interval '1 day'añade 1 día+ interval '1 month'añade 1 mes+ interval '1 year'añade 1 año
El resultado es 2024-11-28 00:00:00.
¿Cuál es la afirmación más precisa sobre timestamptz y timestamp?
Ambos son de 8 bytes, pero no almacenan el mismo tipo de valor.
Entonces, ¿cuál es la diferencia? Está en el análisis de la entrada.
timestamptz
- Normaliza la entrada a un punto absoluto en el tiempo.
- Tiene en cuenta la configuración
TimeZonedel servidor/conexión al analizar la entrada sin un desplazamiento explícito y al mostrar la salida.
timestamp
- Almacena una fecha y hora sin conversión de zona horaria.
- No conserva ni normaliza la información de zona horaria.
Tipos que marean
¿Cuál de estos no ❌ es un tipo válido de PostgreSQL?
PostgreSQL tiene un amplio conjunto de tipos de datos, pero STRING(100) no es uno de ellos.
Los tipos de cadena correctos incluyen:
VARCHAR(100)(cadena de longitud variable)CHAR(100)(cadena de longitud fija)TEXT(longitud ilimitada)CHARACTER VARYING(100)(igual queVARCHAR(100))
¿Cuál de estos no ❌ es un tipo válido de PostgreSQL?
Puede parecer familiar ya que decimal128 es un tipo en muchos lugares (incluyendo Mongo y Java). No es un tipo válido de PostgreSQL, el tipo válido es decimal.
Los tipos numéricos correctos son:
int(entero de 4 bytes)bigint(entero de 8 bytes)real(punto flotante de 4 bytes)double precision(punto flotante de 8 bytes)bigserial(entero de 8 bytes autoincremental)smallserial(entero de 2 bytes autoincremental)
¿Cuál de estos no es ❌ un tipo válido de PostgreSQL?
¿Te hizo esto sentir frustrado, incluso enojado? ¡No estás solo! Para citar a un contribuidor “core” sin nombre, «¡¿Qué demonios, Dan?! ¡Me estrellé con las preguntas de tipos! ¡Eso es brutal! No pienso compartir mi puntuación, ja». 😈 De nada.
El rico conjunto de tipos de red de PostgreSQL no incluye ipv4. Cada vez que intento usarlo sin buscar, me equivoco. Tal vez macaddr8 me hace sentir que debe haber tipos ipv4 y ipv6. No, inet cubre ambos. Además, cidr cubre máscaras de red para ambos.
Los tipos de red válidos incluyen:
cidr(dirección de red IPv4/IPv6)inet(dirección de host IPv4/IPv6)macaddr(dirección MAC)macaddr8(dirección MAC EUI-64)
¿Cuál de estos no es ❌ un tipo válido de PostgreSQL?
PostgreSQL tiene un amplio conjunto de tipos especializados, pero currency no es uno de ellos!
Los tipos válidos incluyen:
xml(datos XML)uuid(UUID)money(monto monetario)interval(intervalo de tiempo)
¿Cuál de estos no ❌ es un tipo válido de PostgreSQL?
PostgreSQL tiene un conjunto amplio de tipos especializados, pero triangle no es uno de ellos.
Esta pregunta trata de los tipos incorporados de PostgreSQL. Las extensiones espaciales como PostGIS admiten otras geometrías; eso no convierte triangle en un tipo incorporado de PostgreSQL.
Los tipos especializados correctos incluyen:
box(caja rectangular)line(línea infinita)point(punto 2D)circle(círculo 2D)polygon(polígono 2D)
¿Qué ocurre al calcular el número total posible de IDs de estudiante?
SELECT 256 * 256 * 256 * 256;El tipo integer de PostgreSQL es de 32 bits con signo, con rango de -2,147,483,648 a 2,147,483,647.
El cálculo 256^4 = 4,294,967,296 supera este rango.
Para manejar números más grandes:
-- Use BIGINTSELECT 256::bigint * 256 * 256 * 256;
-- Or numeric for arbitrary precisionSELECT 256::numeric * 256 * 256 * 256;¿Qué literal tiene la menor cantidad de dígitos fraccionarios que supera la precisión de microsegundos (6 dígitos) de PostgreSQL?
Los timestamps de PostgreSQL tienen precisión de microsegundos (6 decimales).
- Máximo:
.123456(6 dígitos) - Los nanosegundos (9 dígitos) se redondean o truncan a la precisión admitida
- Las zonas horarias se aceptan para
timestamptz, pero no son obligatorias
Curiosidad poco común: Algunos lenguajes/frameworks envían precisión de nanosegundos, pero PostgreSQL almacena los timestamps con precisión de microsegundos.
¿Cuál de estos no ❌ es un tipo válido de PostgreSQL?
(En serio, estos son (en su mayoría) tipos reales.)
PostgreSQL incluye varios tipos geométricos y de búsqueda de texto, pero tsrank no es uno de ellos.
Los tipos geométricos y de búsqueda de texto correctos incluyen:
lseg(segmento de línea)bytea(datos binarios)tsquery(consulta de búsqueda de texto)tsvector(documento de búsqueda de texto)
¿Cuándo se verifica esta restricción de grado?
ALTER TABLE studentsADD CONSTRAINT valid_gradeCHECK ( (grade >= 0 AND grade <= 100) OR grade IS NULL) NOT VALID;Las restricciones NOT VALID:
- Se verifican inmediatamente para inserciones y actualizaciones nuevas
- No validan filas existentes
- Pueden validar filas existentes más tarde con
VALIDATE CONSTRAINT - Son útiles para tablas grandes
Sin NOT VALID:
- La restricción se verifica inmediatamente
- Todas las filas existentes se validan
- Puede ser lento en tablas grandes
¡Bien hecho! ¡Profundizaste en varias áreas de PostgreSQL! 🐘
Espero que hayas aprendido algo nuevo, o al menos tengas una puntuación de la que presumir. 🏆
Echa un vistazo a Parte 2 para más diversión con Postgres! 🚀
¿Quieres más emociones en la vida? Revisa mi Colección de Quiz para diversión sin fin*.
