Saltar al contenido principal

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​

AspectoH2PostgreSQL
TipoEn memoria/archivo localServidor dedicado
UsoDesarrollo/PruebasProducción
RendimientoLimitadoAlto rendimiento
Usuarios simultáneosNo adecuadoExcelente
HerramientasConsola básicapgAdmin, DBeaver, etc.
EscalabilidadBajaExcelente
BackupManual/complejoNativo y automatizado
SeguridadBásicaAvanzada (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

  1. Ejecute el instalador
  2. Siga el asistente de instalación
  3. IMPORTANTE: Anote la contraseña del usuario postgres (¡la necesitará!)
  4. Puerto por defecto: 5432 (déjelo tal cual)
  5. 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:

PropiedadSignificado
urlDirección de la base (localhost:5432/nombre_base)
usernameUsuario de PostgreSQL (por defecto: postgres)
passwordContraseña definida en la instalación
driver-class-nameDriver JDBC para PostgreSQL
ddl-auto: updateHibernate actualiza el esquema automáticamente
show-sql: trueMuestra las consultas SQL en la consola
dialectDialecto SQL específico de PostgreSQL
format_sql: trueDa 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:

  1. Abra pgAdmin
  2. Cree una nueva conexión de servidor
  3. Nombre: Local PostgreSQL
  4. Host: localhost
  5. Puerto: 5432
  6. Usuario: postgres
  7. 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.

➡️ Capítulo 2: Jakarta vs Javax

⬅️ Volver al Módulo 4