Database version control without pain - the PHP Barcelona version

Preview:

DESCRIPTION

The slides for the talk "database version control without pain" as presented at PHP Barcelona, October 30th 2010

Citation preview

PHP Barcelona Conference - 30th October 2010Harrie Verveer

Database Version Control Without Pain

zaterdag 30 oktober 2010

Oh hai!

2

Harrie Verveeraka Hairy

DutchyI live in a town called “Goes”

Software engineer at ibuildings since 2004Vlissingen (Flushing) office

zaterdag 30 oktober 2010

http://www.mediawiki.org/wiki/File:Europe_satellite_orthographic.jpghttp://www.mediawiki.org/wiki/File:Europe_satellite_orthographic.jpg

zaterdag 30 oktober 2010

zaterdag 30 oktober 2010

zaterdag 30 oktober 2010

zaterdag 30 oktober 2010

zaterdag 30 oktober 2010

zaterdag 30 oktober 2010

zaterdag 30 oktober 2010

zaterdag 30 oktober 2010

Database Version ControlWhat’s the problem?

8zaterdag 30 oktober 2010

http://www.sxc.hu/photo/1207911

zaterdag 30 oktober 2010

http

://en

.wik

iped

ia.o

rg/w

iki/F

ile:S

TS1

20La

unch

HiR

es.jp

g

zaterdag 30 oktober 2010

http://www.flickr.com/photos/kt/1217157/

zaterdag 30 oktober 2010

http://www.sxc.hu/photo/1255121

zaterdag 30 oktober 2010

Why Database Version Control

13zaterdag 30 oktober 2010

Simple Patching Strategy

14

The basic idea

zaterdag 30 oktober 2010

Simple patching strategy

15zaterdag 30 oktober 2010

Example patch file

16

patch-001.sql

zaterdag 30 oktober 2010

http://www.sxc.hu/photo/314594

zaterdag 30 oktober 2010

Simple patching strategy

18

Development

Write codeWrite DB patches

Apply patches to own DB

Update

Apply patches Commit

zaterdag 30 oktober 2010

Fixing patches

19

patch-002.sql

zaterdag 30 oktober 2010

Fixing patches

19

patch-002.sql

zaterdag 30 oktober 2010

Fixing patches

19

patch-002.sql

zaterdag 30 oktober 2010

Fixing patches

20

patch-003.sql

zaterdag 30 oktober 2010

Fixing patches

20

patch-003.sql

Never modify a patch file onceit’s under version control

zaterdag 30 oktober 2010

Undo patch files

21

undo-001.sql

zaterdag 30 oktober 2010

http://www.freefoto.com/preview/41-07-7zaterdag 30 oktober 2010

Bonus points

Install.sql

23zaterdag 30 oktober 2010

Bonus points

Initial dummy content

24zaterdag 30 oktober 2010

http://www.sxc.hu/photo/643214

zaterdag 30 oktober 2010

http://www.sxc.hu/photo/946855

zaterdag 30 oktober 2010

Automating the processFaster & Safer

27zaterdag 30 oktober 2010

Typical patch script

28zaterdag 30 oktober 2010

Typical patch script

29

update.sh

zaterdag 30 oktober 2010

BranchesMerge problems

30zaterdag 30 oktober 2010

Branches

31

Trunk

patch-001.sql

patch-002.sql

patch-003.sql

zaterdag 30 oktober 2010

Trunk

patch-001.sql

patch-002.sql

patch-003.sql

create branch

patch-004.sql

patch-005.sqlpatch-004.sql

patch-005.sql

Branch A

Merge

Branches

32zaterdag 30 oktober 2010

Trunk

patch-001.sql

patch-002.sql

patch-003.sql

create branch

patch-004.sql

patch-005.sqlpatch-004.sql

patch-005.sql

Branch A

Merge

Branches

32

patch-006.sql

patch-007.sql

zaterdag 30 oktober 2010

Branches

33

Trunk

patch-001.sql

patch-002.sql

patch-003.sql

create branch

patch-004.sql

patch-005.sql

patch-004.sql

patch-005.sql

Branch B

create branch

patch-002.sql

patch-003.sql

Branch A

Merge

patch-004.sql

Merge

patch-005.sql

Merge

Merge

zaterdag 30 oktober 2010

Separate sequence

db/patches/trunk/

patch-001.sqlpatch-002.sqlpatch-003.sql

34

db/patches/branchA/

patch-001.sqlpatch-002.sql

zaterdag 30 oktober 2010

Separate sequence

db/patches/trunk/

patch-001.sqlpatch-002.sqlpatch-003.sql

34

db/patches/branchA/

patch-001.sqlpatch-002.sql

Trunk version 3BranchA version 2

zaterdag 30 oktober 2010

Patchfile naming

35

patch_20100611_1430.sql

zaterdag 30 oktober 2010

Patch log

36zaterdag 30 oktober 2010

http://www.sxc.hu/photo/692740

zaterdag 30 oktober 2010

There is no silver bulletWhy it can’t exist

38zaterdag 30 oktober 2010

http://www.flickr.com/photos/eschipul/4160817135/

zaterdag 30 oktober 2010

Comparing tables

40

Table in DB 1Table in DB 1

