Ir al contenido
learn

PostgreSQL y Amazon Aurora — Misión

He pasado años con SQL Server: T-SQL, SSMS, planes de ejecución, columnas IDENTITY, migraciones de Entity Framework. Cada vez más proyectos que encuentro empiezan en PostgreSQL, a menudo en un servicio gestionado como Amazon Aurora, y me di cuenta de que escribía SQL Server con la sintaxis de PostgreSQL. Funciona, hasta que un nombre de columna tiene una mayúscula, un DateTime vuelve con tres horas de diferencia, o un pool de cien conexiones se encuentra con un servidor que permite cien.

Quiero conocer PostgreSQL tal como es: sus tipos, su SQL, cómo ejecuta las transacciones y usa los índices, cómo replica y cómo se hace su copia de seguridad. Después quiero saber qué cambia Aurora: qué gestiona AWS por mí, qué pierdo y cuánto cuesta.

Eres desarrollador C# o Java. Conoces el SQL de SQL Server o de otra base de datos: joins, agrupaciones, índices, transacciones. Ya has ejecutado un contenedor. No necesitas conocer PostgreSQL. El lado Java supone el nivel de Java para desarrolladores C#; la lección 4 remite las preguntas de Spring Data a Spring Boot, Spring Cloud y Reactor para desarrolladores C#, y la lección 1 remite las preguntas de contenedores a Contenedores WSL. El curso de DuckDB consulta los mismos datos de CI con un motor analítico: es una buena comparación, no un requisito previo.

SQL Server, PostgreSQL y Aurora en una tabla

Sección titulada «SQL Server, PostgreSQL y Aurora en una tabla»
SQL Server PostgreSQL Aurora PostgreSQL
Licencia comercial (ediciones Express y Developer gratuitas) PostgreSQL License, código abierto un servicio gestionado de AWS, facturado por instancia o unidad de capacidad, almacenamiento y E/S
Servidor un proceso, hilos un proceso por conexión el motor de PostgreSQL sobre el almacenamiento distribuido de AWS
Nivel superior instancia → bases de datos → esquemas clúster → bases de datos → esquemas DB cluster: un writer, readers, un volumen de almacenamiento compartido
Cuenta de administración sa, sysadmin postgres, un superusuario un miembro de rds_superuser, nunca un superusuario real
Herramienta cliente sqlcmd, SSMS psql, pgAdmin psql y la consola de AWS
Desde .NET Microsoft.Data.SqlClient Npgsql Npgsql
Desde Java driver JDBC de Microsoft driver JDBC de PostgreSQL driver JDBC de PostgreSQL, o el AWS Advanced JDBC Wrapper

El curso reutiliza datos que este sitio ya publica, en lugar de una tienda o una biblioteca inventada:

La lección 2 construye el modelo que cada lección posterior carga desde sql/schema.sql:

erDiagram
RUNS ||--o{ JOBS : "tiene"
JOBS ||--o{ STEPS : "tiene"
PROJECTS ||--o{ PROJECT_REFS : "referencia"
PROJECTS ||--o{ PACKAGE_REFS : "usa"
RUNS {
bigint run_id PK
text workflow_name
conclusion conclusion
timestamptz started_at
}
JOBS {
bigint job_id PK
text_array labels
interval duration "generada"
}
STEPS {
smallint number PK
tstzrange ran "generada"
}
PROJECTS {
text path PK
text_array frameworks
boolean in_solution
}
ICONIC_CHORDS {
integer chord_id PK
pitch_class_array pitch_classes
smallint_array guitar_voicing
}

El esquema ci contiene las tres primeras tablas, el esquema ga las demás.

  • ejecutar PostgreSQL en un contenedor y trabajar en psql, con bases de datos, esquemas, roles y privilegios;
  • elegir los tipos de PostgreSQL a propósito: text, numeric, timestamptz, uuid, jsonb, arrays y rangos, con restricciones, dominios y columnas generadas;
  • escribir el SQL que PostgreSQL hace mejor que T-SQL: CTE recursivas, funciones de ventana, LATERAL, DISTINCT ON, RETURNING, upserts y MERGE;
  • usar PostgreSQL desde C# con Npgsql y EF Core, y desde Java con JDBC y HikariCP, incluidos los pools, las sentencias preparadas y COPY;
  • leer un plan de consulta y elegir el índice adecuado: B-tree, GIN, GiST, BRIN, índices parciales y de expresión;
  • explicar MVCC, los niveles de aislamiento, los bloqueos y VACUUM, y reproducir un deadlock;
  • guardar y buscar JSON y texto, y escribir funciones, triggers y extensiones;
  • particionar tablas grandes, replicarlas, hacer copias de seguridad, restaurarlas y actualizarlas;
  • ejecutar la misma base de datos en Amazon Aurora PostgreSQL, sabiendo qué difiere, y estimar cuánto cuesta, incluida una migración desde SQL Server.
# Lección Si conoces SQL Server
1 Primeros pasos: un contenedor, psql, bases de datos, esquemas y roles sqlcmd, logins y usuarios, dbo, TOP, IDENTITY
2 Tipos y modelado datetimeoffset, nvarchar, columnas calculadas, índices únicos y NULL
3 Consultas: CTE, ventanas, LATERAL, upserts y MERGE CROSS APPLY, OUTPUT inserted.*, MERGE
4 PostgreSQL desde C# y Java pool de SqlConnection, SqlBulkCopy, proveedores de EF Core
5 Índices y planes: B-tree, GIN, BRIN, EXPLAIN (ANALYZE, BUFFERS) planes de ejecución, columnas incluidas, índices filtrados
6 Transacciones y MVCC: niveles de aislamiento, bloqueos, VACUUM, bloat, deadlocks READ_COMMITTED_SNAPSHOT, el version store
7 JSON y búsqueda: operadores e índices jsonb, búsqueda de texto completo, pg_trgm OPENJSON, catálogos de texto completo
8 Funciones y extensiones: PL/pgSQL, triggers, pgvector procedimientos T-SQL, CLR
9 Particionado y tablas grandes funciones y esquemas de partición, SWITCH
10 Replicación y alta disponibilidad: WAL, replicación física y lógica grupos de disponibilidad Always On, replicación transaccional
11 Copia de seguridad, restauración y actualizaciones: pg_dump, recuperación a un momento dado, pg_upgrade BACKUP, RESTORE … STOPAT, actualizaciones en el sitio
12 Amazon Aurora PostgreSQL: almacenamiento, réplicas y conmutación por error, endpoints, Aurora Serverless, Global Database, RDS Proxy, autenticación IAM Azure SQL Database, Hyperscale
13 Migrar desde SQL Server, y costes: una migración a mano, con un programa y con pgloader, AWS DMS, Babelfish, precios de Aurora el Data Migration Assistant, SqlBulkCopy

Cada una de las lecciones 1 a 11 termina con una sección breve sobre lo que cambia en Aurora, según la documentación de AWS; la lección 12 trata de Aurora en sí, con una conmutación por error reproducida en local; la lección 13 traslada una base de datos SQL Server a PostgreSQL, y después describe AWS DMS, Babelfish y los precios de Aurora. Nada de eso se ejecuta en AWS: el curso no crea ningún recurso de AWS, así que todo lo relativo a Aurora está marcado por verificar.

Diario: lo que probé, lo que me sorprendió, lo que aún tengo que verificar.