Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Writing Readable Migrations with Nextras Migrat...
Search
Jan Tvrdík
October 12, 2017
Programming
120
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Writing Readable Migrations with Nextras Migrations
Jan Tvrdík
October 12, 2017
More Decks by Jan Tvrdík
See All by Jan Tvrdík
Runtime Types in TypeScript
jantvrdik
0
67
How to Write Parser in PHP
jantvrdik
0
100
Nextras Mail Panel
jantvrdik
0
180
Writing reliable migrations with Nextras Migrations
jantvrdik
1
710
Other Decks in Programming
See All in Programming
Flow は今どうなっているか
mizdra
PRO
0
820
Dockerfile CMD for Node.js
grazie1999
0
160
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.4k
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
120
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
190
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
360
MySQLとPostgreSQLって何が違うの?
akagami
0
150
不幸な GC
chencmd
0
850
Oxlintはいいぞ(続)
yug1224
1
510
AIエージェント時代のコードレビューを設計する
nogu66
5
1.1k
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
500
Featured
See All Featured
BBQ
matthewcrist
89
10k
How to Talk to Developers About Accessibility
jct
2
530
Technical Leadership for Architectural Decision Making
baasie
3
550
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Raft: Consensus for Rubyists
vanstee
141
7.7k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
960
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
510
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
410
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
370
WENDY [Excerpt]
tessaabrams
12
39k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
510
Transcript
Jan Tvrdík
None
but not limited to database snapshot approach mostly not usable
delta approach is hard to get right
None
None
None
None
None
Business Critical Code
doctrine:migrations:diff \ --formatted
None
None
queries wrapped in strings strings wrapped in method calls method
calls wrapped in a method body method body wrapped in a class
let's give each migration a descriptive name let's make the
content match the name let's remove all the noise by using SQL
None
None
easy to write code completion works well easy to format
„Reformat Code“ just works easy to read no noise & well formatted easy to test „Run“ just works „Copy & Paste“ just works no limitations
migrations/ ├── 001.sql ├── 002.sql └── ... +---------+----------+---------------------+----+ | file
| checksum | executed | ok | +---------+----------+---------------------+----+ | 001.sql | 78634... | 2015-08-28 17:05:03 | 1 | | 002.sql | dda40... | 2015-08-28 17:05:03 | 1 | | 003.sql | 5b9c6... | 2015-08-28 17:05:03 | 1 | +---------+----------+---------------------+----+
order is strictly defined new migrations can be only at
the end you must always „rebase“ your migrations once executed migration cannot be changed
migrations/ ├── structures/ │ ├── 2015-07-21-170126-init.sql │ └── 2015-07-22-144133-photo-description.sql ├──
basic-data/ │ └── ... └── dummy-data/ └── ...
S B P D L Structures Basic data Dummy data
Production Localhost
structures DDL only + DML required for DDL basic data
DML for tables in 2 (countries, languages…) dummy data for testing app on localhost w/o strict rules because not used on production
Symfony commands migrations:continue migrations:reset migrations:create
simple web interface when CLI is not available
PHP 5.4+ databases PostgreSQL MySQL DBALs Nextras DBAL Nette Database
Doctrine DBAL dibi
SQL executes all queries in *.sql file PHP for complex
migrations
extensions: migrations: Nextras\Migrations\Bridges\NetteDI\MigrationsExtension migrations: dir: %appDir%/../migrations # base directory driver:
pgsql # pgsql or mysql dbal: doctrine # nextras, nette, doctrine or dibi diffGenerator: doctrine ignoredQueriesFile: "%appDir%/../migrations/ignored.sql"
new \Nextras\Migrations\Bridges\SymfonyBundle\NextrasMigrationsBundle(); nextras_migrations: dir: "%kernel.root_dir%/migrations" driver: pgsql # pgsql or
mysql dbal: nextras # nextras, nette, doctrine or dibi diff_generator: doctrine ignored_queries_file: "%kernel.root_dir%/migrations/ignored.sql"
https://github.com/nextras/migrations https://nextras.org/migrations/docs/
Twitter + GitHub @JanTvrdik nextras.org