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
NOT VALIDな検査制約 / check constraint that is not v...
Search
Yasuo Honda
December 20, 2024
Technology
310
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
340
私のRails開発環境
yahonda
0
250
Railsの話をしよう
yahonda
0
290
RailsのPostgreSQL 18対応
yahonda
0
3.8k
Contributing to Rails? Start with the Gems You Already Use
yahonda
2
260
PostgreSQL 18 cancel request key長の変更とRailsへの関連
yahonda
0
340
extensionとschema
yahonda
1
370
今、始める、第一歩。 / Your first step
yahonda
3
1.6k
RailsのPull requestsのレビューの時に私が考えていること
yahonda
11
8.7k
Other Decks in Technology
See All in Technology
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.4k
猫付きpingコマンドを自作
uyuki234
0
260
Bits AI を制するものは Datadog を制す / The player that controls Bits AI, controls Datadog
kaminashi
0
130
モバイルアプリ開発概論2026
recruitengineers
PRO
6
660
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
130
システム思考で問題に対処する
yussak
0
330
少人数チームで実現する、大規模AWSサーバーレス基盤における"揺らがない"信頼性運用
maimyyym
1
110
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
150
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
850
Kiro Crew入門 - 常駐エージェントの仕組みと使いどころ / Intro to Kiro Crew
k_adachi_01
1
410
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
なぜ Temporal の大小比較には compare しかないのか / Why Does Temporal Only Have compare() for Comparisons
kazukihayase
1
150
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
410
New Earth Scene 8
popppiees
3
2.5k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
VelocityConf: Rendering Performance Case Studies
addyosmani
332
25k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
780
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
We Are The Robots
honzajavorek
0
300
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
How STYLIGHT went responsive
nonsquared
100
6.2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
650
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
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してみます 発表後の補足
おわり
おわり