SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
DATABASE MIGRATIONS E SEEDSDATABASE MIGRATIONS E SEEDS
#WHOAMI#WHOAMI
WILLIAM FELIPE WELTERWILLIAM FELIPE WELTER
Gerente da TI na 4Linux
Bacharel em Ciência da Computação
Experiência com desenvolvimento e infraestrutura
DEVOPSDEVOPS
PRINCIPIOSPRINCIPIOS
Sem intervenções manuais
Infra as a Code
Versionamento
Squads focados no produto
Metodologias Ageis
CONTEXTO DEVOPSCONTEXTO DEVOPS
Pipelines
Continous Delivery / Continuos Deploy
Build Automatizado
Testes Automatizados
Deploy Automatizado
MAS, E O BANCO DE DADOS ?MAS, E O BANCO DE DADOS ?
O QUE SÃO MIGRATIONS?O QUE SÃO MIGRATIONS?
MIGRATIONSMIGRATIONS
Versionamento
Automatizado
Alterações de banco dados
FERRAMENTASFERRAMENTAS
Phinx
FlywayDb
Dbmate
Goose
...
PORQUE O PHINX ?PORQUE O PHINX ?
Open Source
Suporte a diversos SGBD
Independente de framework
Simples
UTILIZANDO O PHINXUTILIZANDO O PHINX
INSTALAÇÃOINSTALAÇÃO
Instalar composer
php composer.phar require robmorgan/phinx
CONFIGURAÇÃO (PHINX.YML)CONFIGURAÇÃO (PHINX.YML)
paths:
migrations: migrations
seeds: seeds
environments:
default_migration_table: phinxlog
default_database: local
production:
adapter: pgsql
host: PROD_HOSTNAME
name: PROD_DBNAME
user: PROD_USERNAME
pass: 'PROD_PASSWORD'
port: PROD_PORT
charset: utf8
l l
CONFIGURAÇÃO (PHINX.YML)CONFIGURAÇÃO (PHINX.YML)
Definir diretorios para armazenar as migration e seeds
Nome da tabela que ira registrar as migrations aplicadas
Ambientes
CRIANDO UMA MIGRATIONCRIANDO UMA MIGRATION
phinx create CriaTabelaTurmas
Phinx by CakePHP - https://phinx.org. 0.10.8
using config file ./phinx.yml
using config parser yaml
using migration paths
- /var/www/html/migrations
using seed paths
using migration base class PhinxMigrationAbstractMigration
using default template
created migrations/20190714220515_cria_tabela_turmas.php
ESCREVENDO UMA MIGRATIONESCREVENDO UMA MIGRATION
use PhinxMigrationAbstractMigration;
class CriaTabelaTurmas extends AbstractMigration
{
public function change()
{
$class=$this->table("class");
$class->addColumn('date_begin','date')
->addColumn('date_end','date')
->addColumn('course_id','integer')
->addColumn('deleted','boolean',array(
'null'=>false,
'default' => 'false'
))
->create();
}
METODO CHANGE()METODO CHANGE()
Reversivel - "Automagico"
Não se deve utilizar SQL puro
Não se deve inserir dados
Utilizar create() ou update()
METODO UP()METODO UP()
O que deve ser feito quando migração for aplicada
Ideal quando quando dados são manipulados
(inserção/atualização)
Permite uso de SQL puro
UP()UP()
use PhinxMigrationAbstractMigration;
class CriarColunaUpdatedAt extends AbstractMigration
{
public function up()
{
$this->execute("ALTER TABLE class ADD COLUMN updated_at times
}
}
METODO DOWN()METODO DOWN()
O que deve ser feito quando acontece um rollback de uma
migração
Permite criar rollback não destrutivos
Não obrigatorio
DOWN()DOWN()
use PhinxMigrationAbstractMigration;
class CriarColunaUpdatedAt extends AbstractMigration
{
public function up()
{
$this->execute("ALTER TABLE class ADD COLUMN updated_at times
}
public function down(){
$this->execute("ALTER TABLE class DROP COLUMN updated_at");
}
}
UTILIZANDO A API DO PHINXUTILIZANDO A API DO PHINX
+ Abstração de SGBD
+ Reversivel
- Flexibilidade
- Não utiliza recursos especificos do SGBD
UTILIZANDO A API DO PHINXUTILIZANDO A API DO PHINX
Objeto Table
execute()
query()
fetchRow() / fetchAll()
insert()
OBJETO TABLEOBJETO TABLE
addColumn(), changeColumn(), removeColumn()
addIndex()
addForeignKey()
save() , create(), update()
DEMODEMO
APLICANDO UMA MIGRATIONAPLICANDO UMA MIGRATION
phinx migrate [-t TARGET] [-e ENVIRONMENT]
APLICANDO UMA MIGRATIONAPLICANDO UMA MIGRATION
$ php vendor/bin/phinx migrate
Phinx by CakePHP - https://phinx.org. 0.10.8
using config file ./phinx.yml
using config parser yaml
using migration paths
- /var/www/html/migrations
using seed paths
warning no environment specified, defaulting to: local
using adapter pgsql
using database postgres
== 20190721015556 CriarColunaUpdatedAt: migrating
== 20190721015556 CriarColunaUpdatedAt: migrated 0.0970s
All Done. Took 0.1143s
ROLLBACK DE MIGRATIONSROLLBACK DE MIGRATIONS
phinx rollback [-t TARGET] [-e ENVIRONMENT]
ROLLBACK DE MIGRATIONSROLLBACK DE MIGRATIONS
$ php vendor/bin/phinx rollback
Phinx by CakePHP - https://phinx.org. 0.10.8
using config file ./phinx.yml
using config parser yaml
using migration paths
- /var/www/html/migrations
using seed paths
warning no environment specified, defaulting to: local
using adapter pgsql
using database postgres
ordering by creation time
== 20190721015556 CriarColunaUpdatedAt: reverting
== 20190721015556 CriarColunaUpdatedAt: reverted 0.0377s
All D T k 0 0603
CONSULTANDO MIGRATIONSCONSULTANDO MIGRATIONS
phinx status [-e ENVIRONMENT]
CONSULTANDO MIGRATIONSCONSULTANDO MIGRATIONS
$ php vendor/bin/phinx status
Phinx by CakePHP - https://phinx.org. 0.10.8
using config file ./phinx.yml
using config parser yaml
using migration paths
- /var/www/html/migrations
using seed paths
warning no environment specified, defaulting to: local
ordering by creation time
Status [Migration ID] Started Finished Mi
---------------------------------------------------------------------
up 20190714220515 2019-07-14 23:57:07 2019-07-14 23:57:07 Cr
up 20190721011004 2019-07-21 01:50:50 2019-07-21 01:50:50 Cr
up 20190721015556 2019-07-21 02:07:21 2019-07-21 02:07:21 Cr
20190721021335 2019 07 21 02 36 51 2019 07 21 02 36 52 C
DEMODEMO
E A SEGURANÇA ?E A SEGURANÇA ?
QUESTÕES DE SEGURANÇAQUESTÕES DE SEGURANÇA
GIT garante -> Rastreabilidade e auditoria
Testes garantem -> Que a migração não "quebrou" a
aplicação
Code Review -> Qualidade e acertividade das migrações
PRECISAMOS ESTAR PREPARADOSPRECISAMOS ESTAR PREPARADOS
PARA O PIOR!PARA O PIOR!
Replicas Hotstandby
Backup P.I.T.R
Replicas Atrasadas
POSSO APLICAR MIGRAÇÕES SEMPOSSO APLICAR MIGRAÇÕES SEM
IMPACTAR A PRODUÇÃO ?IMPACTAR A PRODUÇÃO ?
LOCKS E CONSISTENCIALOCKS E CONSISTENCIA
No PostgreSQL DDLs são transacionais
Migrations podem ser encapsuladas em transações
TRUNCATETRUNCATE
Transacional
Não é MVCC safe
ACCESS EXCLUSIVE LOCK
DELETE (alternativa)
ALTER TABLEALTER TABLE
Transacional
Rewrite / Non Rewrite Operations
ADD COLUMN - Com valor default (Rewrite <= 10) (Non
Rewrite >=11*)
TYPE - Rewrite e Reindex
DROP COLUMN - Non Rewrite
Rewrite não é MVCC safe
ACCESS EXCLUSIVE LOCK
*Não volatil
CREATE INDEX / REINDEXCREATE INDEX / REINDEX
LOCK para escrita
CONCURRENTLY sem LOCK
COMO UTILIZAR NA MINHACOMO UTILIZAR NA MINHA
PIPELINE?PIPELINE?
PIPELINEPIPELINE
Incluir na etapa anterior ao deploy
Encapsular na inicialização da aplicação
Incluir no processo de deploy
DEMODEMO
O SÃO SEEDS ?O SÃO SEEDS ?
SEEDSSEEDS
Inicializar uma base com um conjunto de dados
Util para agilizar testes dependem de dados no banco
Não registra o que foi aplicado
Não segue ordem de execução
CRIANDO UMA SEEDCRIANDO UMA SEED
$ phinx seed:create ClassSeeder
Phinx by CakePHP - https://phinx.org. 0.10.8
using config file ./phinx.yml
using config parser yaml
using migration paths
- /home/william/Documents/pgconf2019/src/migrations
using seed paths
- /home/william/Documents/pgconf2019/src/seeds
using seed base class PhinxSeedAbstractSeed
created ./seeds/ClassSeeder.php
ESCREVENDO UMA SEEDESCREVENDO UMA SEED
use PhinxSeedAbstractSeed;
class ClassStatusSeeder extends AbstractSeed
{
public function run()
{
$status=$this->table('status');
$data=[
[
'id' => '101',
'name' => 'arguardando_sala',
'description' => 'Aguardando liberacao de sala'
]
];
$status->insert($data);
}
METODO RUN()METODO RUN()
Não é reversivel
É onde deve ser inseridos os dados
METODO GETDEPENDENCIES()METODO GETDEPENDENCIES()
Utilizado para estabelecer dependencias
Deve retornar array com as classes dependentes
METODO GETDEPENDENCIES()METODO GETDEPENDENCIES()
use PhinxSeedAbstractSeed;
class ClassSeeder extends AbstractSeed
{
public function getDependencies(){
return [
'ClassStatusSeeder'
];
}
public function run()
{
$class=$this->table('class');
$data = [
/*T l d */
APLICANDO SEEDSAPLICANDO SEEDS
phinx seed:run [-s SEED] [-e ENVIRONMENT]
APLICANDO SEEDSAPLICANDO SEEDS
phinx seed:run
Phinx by CakePHP - https://phinx.org. 0.10.8
using config file ./phinx.yml
using config parser yaml
using migration paths
- /var/www/html/migrations
using seed paths
- /var/www/html/seeds
warning no environment specified, defaulting to: local
using adapter pgsql
using database postgres
== ClassStatusSeeder: seeding
== ClassStatusSeeder: seeded 0.0301s
Cl S d di
OBRIGADOOBRIGADO
WILLIAM FELIPE WELTERWILLIAM FELIPE WELTER
WILLIAM.WELTER@4LINUX.COM.BRWILLIAM.WELTER@4LINUX.COM.BR
BR.LINKEDIN.COM/IN/WILLIAMFELIPEWELTEBR.LINKEDIN.COM/IN/WILLIAMFELIPEWELTE
RR
GITHUB.COM/WFELIPEWGITHUB.COM/WFELIPEW

Mais conteúdo relacionado

Mais procurados

Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFIntrodução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFRafael T. C. Soares (tuelho)
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosEduardo Legatti
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Rogério Moraes de Carvalho
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 

Mais procurados (7)

Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFIntrodução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - Nagios
 
Consegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + PuppetConsegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + Puppet
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 

Semelhante a Database migration e seeds

Fazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFabio Telles Rodriguez
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaRodrigo Marques Teixeira
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFabio Telles Rodriguez
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkMarcelo Rodrigo
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresqlGerdan Santos
 
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018Davy Alvarenga Machado
 
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Frederico Garcia Costa
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openrukoÉverton Ribeiro
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerWellington Silva
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoGuilhermeJorgeAragod
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...tdc-globalcode
 

Semelhante a Database migration e seeds (20)

Fazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISL
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresql
 
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
 
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openruko
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com Docker
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Multitenancy
MultitenancyMultitenancy
Multitenancy
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
Zabbix 3 0-cinfotec
Zabbix 3 0-cinfotecZabbix 3 0-cinfotec
Zabbix 3 0-cinfotec
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
 

Database migration e seeds