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
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:[email protected]
Skype:harrie-ibuildings
Twitter:@harrieverveer
zaterdag 30 oktober 2010