Gerando o seed.sql para inicialização do banco no Docker

Passo a passo para criar e manter atualizado o arquivo seed.sql, usado para inicializar o banco de dados com esquema, usuário e permissões.

Objetivo: gerar um arquivo seed.sql que inicializa o banco com esquema, usuário de aplicação e permissões de aplicação. Observação: os itens “usuário” e “permissões” abaixo referem-se às tabelas da aplicação (ex.: user_system, permissions), não a roles do PostgreSQL.


Pré-requisitos

  • Docker e Docker Compose instalados.
  • Acesso ao banco remoto postgres.c3sl.ufpr.br com o usuário ademir.
  • Arquitetura do projeto contendo a pasta database/.

0) Backup do seed atual (opcional, recomendado)

Renomeie o seed atual para manter como backup.

mv database/seed.sql database/seed_$(date +%Y%m%d_%H%M%S).sql

1) Exportar apenas o esquema do banco remoto

Na raiz do projeto, execute:

pg_dump -h postgres.c3sl.ufpr.br -U ademir -d ademir --schema-only > database/seed.sql

Quando solicitado, insira a senha do banco.

Dica: para evitar prompt interativo, você pode usar PGPASSWORD=suasenha pg_dump ....


2) Subir o Postgres local via Docker Compose

docker compose up postgres -d

3) Acessar o banco dentro do container

docker exec -it ademir-db psql -U ademir -d ademir

4) Criar permissões na tabela permissions

INSERT INTO permissions (name, "createdAt", "updatedAt")
SELECT 'admin', NOW(), NOW()
WHERE NOT EXISTS (
    SELECT 1 FROM permissions WHERE name = 'admin'
);

INSERT INTO permissions (name, "createdAt", "updatedAt")
SELECT 'common', NOW(), NOW()
WHERE NOT EXISTS (
    SELECT 1 FROM permissions WHERE name = 'common'
);

INSERT INTO permissions (name, "createdAt", "updatedAt")
SELECT 'manager', NOW(), NOW()
WHERE NOT EXISTS (
    SELECT 1 FROM permissions WHERE name = 'manager'
);

5) Criar usuário inicial admin

INSERT INTO user_system (
    name, 
    email, 
    password, 
    is_active, 
    "isEmailVerified", 
    register_date, 
    verification_date, 
    last_login
) VALUES (
    'admin',
    'admin@mail.com',
    'mudar123*',  -- ⚠️ idealmente armazenar com hash
    TRUE,
    TRUE,
    NOW(),
    NOW(),
    NOW()
);

6) Gerar o novo seed.sql com dados

Ainda na raiz do projeto, execute:

docker exec -it ademir-db pg_dump -U ademir -d ademir > database/seed.sql
Última modificação September 15, 2025: Issue #358: FIX input cleanups after submition (b78e42a)