More Related Content
PDF
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料) PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料) PDF
MLOps Yearning ~ 実運用システムを構築する前にデータサイエンティストが考えておきたいこと PDF
PDF
PPTX
なぜコンピュータを学ばなければならないのか 21世紀の君主論 PDF
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022 PPTX
What's hot
PDF
PDF
PDF
PPTX
PDF
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ... PDF
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料) PDF
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム PPTX
Amazon SageMakerでカスタムコンテナを使った学習 PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料) PPTX
PDF
AWS で Presto を徹底的に使いこなすワザ PPTX
PDF
The Usage and Patterns of MagicOnion PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料) PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き) PPTX
PDF
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか PPTX
Viewers also liked
PDF
Getting start with knockout.js PDF
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム PDF
PDF
phpspecで学ぶLondon School TDD PDF
Gladiator, GUI management tool of ROMA (NOSQL based ruby). PDF
PDF
Similar to PostgreSQLの範囲型と排他制約
PDF
20181110 fok2018-pg-extension PDF
20190119 aws-study-pg-extension PDF
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥 PPTX
PDF
PDF
PostgreSQL - C言語によるユーザ定義関数の作り方 PDF
Recently uploaded
PDF
#42_10.OWASPTop10_2025:An Overview and How Security Risks Have Evolved Since ... PDF
合同会社エンジニアリングマネージメント会社説明資料_2026-02 Engineering Management LLC PDF
【採用ピッチ資料】ランド・ジャパンの未来の仲間たちへ 2026年度改訂版.pdf PDF
【プロマネ仕事術】コミュニケーションスキル② - "報告" の5つのルール ~戦略を最大化する「戦略的報告」の技術~ PPTX
株式会社できるくんHP_CV最大化サイト監査レポート_主要ページ分析と改善提案 PPTX
★【dodaキャンパス】27卒向け【交換できるくん】会社紹介説明資料_vol3★ PostgreSQLの範囲型と排他制約
- 1.
- 2.
範囲型とは
• 範囲をあらわすデータ型(そのまんま)
• 開始と終了を持つ
•含まれているとか、結合・交差とかの演算子が定義さ
れている
• PostgreSQLでは任意の型を元に新しい範囲型を定義で
きる
Developing Time-Oriented Database Applications in SQLではPeriod型、
Temporal Data and the Relational ModelではInterval型と呼ばれているよ
- 3.
- 4.
- 5.
こうなります
create table members(
birthday date,
period daterange,
name_en text
);
insert into members(birthday, period, name_en) values
('1988-10-20', '[2001-08-26, 2012-05-18]', 'Risa Niigaki'),
('1988-12-23', '[2003-01-19, 2010-12-15]', 'Eri Kamei'),
('1989-11-11', '[2003-01-19, 2013-05-21]', 'Reina Tanaka'),
('1989-07-13', '[2003-01-19,]', 'Sayumi Michishige'),
('1985-02-26', '[2003-01-19, 2007-06-01]', 'Miki Fujimoto'),
...
- 6.
- 7.
こうなります
create table level1(
level int,
exp_range int4range,
primary key(level),
exclude using gist (exp_range with &&)
);
insert into level1 values
(1, '[0,11)'),
(2, '[11,59)'),
(3, '[59,164)');
- 8.
- 9.
- 10.
- 11.
使用例
-- 二人の在籍期間の重複日数
=# withq(n1, n2, p) as (
select m1.name_en, m2.name_en,
m1.period * m2.period
from members m1
join members m2 on(m1.name_en < m2.name_en)
)
select n1, n2, upper(p) - lower(p)
from q where not isempty(p) order by 3;
n1
|
n2
| ?column?
------------------+-------------------+---------...
Reina Tanaka
| Sayumi Michishige |
3776
Ai Takahashi
| Risa Niigaki
|
3688
Reina Tanaka
| Risa Niigaki
|
3408
Risa Niigaki
| Sayumi Michishige |
3408
- 12.
- 13.
範囲型のEXCLUDE制約
=# select *from level1;
level | exp_range
-------+------------1 | [0,11)
2 | [11,59)
3 | [59,164)
...
=# insert into level1 values(100, '[11,12)');
ERROR: 重複キーの値が排除制約 "level1_exp_range_excl" に
違反しています
DETAIL: キー (exp_range)=([11,12)) が既存のキー (exp_range)
=([11,59)) と競合しています
- 14.
- 15.
スカラ型と範囲型の組み合わせ
-- gistは標準では =を使えない
create extension btree_gist;
create table level2 (
exp_type int,
level int,
exp_range int4range,
primary key(exp_type, level),
exclude using gist (exp_type with =, exp_range with &&)
);
insert into level2 values
(100, 1, '[0,11)'),
(100, 2, '[11,59)'),
...
(150, 1, '[0,16)'),
(150, 2, '[16,89)'),
- 16.