Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Web開発を支えるマイグレーションツールについて / sqldef introduction ...
Search
yudppp
December 07, 2019
Programming
3.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Web開発を支えるマイグレーションツールについて / sqldef introduction for psql users
第11回 PostgreSQLアンカンファレンス@東京で発表する資料
https://pgunconf.connpass.com/event/155951/
yudppp
December 07, 2019
More Decks by yudppp
See All by yudppp
開発者にもコーディングエージェントにも働きやすい環境を整える
yudppp
1
190
型安全なDrag and Dropの設計を考える
yudppp
5
1.1k
未知のプログラミング言語にChatGPTと共に挑む
yudppp
0
570
SaaSフロントエンド開発の現場で求められる技術 / Technologies for SaaS Frontend Development in the Field
yudppp
2
300
2019年 HRBrainの技術的挑戦 / hrbain technology challenge 2019
yudppp
3
1.5k
ISUCON向けのツールを作った話 / isutools
yudppp
1
360
Row Level Securityはマルチテナントの銀の弾丸になりうるのか / Row Level Security is silver bullet for multitenancy?
yudppp
23
34k
Webサービス開発に必要な統計学入門 / study of statistics for web developers
yudppp
1
380
メジャーな Live Reloaderの違いをちゃんと調べて見た / Compare major live reloader of Go
yudppp
1
2k
Other Decks in Programming
See All in Programming
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
320
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
150
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
130
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
320
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
250
オーケストレーション記述言語 Katari
yukikurage
0
220
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
310
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.3k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.6k
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
350
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
140
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
5k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
How GitHub (no longer) Works
holman
316
150k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
590
The Cost Of JavaScript in 2023
addyosmani
55
10k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
760
Designing for Performance
lara
612
70k
So, you think you're a good person
axbom
PRO
2
2.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
450
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
240
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
390
Transcript
Web開発を⽀える マイグレーションツールについて 第11回 PostgreSQLアンカンファレンス@東京
⾃⼰紹介 @yudppp 株式会社HRBrain CTO 好きな⾔葉: 冪等性 嫌いなモノ: 浮動⼩数点の誤差 基本的にWebエンジニア
⽬標評価管理クラウド
HRBrainとは • ⽬標と評価を管理するクラウドSaaSを作って いる会社です。 • リリース開始からもうすぐで3年
先⽇Buildersconにて Row Level Securityは マルチテナントの 銀の弾丸になりうるのか という話をしました https://speakerdeck.com/yudppp/row-level-security-is-silver-bullet-for-multitenancy
概要 • SaaS開発していく上でリリース頻度を⾼く開 発していくには真のマルチテナント(全ての会 社の情報が⼀つのDB)にしていきたいが、セ キュリティ的な不安要素をPostgreSQLの RowLevelSecurityを使って解決した話
PostgreSQL Conference Japanで この内容とマイグレーションについて話そうとしたら CfP落ちました。。
現在のリリース頻度 • 週に2回リリース • 毎回ではないがSQLのマイグレーションが頻 繁に必要
みなさんマイグレーション の管理どうされていますか
元々のマイグレーション管理 gooseというGo製のToolを利⽤
起きた問題① Aさん「81_modify_user_birthday_col.sql」 Bさん「81_add_era_table.sql」 Aさん「Merge!」 Bさん「Merge!」 CI 「Test / Deploy 失敗!」
CIでTest実⾏した瞬間は ⼤丈夫なので Mergeされる前に 検知するのが難しい
起きた問題② 前提: みんなでdev環境⼀つを共有していてfeature ブランチをSlackで告知すれば好きなタイミ ングであげれる運⽤ (本当はfeatureブランチごとdeployしたい)
起きた問題② Bさん「令和追加した確認するのでdev使い ます。」 CI 「Deployed!」 Migrationがなぜか呼ばれない。。 誰かがあげたMigrationがdownされてない
この運⽤をしていると Migrationを戻すタイミング が難しい
解決策を探す
k0kubun/sqldef The easiest idempotent MySQL/PostgreSQL schema management by SQL. This
is inspired by Ridgepole but using SQL, so there's no need to remember Ruby DSL. 定義したschema.sqlとDB接続した情報を⽐較し ていい感じにALTER⽂を流してくれる Go製なのでbinaryだけで動く
https://github.com/k0kubun/sqldef
どうなるか 常にschemaファイルとDBの状態が等しくな るので、上記のような問題は起きない。 もし起きたとしても、schemaファイルが Conflictするので気づける。
sqldefの内部実装 Vitess(Vitess is a database clustering system for horizontal scaling
of MySQL)のsqlparser のsourceを拡張して作られている。 information_schema.table_constraintsあた りをSELECTした結果を元にCREATE⽂を Buildしている。
既知の課題 基本的な構⽂は対応しているが、Vitessから 派⽣したこともありPostgreSQLのあまり使わ れない構⽂が未対応だったりする。(そう例え ばRowLevelSecurityとか) sqldefのPostgreSQLのユーザーがそこまで多 くなさそう。
まとめ 冪等性が担保された安全な⽣活がしたい。 sqldefをPostgreSQLで使うユーザーを増やし て、より洗礼されたツールになってほしい 今⽇の発表で1⼈でもユーザーが増えたら嬉 しい
参考資料 •SQLで羃等にDBスキーマ管理ができるツー ル「sqldef」を作った (https:// k0kubun.hatenablog.com/entry/2018/08/ 25/114455) •http://vitess.io/