DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO...

53
DATABASE MIGRATIONS E SEEDS DATABASE MIGRATIONS E SEEDS

Transcript of DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO...

Page 1: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

DATABASE MIGRATIONS E SEEDSDATABASE MIGRATIONS E SEEDS

Page 2: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

#WHOAMI#WHOAMIWILLIAM FELIPE WELTERWILLIAM FELIPE WELTER

Gerente da TI na 4LinuxBacharel em Ciência da ComputaçãoExperiência com desenvolvimento e infraestrutura

Page 3: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

DEVOPSDEVOPS

Page 4: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

PRINCIPIOSPRINCIPIOSSem intervenções manuaisInfra as a CodeVersionamentoSquads focados no produtoMetodologias Ageis

Page 5: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

CONTEXTO DEVOPSCONTEXTO DEVOPSPipelinesContinous Delivery / Continuos DeployBuild AutomatizadoTestes AutomatizadosDeploy Automatizado

Page 6: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

MAS, E O BANCO DE DADOS ?MAS, E O BANCO DE DADOS ?

Page 7: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

O QUE SÃO MIGRATIONS?O QUE SÃO MIGRATIONS?

Page 8: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

MIGRATIONSMIGRATIONSVersionamentoAutomatizadoAlterações de banco dados

Page 9: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

FERRAMENTASFERRAMENTASPhinxFlywayDbDbmateGoose...

Page 10: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

PORQUE O PHINX ?PORQUE O PHINX ?Open SourceSuporte a diversos SGBDIndependente de frameworkSimples

Page 11: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

UTILIZANDO O PHINXUTILIZANDO O PHINX

Page 12: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

INSTALAÇÃOINSTALAÇÃOInstalar composerphp composer.phar require robmorgan/phinx

Page 13: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

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

Page 14: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

CONFIGURAÇÃO (PHINX.YML)CONFIGURAÇÃO (PHINX.YML)Definir diretorios para armazenar as migration e seedsNome da tabela que ira registrar as migrations aplicadasAmbientes

Page 15: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

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 Phinx\Migration\AbstractMigration using default template created migrations/20190714220515_cria_tabela_turmas.php

Page 16: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

ESCREVENDO UMA MIGRATIONESCREVENDO UMA MIGRATION

use Phinx\Migration\AbstractMigration; 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(); }

Page 17: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

METODO CHANGE()METODO CHANGE()Reversivel - "Automagico"Não se deve utilizar SQL puroNão se deve inserir dadosUtilizar create() ou update()

Page 18: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

METODO UP()METODO UP()O que deve ser feito quando migração for aplicadaIdeal quando quando dados são manipulados(inserção/atualização)Permite uso de SQL puro

Page 19: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

UP()UP()

