Pular para o conteúdo principal

Capítulo 1: PostgreSQL - Instalação e Configuração

Introdução​

PostgreSQL é um sistema de gerenciamento de banco de dados relacional (SGBDR) open-source, poderoso e confiável, utilizado em produção no mundo todo por empresas como Apple, Spotify, Instagram e Reddit.

Por que PostgreSQL?

Até agora, utilizamos o H2, um banco de dados perfeito para desenvolvimento e testes. Mas para fazer o deploy de uma aplicação em produção, precisamos de um banco de dados robusto, performático e escalável: PostgreSQL.


H2 vs PostgreSQL: Entendendo a Diferença​

Tabela Comparativa​

AspectoH2PostgreSQL
TipoEm memória/arquivo localServidor dedicado
UsoDesenvolvimento/TestesProdução
PerformanceLimitadaAlta performance
Usuários simultâneosNão recomendadoExcelente
FerramentasConsole básicopgAdmin, DBeaver, etc.
EscalabilidadeBaixaExcelente
BackupManual/complexoNativo e automatizado
SegurançaBásicaAvançada (roles, permissões)

Analogia​

H2 = Bicicleta 🚲

  • Perfeito para aprender e testar
  • Fácil de começar
  • Não serve para transportar 100 pessoas

PostgreSQL = Ônibus 🚌

  • Projetado para transporte em massa
  • Confiável e robusto
  • Requer uma habilitação especial (configuração)

Instalação do PostgreSQL​

Windows​

Etapa 1: Download

Acesse: postgresql.org/download/windows

Baixe o PostgreSQL 14+ (ou versão mais recente).

Etapa 2: Instalação

  1. Execute o instalador
  2. Siga o assistente de instalação
  3. IMPORTANTE: Anote a senha do usuário postgres (você vai precisar dela!)
  4. Porta padrão: 5432 (deixe como está)
  5. Instale o Stack Builder (opcional, mas recomendado)

Etapa 3: Verificação

Abra um terminal e digite:

psql --version

Você deve ver:

psql (PostgreSQL) 14.x

macOS​

Via Homebrew:

brew install postgresql@14
brew services start postgresql@14

Verificação:

psql --version

Linux (Ubuntu/Debian)​

sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql

Primeiros Passos com PostgreSQL​

Conectando ao PostgreSQL​

Windows (via psql):

psql -U postgres

Digite a senha que você definiu durante a instalação.

macOS/Linux:

sudo -u postgres psql

Comandos SQL Básicos​

1. Listar os Bancos de Dados​

\l

Você verá os bancos padrão:

postgres
template0
template1

2. Criar um Banco de Dados​

CREATE DATABASE greeting_db;

Resultado:

CREATE DATABASE

3. Conectar a um Banco​

\c greeting_db

Resultado:

You are now connected to database "greeting_db" as user "postgres".

4. Listar as Tabelas​

\dt

No início, não haverá nenhuma tabela.


5. Ver a Estrutura de uma Tabela​

\d nome_tabela

6. Sair do psql​

\q

Configuração do Spring Boot para PostgreSQL​

Etapa 1: Adicionar a Dependência Maven​

Arquivo: pom.xml

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>

Nota: O <scope>runtime</scope> indica que essa dependência é necessária apenas em tempo de execução, não na compilação.


Etapa 2: Criar o Banco de Dados​

Antes de configurar o Spring Boot, crie o banco de dados:

psql -U postgres
CREATE DATABASE greeting_db;
\q

Etapa 3: Configuração application.yml​

Arquivo: src/main/resources/application.yml

spring:
datasource:
url: jdbc:postgresql://localhost:5432/greeting_db
username: postgres
password: sua_senha
driver-class-name: org.postgresql.Driver

jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true

Explicações:

PropriedadeSignificado
urlEndereço do banco (localhost:5432/nome_banco)
usernameUsuário do PostgreSQL (padrão: postgres)
passwordSenha definida na instalação
driver-class-nameDriver JDBC para PostgreSQL
ddl-auto: updateHibernate atualiza o schema automaticamente
show-sql: trueMostra as queries SQL no console
dialectDialeto SQL específico do PostgreSQL
format_sql: trueFormata as queries SQL para melhor leitura

Testando a Conexão​

Criar uma Entidade Simples​

Arquivo: 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;

// Construtores
public Product() {}

public Product(String name, Double price) {
this.name = name;
this.price = price;
}

// Getters e 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 a Aplicação​

mvn clean install -DskipTests spring-boot:run

Console:

Hibernate: 
create table products (
id bigserial not null,
name varchar(255),
price float8,
primary key (id)
)

✅ O PostgreSQL cria a tabela automaticamente!


Verificar no 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 | | |

✅ A tabela existe no PostgreSQL!


Ferramentas de Administração​

pgAdmin​

Instalação:

Baixe em: pgadmin.org

Uso:

  1. Abra o pgAdmin
  2. Crie uma nova conexão de servidor
  3. Nome: Local PostgreSQL
  4. Host: localhost
  5. Porta: 5432
  6. Username: postgres
  7. Password: Sua senha

Funcionalidades:

  • Interface gráfica intuitiva
  • Explorador de bancos de dados
  • Editor SQL
  • Visualização de dados
  • Gerenciamento de usuários e permissões

DBeaver​

Instalação:

Baixe em: dbeaver.io

Vantagens:

  • Gratuito e open-source
  • Suporte a múltiplos bancos de dados (PostgreSQL, MySQL, Oracle, etc.)
  • Interface moderna
  • Auto-complete SQL
  • Visualização de dados

Segurança e Boas Práticas​

1. Nunca Hardcode Senhas​

❌ RUIM:

spring:
datasource:
password: minhaSenha123

✅ BOM:

spring:
datasource:
password: ${DB_PASSWORD}

Variável de ambiente (Windows):

$env:DB_PASSWORD = "minhaSenha123"
mvn spring-boot:run

Variável de ambiente (Linux/macOS):

export DB_PASSWORD="minhaSenha123"
mvn spring-boot:run

2. Criar um Usuário Dedicado (Produção)​

Não use postgres em produção!

-- Criar um usuário
CREATE USER myapp_user WITH PASSWORD 'secure_password';

-- Criar um banco
CREATE DATABASE myapp_db OWNER myapp_user;

-- Conceder permissões
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;

Configuração Spring Boot:

spring:
datasource:
url: jdbc:postgresql://localhost:5432/myapp_db
username: myapp_user
password: ${DB_PASSWORD}

3. Limitar Permissões​

-- Conceder apenas as permissões necessárias
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myapp_user;

Resumo​

O que Você Aprendeu​

✅ Instalar o PostgreSQL no Windows/Mac/Linux
✅ Criar bancos de dados e usuários
✅ Configurar o Spring Boot para PostgreSQL
✅ Utilizar pgAdmin e DBeaver
✅ Proteger conexões com variáveis de ambiente
✅ Entender as diferenças entre H2 e PostgreSQL


Pontos-Chave​

PostgreSQL = Pronto para Produção

  • Robusto e confiável
  • Performático com muitos usuários
  • Ferramentas de administração profissionais
  • Segurança avançada

Configuração Spring Boot = Simples

  • 1 dependência Maven
  • 1 arquivo application.yml
  • Hibernate gerencia o schema automaticamente

Próximo Passo​

Agora que o PostgreSQL está configurado, vamos para o Capítulo 2 para entender Jakarta vs Javax Persistence.

➡️ Capítulo 2: Jakarta vs Javax

⬅️ Voltar ao Módulo 4