Capítulo 1: PostgreSQL - Instalación y Configuración
Introducción
PostgreSQL es un sistema de gestión de bases de datos relacional (SGBDR) open-source, potente y fiable, utilizado en producción en todo el mundo por empresas como Apple, Spotify, Instagram y Reddit.
¿Por qué PostgreSQL?
Hasta ahora, hemos utilizado H2, una base de datos perfecta para desarrollo y pruebas. Pero para desplegar una aplicación en producción, necesitamos una base de datos robusta, de alto rendimiento y escalable: PostgreSQL.
H2 vs PostgreSQL: Comprender la Diferencia
Tabla Comparativa
| Aspecto | H2 | PostgreSQL |
|---|---|---|
| Tipo | En memoria/archivo local | Servidor dedicado |
| Uso | Desarrollo/Pruebas | Producción |
| Rendimiento | Limitado | Alto rendimiento |
| Usuarios simultáneos | No adecuado | Excelente |
| Herramientas | Consola básica | pgAdmin, DBeaver, etc. |
| Escalabilidad | Baja | Excelente |
| Backup | Manual/complejo | Nativo y automatizado |
| Seguridad | Básica | Avanzada (roles, permisos) |
Analogía
H2 = Bicicleta 🚲
- Perfecta para aprender y probar
- Fácil de iniciar
- No adecuada para transportar a 100 personas
PostgreSQL = Autobús 🚌
- Diseñado para transporte masivo
- Fiable y robusto
- Requiere un permiso especial (configuración)
Instalación de PostgreSQL
Windows
Paso 1: Descarga
Vaya a: postgresql.org/download/windows
Descargue PostgreSQL 14+ (o versión más reciente).
Paso 2: Instalación
- Ejecute el instalador
- Siga el asistente de instalación
- IMPORTANTE: Anote la contraseña del usuario
postgres(¡la necesitará!) - Puerto por defecto: 5432 (déjelo tal cual)
- Instale Stack Builder (opcional pero recomendado)
Paso 3: Verificación
Abra una terminal y escriba:
psql --version
Debería ver:
psql (PostgreSQL) 14.x
macOS
Vía Homebrew:
brew install postgresql@14
brew services start postgresql@14
Verificación:
psql --version
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql
Primeros Pasos con PostgreSQL
Conectarse a PostgreSQL
Windows (vía psql):
psql -U postgres
Ingrese la contraseña que definió durante la instalación.
macOS/Linux:
sudo -u postgres psql
Comandos SQL Básicos
1. Listar las Bases de Datos
\l
Verá las bases por defecto:
postgres
template0
template1
2. Crear una Base de Datos
CREATE DATABASE greeting_db;
Resultado:
CREATE DATABASE
3. Conectarse a una Base
\c greeting_db
Resultado:
You are now connected to database "greeting_db" as user "postgres".
4. Listar las Tablas
\dt
Al principio, no habrá ninguna tabla.
5. Ver la Estructura de una Tabla
\d nom_table
6. Salir de psql
\q
Configuración de Spring Boot para PostgreSQL
Paso 1: Agregar la Dependencia Maven
Archivo: pom.xml
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
Nota: El <scope>runtime</scope> indica que esta dependencia solo es necesaria en tiempo de ejecución, no en compilación.
Paso 2: Crear la Base de Datos
Antes de configurar Spring Boot, cree la base de datos:
psql -U postgres
CREATE DATABASE greeting_db;
\q
Paso 3: Configuración application.yml
Archivo: src/main/resources/application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/greeting_db
username: postgres
password: votre_mot_de_passe
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
Explicaciones:
| Propiedad | Significado |
|---|---|
url | Dirección de la base (localhost:5432/nombre_base) |
username | Usuario de PostgreSQL (por defecto: postgres) |
password | Contraseña definida en la instalación |
driver-class-name | Driver JDBC para PostgreSQL |
ddl-auto: update | Hibernate actualiza el esquema automáticamente |
show-sql: true | Muestra las consultas SQL en la consola |
dialect | Dialecto SQL específico de PostgreSQL |
format_sql: true | Da formato a las consultas SQL para mayor legibilidad |
Probar la Conexión
Crear una Entidad Simple
Archivo: model/Product.java
package com.example.demo.model;
import jakarta.persistence.*;
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Double price;
// Constructeurs
public Product() {}
public Product(String name, Double price) {
this.name = name;
this.price = price;
}
// Getters et Setters
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Double getPrice() { return price; }
public void setPrice(Double price) { this.price = price; }
}
Iniciar la Aplicación
mvn clean install -DskipTests spring-boot:run
Consola:
Hibernate:
create table products (
id bigserial not null,
name varchar(255),
price float8,
primary key (id)
)
✅ ¡PostgreSQL crea automáticamente la tabla!
Verificar en PostgreSQL
psql -U postgres -d greeting_db
\dt
Resultado:
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | products | table | postgres
\d products
Resultado:
Table "public.products"
Column | Type | Collation | Nullable | Default
--------+------------------------+-----------+----------+--------------------------------------
id | bigint | | not null | nextval('products_id_seq'::regclass)
name | character varying(255) | | |
price | double precision | | |
✅ ¡La tabla existe en PostgreSQL!
Herramientas de Administración
pgAdmin
Instalación:
Descargue desde: pgadmin.org
Uso:
- Abra pgAdmin
- Cree una nueva conexión de servidor
- Nombre:
Local PostgreSQL - Host:
localhost - Puerto:
5432 - Usuario:
postgres - Contraseña: Su contraseña
Funcionalidades:
- Interfaz gráfica intuitiva
- Explorador de bases de datos
- Editor SQL
- Visualización de datos
- Gestión de usuarios y permisos
DBeaver
Instalación:
Descargue desde: dbeaver.io
Ventajas:
- Gratuito y open-source
- Soporte para múltiples bases de datos (PostgreSQL, MySQL, Oracle, etc.)
- Interfaz moderna
- Autocompletado SQL
- Visualización de datos
Seguridad y Mejores Prácticas
1. Nunca Hardcodear Contraseñas
❌ MALO:
spring:
datasource:
password: monMotDePasse123
✅ BUENO:
spring:
datasource:
password: ${DB_PASSWORD}
Variable de entorno (Windows):
$env:DB_PASSWORD = "monMotDePasse123"
mvn spring-boot:run
Variable de entorno (Linux/macOS):
export DB_PASSWORD="monMotDePasse123"
mvn spring-boot:run
2. Crear un Usuario Dedicado (Producción)
¡No use postgres en producción!
-- Crear un usuario
CREATE USER myapp_user WITH PASSWORD 'secure_password';
-- Crear una base
CREATE DATABASE myapp_db OWNER myapp_user;
-- Otorgar los permisos
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;
Configuración Spring Boot:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/myapp_db
username: myapp_user
password: ${DB_PASSWORD}
3. Limitar los Permisos
-- Otorgar solo los permisos necesarios
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myapp_user;
Resumen
Lo que Ha Aprendido
✅ Instalar PostgreSQL en Windows/Mac/Linux
✅ Crear bases de datos y usuarios
✅ Configurar Spring Boot para PostgreSQL
✅ Utilizar pgAdmin y DBeaver
✅ Proteger las conexiones con variables de entorno
✅ Comprender las diferencias entre H2 y PostgreSQL
Puntos Clave
PostgreSQL = Listo para Producción
- Robusto y fiable
- Rendimiento con muchos usuarios
- Herramientas de administración profesionales
- Seguridad avanzada
Configuración Spring Boot = Sencilla
- 1 dependencia Maven
- 1 archivo
application.yml - Hibernate gestiona el esquema automáticamente
Próximo Paso
Ahora que PostgreSQL está configurado, pasemos al Capítulo 2 para comprender Jakarta vs Javax Persistence.