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
NOT VALIDな検査制約 / check constraint that is not v...
Search
Yasuo Honda
December 20, 2024
Technology
330
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NOT VALIDな検査制約 / check constraint that is not valid
https://pgunconf.connpass.com/event/338511/
Yasuo Honda
December 20, 2024
More Decks by Yasuo Honda
See All by Yasuo Honda
PostgreSQL 18のNOT ENFORCEDな制約とDEFERRABLEの関係
yahonda
1
390
私のRails開発環境
yahonda
0
260
Railsの話をしよう
yahonda
0
300
RailsのPostgreSQL 18対応
yahonda
0
4.1k
Contributing to Rails? Start with the Gems You Already Use
yahonda
2
270
PostgreSQL 18 cancel request key長の変更とRailsへの関連
yahonda
0
340
extensionとschema
yahonda
1
380
今、始める、第一歩。 / Your first step
yahonda
3
1.6k
RailsのPull requestsのレビューの時に私が考えていること
yahonda
11
9k
Other Decks in Technology
See All in Technology
個別開発で終わらせない。 現場の課題をプロダクトの強さに変える StockmarkのFDE
ktkrhr
0
570
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
170
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
140
並行性の問題を防げ!実践トランザクション入門
occhi
0
250
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
140
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
170
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
360
[2026 Oracle Technical Deep Dive] OCI AI Resilience -OCIのセキュリティ対策機能をきちんと使いこなす- (2026年9月17日開催)
oracle4engineer
PRO
0
110
「とりあえず動く」の先へ。 AI時代のチーム開発と内部設計/2026-slsdays
slsops
0
130
[2026 Oracle Technical Deep Dive] オンプレミスDBのCloud移行アプローチ:移行計画に基づくメソッドとツールの選択 (2026年9月17日開催)
oracle4engineer
PRO
0
120
The kernel report
ennael
PRO
1
230
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
180
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
464
34k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
GitHub's CSS Performance
jonrohan
1033
470k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Optimising Largest Contentful Paint
csswizardry
37
4k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Documentation Writing (for coders)
carmenintech
77
5.6k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
520
Transcript
第50回 PostgreSQLアンカンファレンス@オンライン Yasuo Honda @yahonda NOT VALIDな検査制約
• Yasuo Honda @yahonda ◦ Rails committer ◦ 第46回 PostgreSQLアンカンファレンス
以来4回目の参加です ▪ PostgreSQL 15とRailsと - Speaker Deck ▪ 遅延可能な一意性制約 - Speaker Deck ▪ pg_stat_statementsで inの数が違うSQLをまとめて ほしい - Speaker Deck 自己紹介
• Ruby on Railsのmigration DSLで検査制約を作る2つの方法 ◦ テーブル作成後に、`add_check_constraint`で作成 ◦ テーブル作成時に`t.check_constraint`で作成 •
いずれも`:validate` 引数を設定可能(デフォルトはtrue) ◦ falseを渡すと、無効な検査制約として作成される意図(NOT VALID) だった意図通りは`add_check_constraint`のみ ◦ https://api.rubyonrails.org/classes/ActiveRecord/Connecti onAdapters/SchemaStatements.html#method-i-add_chec k_constraint 背景
• add_check_constraint ◦ CREATE TABLE "posts" ("id" bigserial primary key,
"title" character varying); ◦ ALTER TABLE "posts" ADD CONSTRAINT posts_const CHECK (char_length(title) >= 5) NOT VALID; • check_constraint ◦ CREATE TABLE "comments" ("id" bigserial primary key, "body" text, CONSTRAINT comments_const CHECK (char_length(body) >= 5) NOT VALID); 発行されていた SQL https://gist.github.com/yahonda/7e61f3f71 681cfa03111fed55714b0b4
• alter tableで別に作成した方は意図どおり、not valid • create table内で作成した方は、意図に反してvalid • リンク 作成された検査制約の状態
• 検査制約のNOT VALIDをalter tableのみで追加できるのは意図した振 る舞いのよう(フォント赤字は筆者) • https://www.postgresql.org/docs/current/sql-altertable.html ◦ > This
form adds a new constraint to a table using the same constraint syntax as CREATE TABLE, plus the option NOT VALID, which is currently only allowed for foreign key and CHECK constraints. • https://www.postgresql.org/docs/9.2/release-9-2.html で追加 解釈
• create table時にnot validオプションはエラーになって欲しい • 関連する議論 ◦ https://www.postgresql.org/message-id/CAEZATCX8u8GU -M_DFtjksRUQhwm8zur3BQvLamFUX8MwYNntPg%40mail. gmail.com
• Rails側での追加対応も考えたい(今日のトピック外) 疑問
• PostgreSQL 18 devel(資料作成時のmasterブランチ) ◦ https://github.com/postgres/postgres/commit/39240bcad 56dc51a7896d04a1e066efcf988b58f • Rails main
◦ https://github.com/rails/rails/commit/3a91006d22fa465fb ce41370bbe66aa332bdcc2d • Red Hat Enterprise Linux release 9.5 (Plow) 環境
• https://github.com/rails/rails/pull/40192 • https://github.com/rails/rails/issues/53732 • https://github.com/rails/rails/pull/53735 • https://www.postgresql.org/docs/current/catalog-pg-constrai nt.html •
https://www.postgresql.org/message-id/E1QcJd3-0001HT-91% 40gemulon.postgresql.org • https://github.com/postgres/postgres/commit/897795240cfaa ed724af2f53ed2c50c9862f951f • 参照
• pgsql-hackersにて2024年12月5日から下記の議論が始まっていること を教えていただきました ◦ https://www.postgresql.org/message-id/CACJufxEQcHNh
[email protected]
ail.com ◦ 内容確認してreplyしてみます 発表後の補足
おわり
おわり