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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yasuo Honda
December 20, 2024
Technology
340
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
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
1.7k
PostgreSQL 18のNOT ENFORCEDな制約とDEFERRABLEの関係
yahonda
1
460
私のRails開発環境
yahonda
0
270
Railsの話をしよう
yahonda
0
300
RailsのPostgreSQL 18対応
yahonda
0
4.3k
Contributing to Rails? Start with the Gems You Already Use
yahonda
2
280
PostgreSQL 18 cancel request key長の変更とRailsへの関連
yahonda
0
360
extensionとschema
yahonda
1
390
今、始める、第一歩。 / Your first step
yahonda
3
1.6k
Other Decks in Technology
See All in Technology
企画からFlutter実装まで、1つの機能を一貫して開発したプロセスと成果物
khiroyuki1003
0
130
"計画的無茶振り"を通してAIネイティブ世代の新人を育てる
subroh0508
1
140
AI秘書と毎日働くのはもう当たり前。開発以外の業務に足りない機能をどう埋める?
minorun365
PRO
4
2.2k
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
220
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
200
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
220
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
170
eBPF 簡介 2026 版
shunghsiyu
0
160
Don't write the architecture only in the prompt.
neohsu
0
300
渡米前の準備を制す!re:Invent 2026徹底準備術 / The Ultimate Preparation Guide for re:Invent 2026
yuj1osm
1
510
推論基盤と Scale-Up Interconnect の現状と制約から俯瞰する技術動向
markunet
2
770
1週間、Opus封印でお願いします
kintotechdev
1
440
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
490
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
520
Music & Morning Musume
bryan
48
7.5k
Raft: Consensus for Rubyists
vanstee
143
7.8k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Producing Creativity
orderedlist
PRO
348
41k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
2
1k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
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してみます 発表後の補足
おわり
おわり