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
| Aspecto | H2 | PostgreSQL |
|---|---|---|
| Tipo | Em memória/arquivo local | Servidor dedicado |
| Uso | Desenvolvimento/Testes | Produção |
| Performance | Limitada | Alta performance |
| Usuários simultâneos | Não recomendado | Excelente |
| Ferramentas | Console básico | pgAdmin, DBeaver, etc. |
| Escalabilidade | Baixa | Excelente |
| Backup | Manual/complexo | Nativo e automatizado |
| Segurança | Básica | Avanç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
- Execute o instalador
- Siga o assistente de instalação
- IMPORTANTE: Anote a senha do usuário
postgres(você vai precisar dela!) - Porta padrão: 5432 (deixe como está)
- 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:
| Propriedade | Significado |
|---|---|
url | Endereço do banco (localhost:5432/nome_banco) |
username | Usuário do PostgreSQL (padrão: postgres) |
password | Senha definida na instalação |
driver-class-name | Driver JDBC para PostgreSQL |
ddl-auto: update | Hibernate atualiza o schema automaticamente |
show-sql: true | Mostra as queries SQL no console |
dialect | Dialeto SQL específico do PostgreSQL |
format_sql: true | Formata 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:
- Abra o pgAdmin
- Crie uma nova conexão de servidor
- Nome:
Local PostgreSQL - Host:
localhost - Porta:
5432 - Username:
postgres - 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.