column 1 int

column 2 varchar(255)

column 3 varchar(255)

Table in DB 2Table in DB 2

column 1 int

column 2 varchar(255)

column 4 varchar(255)

zaterdag 30 oktober 2010

Comparing tables

41

Table in DB 1Table in DB 1

id int

name varchar(255)

city varchar(255)

Table in DB 2Table in DB 2

id int

name varchar(255)

website varchar(255)

zaterdag 30 oktober 2010

Comparing tables

42

Table in DB 1Table in DB 1

id int

firstname varchar(255)

lname varchar(255)

Table in DB 2Table in DB 2

id int

firstname varchar(255)

lastname varchar(255)

zaterdag 30 oktober 2010

43

To synchronize two database structures without unexpected

dataloss, communicating all steps needed to get from A to B is

inevitable.

zaterdag 30 oktober 2010

Phing & DB Deploy

44zaterdag 30 oktober 2010

Phing & DB Deploy

45Cartoon by Oliver Widder - http://geekandpoke.typepad.com/zaterdag 30 oktober 2010

46

http://phing.info/

zaterdag 30 oktober 2010

Phing

47zaterdag 30 oktober 2010

48zaterdag 30 oktober 2010

DB Deploy

49zaterdag 30 oktober 2010

Phing & DB Deploy

50zaterdag 30 oktober 2010

DB Deploy

51

db/patches/1-create_user_table.sql

zaterdag 30 oktober 2010

DB Deploy

52

changelog table:

zaterdag 30 oktober 2010

DB Deploy

52

changelog table:

zaterdag 30 oktober 2010

DB Deploy

53

PHP

zaterdag 30 oktober 2010

DB Deploy

54

SQL

zaterdag 30 oktober 2010

DB Deploy

55

Features

zaterdag 30 oktober 2010

LiquibaseThe most complete solution I know

56zaterdag 30 oktober 2010

Liquibase

57

www.liquibase.org

zaterdag 30 oktober 2010

Liquibase

58zaterdag 30 oktober 2010

Liquibase

59zaterdag 30 oktober 2010

Liquibase

60zaterdag 30 oktober 2010

Liquibase

Updating

Reverting

Tagging

Generate XML

Diff

61zaterdag 30 oktober 2010

http://www.sxc.hu/photo/1241520

zaterdag 30 oktober 2010

Liquibase

Branches

63zaterdag 30 oktober 2010

Liquibase

DBMS Support

64zaterdag 30 oktober 2010

Liquibase

Documentation

65zaterdag 30 oktober 2010

Liquibase

Java

66zaterdag 30 oktober 2010

Akrabat DB Schema ManagerZend Framework specific solution

67zaterdag 30 oktober 2010

Akrabat DB Schema Manager

Zend Framework

Proposed by Rob Allen in 2006

Recently implemented

http://github.com/akrabat/Akrabat

68zaterdag 30 oktober 2010

Writing the patch

69

scripts/migrations/001-CreateUserTable.php

zaterdag 30 oktober 2010

Writing the patch

70

scripts/migrations/001-CreateUserTable.php

zaterdag 30 oktober 2010

Akrabat DB Schema Manager

PHP Patches

71zaterdag 30 oktober 2010

Akrabat DB Schema Manager

Easy syntax if you know ZF

72zaterdag 30 oktober 2010

Akrabat DB Schema Manager

Easy to install, easy to use

73zaterdag 30 oktober 2010

Akrabat DB Schema Manager

Easy to install, easy to use

73zaterdag 30 oktober 2010

Akrabat DB Schema Manager

Branch merging

74zaterdag 30 oktober 2010

Doctrine MigrationsDoctrine ORM specific solution

75zaterdag 30 oktober 2010

Doctrine Migrations

76

http://www.doctrine-project.org/

zaterdag 30 oktober 2010

Doctrine Migrations Patch

77zaterdag 30 oktober 2010

Doctrine Migrations

78

Update-to-version

./doctrine migrate

zaterdag 30 oktober 2010

YAML

79zaterdag 30 oktober 2010

YAML

79

./doctrine generate-migrations-diff

zaterdag 30 oktober 2010

Doctrine Migrations

80zaterdag 30 oktober 2010

Doctrine Migrations

81

Generate patches

zaterdag 30 oktober 2010

Doctrine Migrations

82

Useful if you’re already using Doctrine ORM

zaterdag 30 oktober 2010

Summary

83zaterdag 30 oktober 2010

Summary

Patchfiles• Automating

• Branch merging

• Why there is no silver bullet

Phing + DB Deployhttp://phing.infohttp://dbdeploy.com

Liquibasehttp://www.liquibase.org

84

Akrabat DB Schema Managerhttp://akrabat.comhttp://github.com/akrabat/Akrabat

Doctrine Migrationshttp://www.doctrine-project.org

zaterdag 30 oktober 2010

Questions ?

85zaterdag 30 oktober 2010

86

Contact me

Harrie VerveerSoftware Engineer at Ibuildings

Blog:www.harrieverveer.com

E-mail:harrie@ibuildings.nl

Skype:harrie-ibuildings

Twitter:@harrieverveer

zaterdag 30 oktober 2010

Recommended