More Related Content
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み) PDF
PDF
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料) PDF
PPTX
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料) PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料) PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料) PDF
OpenStack超入門シリーズ Novaのディスク周りあれこれ What's hot
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料) PDF
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料) PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム PDF
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料) PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料) PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料) PPTX
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08) PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O... PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料) PDF
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料) PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F... PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料) PDF
PDF
PostgreSQL Unconference #29 Unicode IVS PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug PDF
Magnum IO GPUDirect Storage 最新情報 PDF
分散学習のあれこれ~データパラレルからモデルパラレルまで~ Viewers also liked
PDF
PDF
PDF
phpspecで学ぶLondon School TDD PDF
PDF
Gladiator, GUI management tool of ROMA (NOSQL based ruby). PDF
Getting start with knockout.js PDF
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム Similar to PostgreSQLの範囲型と排他制約
PDF
PostgreSQL - C言語によるユーザ定義関数の作り方 PDF
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥 PPTX
PDF
PDF
PDF
20181110 fok2018-pg-extension PDF
20190119 aws-study-pg-extension Recently uploaded
PDF
1ページでわかるTAPP_20251211________________ PDF
slideshare_ナハトエース会社説明資料_2025/12/11_SlideShare.pdf PDF
2026magazine tour tabisentsunagu たびせんつなぐ PDF
SNS_Marketing_Company_ナハトエース会社説明資料_2025/12/10_SlideShare.pdf PDF
PDF
動画『【続報】新税率は35%超!M&Aの税金が大幅増税|3.5億円から対象に』で投影した資料 PDF
【会社紹介資料】 株式会社カンゲンエージェント [ 11 月 30 日作成資料公開 ].pdf 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.