Glosario de Postgres
Términos de PostgreSQL explicados con SQL que puedes ejecutar
Cada entrada ofrece una definición breve, un ejemplo que se ejecuta en PostgreSQL estándar y enlaces a la documentación oficial en la que se basa.
Seguridad a nivel de fila (RLS)
La seguridad a nivel de fila permite que una tabla decida, fila por fila, qué filas puede ver o modificar cada rol, mediante políticas creadas con CREATE POLICY.
Escaneo secuencial
Un escaneo secuencial lee todas las filas de una tabla de principio a fin. EXPLAIN lo muestra como Seq Scan; es la opción normal para tablas pequeñas o consultas que devuelven muchas filas.
Escaneo de índice
Un escaneo de índice usa un índice para encontrar las filas que coinciden y luego las obtiene de la tabla. EXPLAIN lo muestra como Index Scan; un Index Only Scan puede omitir la tabla.
Agrupación de conexiones
La agrupación de conexiones mantiene abierto un conjunto de conexiones a la base de datos y las comparte entre muchos clientes, porque cada conexión de PostgreSQL la atiende su propio proceso de servidor.
VACUUM y autovacuum
VACUUM recupera el espacio que ocupan las versiones muertas de filas que dejan las actualizaciones y eliminaciones, actualiza el mapa de visibilidad y evita el reinicio cíclico (wraparound) de los ID de transacción. Autovacuum lo ejecuta por ti.
Control de concurrencia multiversión (MVCC)
MVCC permite que las lecturas y las escrituras se ejecuten al mismo tiempo: cada sentencia ve una instantánea de los datos, y las actualizaciones escriben nuevas versiones de las filas en lugar de sobrescribir las filas existentes.
Registro de escritura anticipada (WAL)
El registro de escritura anticipada guarda cada cambio antes de que llegue a los archivos de datos, para que PostgreSQL pueda recuperarse tras una caída. WAL también alimenta la replicación y la recuperación a un punto en el tiempo.
EXPLAIN y EXPLAIN ANALYZE
EXPLAIN muestra cómo planea PostgreSQL ejecutar una consulta; EXPLAIN ANALYZE además la ejecuta e informa el número real de filas y los tiempos de cada paso.
Clave primaria
Una clave primaria es una columna o un conjunto de columnas que identifica de forma única cada fila. PostgreSQL la impone con un índice B-tree único y NOT NULL.
Clave foránea
Una clave foránea exige que los valores de una tabla coincidan con una fila de otra, así que no puedes apuntar a una fila que no existe. ON DELETE decide qué pasa cuando se elimina esa fila.
Niveles de aislamiento de transacciones
El nivel de aislamiento decide cuánto ve una transacción de los cambios de las transacciones concurrentes. PostgreSQL usa Read Committed de forma predeterminada y también ofrece Repeatable Read y Serializable.
Interbloqueo (deadlock)
Un interbloqueo ocurre cuando dos transacciones esperan cada una un bloqueo que tiene la otra. PostgreSQL lo detecta y cancela una de ellas; tomar los bloqueos en un orden consistente lo evita.
Índice B-tree
El B-tree es el tipo de índice predeterminado de PostgreSQL. Maneja comparaciones de igualdad y de rango sobre datos ordenables y puede devolver las filas ya ordenadas.
Índice GIN
Un índice GIN (índice invertido generalizado) asocia cada elemento dentro de un valor, como un elemento de un arreglo, una clave JSONB o una palabra de búsqueda de texto, con las filas que lo contienen.
Índice parcial
Un índice parcial cubre solo las filas que cumplen una condición WHERE, lo que lo mantiene pequeño y rápido cuando las consultas apuntan a un subconjunto bien definido de una tabla.
Expresión de tabla común (CTE)
Una expresión de tabla común, escrita con WITH, le da un nombre a una subconsulta para que el resto de la sentencia pueda usarla como una tabla. WITH RECURSIVE maneja árboles y jerarquías.
Tipo JSONB
jsonb almacena JSON en un formato binario descompuesto que es rápido de consultar y se puede indexar. Es el tipo JSON que la mayoría de las aplicaciones deberían usar.
Vista materializada
Una vista materializada almacena el resultado de una consulta para que pueda leerse como una tabla. Las lecturas son rápidas, pero los datos solo cambian cuando ejecutas REFRESH MATERIALIZED VIEW.
Particionamiento de tablas
El particionamiento divide una tabla lógica en tablas físicas más pequeñas por rango, lista o hash, para que las consultas y el mantenimiento solo toquen las particiones que necesitan.
Upsert con INSERT ... ON CONFLICT
INSERT ... ON CONFLICT inserta una fila o, si eso violara una restricción de unicidad, actualiza la fila existente o la omite, todo en un solo paso atómico.
Funciones de ventana
Una función de ventana calcula un valor sobre un conjunto de filas relacionadas, como una posición en un ranking o un total acumulado, sin combinar esas filas en una sola como hace GROUP BY.
Esquema
Un esquema es un espacio de nombres dentro de una base de datos que contiene tablas, vistas, funciones y otros objetos. search_path decide dónde se buscan los nombres no calificados.
Roles y privilegios
En PostgreSQL, tanto los usuarios como los grupos son roles. GRANT otorga a un rol privilegios sobre objetos, y un rol que es miembro de otro rol puede usar los privilegios de ese rol.
Columna de identidad
Una columna de identidad obtiene sus valores automáticamente de una secuencia implícita. Es la forma estándar de SQL de crear una clave autoincremental en PostgreSQL.
Búsqueda de texto completo
La búsqueda de texto completo encuentra documentos por palabras en lugar de por subcadenas exactas, mediante tsvector, tsquery y el operador @@. Un índice GIN la hace rápida.