use Phinx\Migration\AbstractMigration; class CriarColunaUpdatedAt extends AbstractMigration { public function up() { $this->execute("ALTER TABLE class ADD COLUMN updated_at times } }

Page 20: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

METODO DOWN()METODO DOWN()O que deve ser feito quando acontece um rollback de umamigraçãoPermite criar rollback não destrutivosNão obrigatorio

Page 21: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

DOWN()DOWN()

use Phinx\Migration\AbstractMigration; 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"); } }

Page 22: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

UTILIZANDO A API DO PHINXUTILIZANDO A API DO PHINX+ Abstração de SGBD+ Reversivel- Flexibilidade- Não utiliza recursos especificos do SGBD

Page 23: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

UTILIZANDO A API DO PHINXUTILIZANDO A API DO PHINXObjeto Tableexecute()query()fetchRow() / fetchAll()insert()

Page 24: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

OBJETO TABLEOBJETO TABLEaddColumn(), changeColumn(), removeColumn()addIndex()addForeignKey()save() , create(), update()

Page 25: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

DEMODEMO

Page 26: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

APLICANDO UMA MIGRATIONAPLICANDO UMA MIGRATIONphinx migrate [-t TARGET] [-e ENVIRONMENT]

Page 27: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

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

Page 28: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

ROLLBACK DE MIGRATIONSROLLBACK DE MIGRATIONSphinx rollback [-t TARGET] [-e ENVIRONMENT]

Page 29: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

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

Page 30: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

CONSULTANDO MIGRATIONSCONSULTANDO MIGRATIONSphinx status [-e ENVIRONMENT]

Page 31: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

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

Page 32: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

DEMODEMO

Page 33: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

E A SEGURANÇA ?E A SEGURANÇA ?

Page 34: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

QUESTÕES DE SEGURANÇAQUESTÕES DE SEGURANÇAGIT garante -> Rastreabilidade e auditoriaTestes garantem -> Que a migração não "quebrou" aaplicaçãoCode Review -> Qualidade e acertividade das migrações

Page 35: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

PRECISAMOS ESTAR PREPARADOSPRECISAMOS ESTAR PREPARADOSPARA O PIOR!PARA O PIOR!

Replicas HotstandbyBackup P.I.T.RReplicas Atrasadas

Page 36: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

POSSO APLICAR MIGRAÇÕES SEMPOSSO APLICAR MIGRAÇÕES SEMIMPACTAR A PRODUÇÃO ?IMPACTAR A PRODUÇÃO ?

Page 37: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

LOCKS E CONSISTENCIALOCKS E CONSISTENCIANo PostgreSQL DDLs são transacionaisMigrations podem ser encapsuladas em transações

Page 38: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

TRUNCATETRUNCATETransacionalNão é MVCC safeACCESS EXCLUSIVE LOCKDELETE (alternativa)

Page 39: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

ALTER TABLEALTER TABLETransacionalRewrite / Non Rewrite OperationsADD COLUMN - Com valor default (Rewrite <= 10) (NonRewrite >=11*)TYPE - Rewrite e ReindexDROP COLUMN - Non RewriteRewrite não é MVCC safeACCESS EXCLUSIVE LOCK*Não volatil

Page 40: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

CREATE INDEX / REINDEXCREATE INDEX / REINDEXLOCK para escritaCONCURRENTLY sem LOCK

Page 41: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

COMO UTILIZAR NA MINHACOMO UTILIZAR NA MINHAPIPELINE?PIPELINE?

Page 42: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

PIPELINEPIPELINEIncluir na etapa anterior ao deployEncapsular na inicialização da aplicaçãoIncluir no processo de deploy

Page 43: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

DEMODEMO

Page 44: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

O SÃO SEEDS ?O SÃO SEEDS ?

Page 45: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

SEEDSSEEDSInicializar uma base com um conjunto de dadosUtil para agilizar testes dependem de dados no bancoNão registra o que foi aplicadoNão segue ordem de execução

Page 46: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

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 Phinx\Seed\AbstractSeed created ./seeds/ClassSeeder.php

Page 47: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

ESCREVENDO UMA SEEDESCREVENDO UMA SEED

use Phinx\Seed\AbstractSeed; 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);

}

Page 48: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

METODO RUN()METODO RUN()Não é reversivelÉ onde deve ser inseridos os dados

Page 49: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

METODO GETDEPENDENCIES()METODO GETDEPENDENCIES()Utilizado para estabelecer dependenciasDeve retornar array com as classes dependentes

Page 50: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

METODO GETDEPENDENCIES()METODO GETDEPENDENCIES()

use Phinx\Seed\AbstractSeed; class ClassSeeder extends AbstractSeed { public function getDependencies(){ return [ 'ClassStatusSeeder' ]; } public function run() { $class=$this->table('class'); $data = [

/*T l d */

Page 51: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

APLICANDO SEEDSAPLICANDO SEEDSphinx seed:run [-s SEED] [-e ENVIRONMENT]

Page 52: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

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

Page 53: DATA B A S E M I G RAT I O N S E S E E DS - PostgreSQLphp composer.phar require robmorgan/phinx. CO N F I G U RAÇ ÃO ( P H I N X .Y M L ) paths: migrations: migrations seeds: seeds

OBRIGADOOBRIGADOWILLIAM FELIPE WELTERWILLIAM FELIPE WELTER

[email protected]@4LINUX.COM.BRBR.LINKEDIN.COM/IN/WILLIAMFELIPEWELTEBR.LINKEDIN.COM/IN/WILLIAMFELIPEWELTE

RRGITHUB.COM/WFELIPEWGITHUB.COM/WFELIPEW