7つのデータベース 7つの世界 - Cloudfront.net

7
7
世界
Eric Redmond and Jim R. Wilson
角征典
P1.0P2.0P3.0, 2013 年 2 月 25 日 2013 年 6 月 10 日 2014 年 3 月 5
日
Build date: 2014 年 2 月 13 日
(m-sl b-n bc-n)
Original English language title: Seven Databases in Seven Weeks: A Guide to Modern
Databases and the NoSQL Movement by Eric Redmond and Jim R. Wilson
Published by The Pragmatic Programmers, LLC
Copyright © 2012 The Pragmatic Programmers, LLC
Japanese Translation Copyright © 2013 Ohmsha, Ltd.
All rights reserved.
No part of this book may be reproduced, stored in a retrieval system, or transmitted, in
any form, or by any means, electronic, mechanical, photocopying, recording, or otherwise,
without the prior consent of the publisher.
本書 発行
,内容 誤
本書 内容 適用
結果生
,
,適用
版社
一切 責任 負
了承
.
本書 掲載
限
会社名・製品名 一般 各社 登録商標
注意
結果
払
商標
,
,著者,出
.
本書 ,
「著作権法」
,著作権等 権利 保護
著作物
.本書 複
製権・翻訳権・上映権・譲渡権・公衆送信権(送信可能化権 含 ) 著作権者 保有
.本書 全部
一部
,無断 転載,複写複製,電子的装置
入力等
,著作権等 侵害
場合
, 注意
.
本書 無断複写 ,著作権法上 制限事項 除 ,禁
.本書 複写複製
希望
場合 ,
事前 下記 連絡
許諾 得
.
社開発部「<書名 明記>」係宛,E-mail ([email protected])
•
書状,FAX(03-3293-2825)
『7
流
方
世界』読者 声
7
完
。金曜日
確認
。日曜日
新
新
起動
達人
手
出
驚
、
技
同
。土曜日
身
日常的
。次
楽
週
使
、
。
ä Ian Dees
Using JRuby 共著者
本書
、重要
素晴
選択肢
連続 感
概要
提供
広
、本書
。
。
読
魅力
7回
。
ä Sean Copenhaver
准将
backgroundchecks.com
本書
、現代
最高
読
使
・
理由
、記憶
教
。
残
充実
概要
記事・
。私
違
、
使
。読
教
本当
楽
。
ä Loren Sands-Ramshaw
米国国防総省
私
見
、CouchDB
最高
入門書
。
ä Jan Lehnardt
Apache CouchDB 作者兼開発者
『7
素晴
7
入門書
人
世界』
、現代
。1 日 1 章
何
発見
設計
読
、理解
、初心者
実装
関
達人
深
。
ä Jerry Sievert
本書 表紙
広
、
「
生
知
」
7
世界』 売
ä Dr Nic Williams
Engine Yard 技術担当役員
。
iii
大
知
書
。正直、『7
本書 寄
*1
登
雪
覆
州
、新雪
思
、
態
。
手入
。新雪
見当
、全体的
1994 年
似
抱
、
、新
指向
来
飽
。我々
、新雪
強
変化
道
世界
埋
新雪
待
望
待 望
覆
多様性
覆
体験
。
手
尽
。
全文検索
必要
触
。開発
使
展
立場
。我々
存在
。
一緒
最高
単純
思
、
安定
。『7
最 進
*1[訳注]
場
学
。列指向
近
HBase
研
人間
、
世界』
7
、
適
。IBM
従事
開発 支
Redis
面
構築
高速
発
、
部分 、横断的 切 取
安定
。
美
Riak
、
体験
名前。
v
、
。
柔軟性
10 年間
素晴
持
。
、
1 年間
顧客
備
RDBMS
入
、
究所
。絶好
、
指向
独占的
。
品質
。
。
、驚
、
同
尽
一面
新雪
。
。何十年
、
。我々
1 年間
、
私
、
、一面
。最初
次第
。私
様子
画面
時代
検索
。
。
相変
使
思
。
、緑
、
時
時代
完全
見
、
優勢
10 年
MySQL 筆頭
芽生
落胆
状
、
。
後
IBM、
拡大
私
大学
、次
。
同
。
開発研究所
学
10 年 続
上
物足
。
指向
Oracle
、山
IBM
感覚
代
。
。
指向
本書 寄
vi
、深
取
上
高速 探索
Neo4j
可能
MongoDB
。
、
扱
。
優
管理者
使
者
、
。Eric Redmond
、
必要
見識
一歩進
身
賢
開発
、
。
、
Jim Wilson
、現代
。各
制限
、
向
原動力
楽
優雅
何
、
業界
向
見抜
。
。
2012 年 5 月
『7
言語 7
世界』著者
Bruce Tate
州
謝辞
本書
著者 2 人
必要
力
。彼
貴重
見解
書
上
、超人的
目
提供
。多
可能
感謝
Ian Dees
Robert Stam
Daniel Bretoi
Loren Sands-Ramshaw
無謀
最後
。
機会
。編集者
、今
本書
。
学
熱意
。
、決
外
。
。君
特別
書
。
。
感謝
。
。
作者
、
本書
書
。
力持
感謝
貢献
。
、
Jim
:
家族 感謝。Ruthy 辛抱 励
Jimmy
子
2 人。
君
、IRC・掲示板・
・
、
Jackie Carter
。
。読者
得
、仕事
下
、
遂
人
:Noelle
本
。
、Frederic Dumont、Matthew Flower、Rebecca Skinner
許
Eric
Jan Lenhardt
Dave Purrington
Sean Copenhaver
Andreas Kollegger
感謝
、読者
名前
、
(順不同)
。
感謝
。
、我々
。技術的
根気強
言 忘
感謝
協力
。
尽力
大事
見
Mark Phillips
Oleg Bartunov
Matt Adams
Emil Eifrem
Bruce Tate 経験 助言 感謝
Pragmatic Bookshelf
心
本書 出版
誤
頭脳
。
時間 経験 提供
感謝
限
優秀
不可欠
。
。
vii
心 温
愛
質問
答
。Emma
。
、縁
活動
次
石油
、製油所
言
。
、
。
、
取
、近代的
。目的
。
理解
使
油田
。
出
道具
。世界観
、
達成
保存
設備 使
手段
。
。
背景
、増大
潜在的
力
自由
。
7
本
NoSQL
書
思
言葉
大
2010 年 3 月
、多
混乱
見
人
。NoSQL
?
何
開発
答
、我々
Bruce Tate
『7
素晴
思
言語 7
使
方
含
与
世界』[Tat10]
言語
同
?
疑問
読
、
紹介方法
対
、NoSQL
思
本 書 方
感動
教
対応
本書
、NoSQL
、
。
。
、
。
?
影響
探
。当時
使
。
難
疑問
。
内容
本書
対象者
、現代
展望
開発者 。
経験
簡単 説明
5
不要
理解
考
、
、7
役 立
章
分野
選
」
(p. 1) 説明
経験豊
。
説明
。
。
、第 1 章「
。
順番 、PostgreSQL・Riak・
Apache HBase・MongoDB・Apache CouchDB・Neo4j・Redis 取 上
。
週末 取 組
、各章 3 日 分
構成
。1 日 終
、紹介
考 方 掘 下
点
、
日
概念
悪
理解
用意
、実際 時間
自分 腕
章
前
説明
速度
自分
進
、
決
構
。
。
使
本当
必要
。
、
。
飛
章
。章 終
。読
先
特徴
意味 理解
演習 用意
点
、頭
詳
mapreduce
。本書
目的
説明
、現代
ix
順番
読
、
。
章
簡単
領域
確実
、
理解
x
。
本書
、頭
読
。
含
本書 読 前 、本書
本書
含
知
。
紹介
、簡単
、非常
面倒
、少々難
。
場合
、
場合
提供
、最終的
省略
分
、役
。我々
自分
随所
。
立
概念
必要
説明
紙面
手順
割
。本当
?
管理
管理
載
本書
設定
載
。日々 運用 関
特性
、基本的
詳
変
本書
触
。
。紙面
、*nix
。本書
限
。
詳細
!
動
取
、
限
、(主
対象
開発
。
動
。
、
偏見
Windows
。
検討
我々
形式
。
、Cygwin*2
動
選択肢
上
反映
*nix
対象
環境 改善
)*nix
Linux
設定
補足
。Microsoft
、現状
。
、役 立 概念 集中的 伝
、設定
Windows
本書
触
、
動
、仮想
。
規約
本書
、
取
JavaScript
好
言語
上
使
、作業
言語 紹介
*2
http://www.cygwin.com/
含
仕方
、
。複数
Ruby/JRuby
。
PL/pgSQL(Postgres) Gremlin/Groovy(Neo4j)
。
、Node.js 使
xi
書
JavaScript
注意書
分
除
好
語
実行
方
取
上
、
。
完全
本書
。
、
。
*3
Pragmatic Bookshelf
素晴
情報源 。本書 掲載
。
、本書
能
。自
、言
従
頭 $
掲載
。
将来
誤植
対
提案
指摘
可
。
読者
思 。
一緒
出発
、現代
眺
旅
楽
。
Eric Redmond、Jim R. Wilson
*3
http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks
目次
本書 寄
v
謝辞
vii
ix
第1章
1.1
1.2
1.3
第2章
2.1
2.2
2.3
2.4
2.5
第3章
3.1
3.2
3.3
3.4
3.5
第4章
4.1
4.2
4.3
4.4
4.5
第5章
5.1
5.2
5.3
5.4
1
最初 質問 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
今後 行方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
3
6
PostgreSQL
9
分類 . . . . . . . . . . . . . . . . . . . . . . . . .
Post-greS-Q-L . . . . . . . . . . . . .
1 日目:
・CRUD・結合
2 日目:応用的
・
・
3 日目:全文検索 多次元 . . . . . .
. . . . . . . . . . . . . . . . .
. . .
. . .
.
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Riak
好
. . . . . . . . . . . .
1 日目:CRUD・
・MIME
. . .
2 日目:mapreduce
. . .
3 日目:
解消 Riak 拡張 .
. . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 89
. 90
. 100
. 115
. 124
Riak
9
10
21
34
47
49
HBase
49
50
59
76
86
89
HBase 入門 . . . . . . . . . . . . .
1 日目:CRUD
管理 . .
2 日目:
扱
. . . .
3 日目:
持
行 . . .
. . . . . . . . . . . . . . . .
MongoDB
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
127
Mongo . . . . . . . . . . . . . . . . . . . . . . . . . 127
1 日目:CRUD
. . . . . . . . . . . . . . . . . . . . . . 129
2 日目:
・集約・mapreduce . . . . . . . . . . . . . 142
3 日目:
・
・地理空間情報・GridFS154
xiii
xiv
目次
5.5
第6章
6.1
6.2
6.3
6.4
6.5
第7章
7.1
7.2
7.3
7.4
7.5
第8章
8.1
8.2
8.3
8.4
8.5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
CouchDB
165
. . . . . . . . . . . .
1 日目:CRUD・Futon・cURL Redux . .
2 日目:問 合
作成 . . . .
3 日目:応用的
・Changes API・
. . . . . . . . . . . . . . . . . . .
Neo4j
B.1
B.2
B.3
付録 C
. . . . .
. . . . .
. .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Redis
203
204
220
231
238
241
構造
. . .
1 日目:CRUD
型 . . .
2 日目:応用的 利用 分散 . .
3 日目:他
戯
. . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
241
242
254
268
280
283
分類
. . . . . . . . . . . . . . . . . . . . 283
選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
付録 A
付録 B
165
166
173
185
201
203
Neo4j
.
1 日目:
・Groovy・CRUD . . .
2 日目:REST・
・
3 日目:分散型高可用性 . . . . . . . .
. . . . . . . . . . . . . . . . . .
第9章
9.1
9.2
9.3
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . .
. . . . . . . . . . . . .
概要表
289
CAP 定理
293
結果整合性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
現実世界 CAP 定理 . . . . . . . . . . . . . . . . . . . . . . . . 295
. . . . . . . . . . . . . . . . . . . . 295
参考文献
297
訳者
299
索引
301
著者・訳者
312
第1章
我々
世界
関係
、事実上
転換点
立
。
。近
消
世界
RDBMS
思
、代替
、
選択肢
新
可用性・水平
、本書
登場
。
。
選択肢
。
世界
学
続
・高
備
巡
。本書
機能
「整合性」対「結果整合性」
、混迷
者
構成
持
方法
発見
手法
大部分
7
各
。
規模
将来
構造・簡潔
・新
呼
NoSQL
問題
選択肢
読
進
、
(「永続性」対「速度」
) 特定
最適 選択肢 見
。
1.1 最初 質問
本書『7
世界』
7
、
組
?」
質問
合
、
幸
、適切
7
、選択肢
理解
世界
。
連
部分 指摘
。
、答
種類
•
必要
方
部分
見
。
。腕
CRUD
見
。
?
筋
・
指向・
分野
(本書 取 上
分類
分野
。具体的
、
(Postgres)
、
2
1 (HBase)、
CouchDB)、
原動力
?
決
1
机上
設計
柔軟性
、膨大
重要
、
、実際
、
生
存在
柔軟性
。一方、列指向
複数台
保存
1
最適
1
Redis)、列指向
2 (MongoDB
(Neo4j)取 上
空論
。RDBMS
世界
(Riak
指向
。
)、
。
学
出
。
、
・列指向・
有名
問題
最適
選
。
答
、
、
「
問題解決
。与
質問
•
核
作
。
問題
解
第1章
2
、
二
使 場面
実例
。
見
各
。
取
•
次
?
接続方法
。
、
手
。
使
Ruby
JavaScript
Gremlin(Neo4j)
REST(CouchDB
議論
速
検索
。低
合
例
紹介
。
、
他
?
問
可能
強制
変更
制限
書
大
計画
込
、複数
読
異
取
。任意
提供
必要
高
。
強固
?
単
両方
実装 使
。
、事前
由
、
。
、
可能
、主
話
、
合
場合
、PL/pgSQL(Postgres)
使
Riak) Thrift(HBase)
、Node.js
JavaScript
組
点
。
言語
。最終章
•
必要
自
?
理解
、自分
仕事
能力
最適
選択
。
動
•
?
動
?
?
?
?
使
?似
一緒
読
取
均等
保存
?書
分散
?
込
?
別
操作? 自分
?
?
•
関係
。何
文脈
話
背景
提供
明
意味
。本書
。
。
我々
目的
、水平
、
質問
、意図的
説
(MongoDB・HBase・
(Postgres・Neo4j・Redis)
初心者
達人
一冊
、各
。
必要
中間
。
、
終
文脈
方法
Riak) 伝統的 垂直
存在
、
、
長所
本
違
。
必要
確実
。本書
理解
読
分類
1.2
分類
1.2
音楽
同様
、
歌 共通
曲
3
複数
分類
、用途
短調」
熱唱
。同様
使 方 異
、
適
、
「
状況
?」
分野
5
簡単
直面
問題
解決
。
大部分
、本書
取
重要
・利用可能
。
適
。
人
、
。
思
管理
、行
(RDBMS)
列
取
2 次元
、構造化問 合
。重要
変形
。
。型
結合
、数学的
、集合論
言語(SQL) 使用
、既存
。
浮
実装
、数値型・文字列型・日付型・BLOB 型
強制
上
上
問題領域・使用
選択肢
経験
型
取
、
直感
。RDBMS
、各分野
。
、
、最適
?」
。
見
見
。
化
。常
利用
利用
、
「
飛
、「
、
、
、
気
本節
。音階
。
、
複雑
関係理論(集合論)
。
、MySQL・H2・HSQLDB・
数多 存在
SQLite
取 上
。本書
、第 2 章「PostgreSQL」
(p. 9) PostgreSQL
。
PostgreSQL
百戦錬磨
PostgreSQL 、本書
。SQL 標準 忠実
、違和感
。本書
所
扱
、最 単純
。
同
。
古
、最
堅牢
扱
他
注目
。SQL 初心者
(値)
)
歴史
、
。
、SQL
触
最
比較対象
機能
熟練者
、Postgres
読
。
特有
損
。
名前 示
言語
、
(
複合型
扱
長
第1章
4
実装
、必
必要
。
、
。
考
値
。
場合
、
、
多
信
必要
立
数多
存在
membase)
中身
要求
高速
役
動作
、
。
、複雑
。
同様
実装
一種
、
。
集約
実装
。有名
、
、memcached(
Voldemort。
、本書
取
親戚
上
memcachedb
Riak 。
Redis
Riak
第 3 章「Riak」
(p. 49) 取
、HTTP
Dynamo 論文
採用
実装
基本
、
。Riak
値
・
構造
扱
低
取 上
。Riak
、次第
、mapreduce
、
・
入 。
呼
知名度
。Amazon
解消
拡張機能
、
初
、
Riak
構成要素
忠実
XML・画像
最
上
REST
使
、本書
人気
紹介
出
。本書
応用的
最
。
Redis
Redis
、
済
複合
購読
型
、出版/
基本的
、
最
提供
堅牢
持
前
、
損失
引
特性 、
振
障害
、驚異的
維持
重要
。
、
舞
用途
章「Redis」
(p. 241)
一緒 使
換
。
。
残
向
。Redis
。最終章
、第 8
、Redis 以外
、
作
思
。
列指向
列指向
(
一緒
保存
)
設計
。一方、(RDBMS
違
思
格段
安価
、
)行指向
。各行
。null
)
設計
違
、列
追加
異
列
行単位
大
行
入
。列指向
与
行
、
、
構造
保存
影響
、
圧迫
維持
)列
名前
、情報
、
。列指向
(
、
(2 次元
、
。
入
分類
1.2
中間
列指向
言
5
。
、
競合
存在
。有名
第 4 章「HBase」
(p. 89) 取 上
、HBase(本書
)
・Cassandra・Hypertable
。
3
HBase
列指向
、本書
取
、最
上
非
共通
。HBase
、Google 社
多
論文
BigTable
設計図
使
水平
Hadoop(mapreduce
重視
、行
) 上 動作
列
圧縮
、
構築
持
。
「
、
設計
。整合性
、SQL
」 領域以外
機能 最初
心休
、
。
指向
指向
、当然
、一意
。値
柔軟性
保存
、変化
速
領域
可能
適
。入力
表現
基本要件
指向
、
・整合性
。
設計上
最適
用途 及
影響
決定
、
規制
満
少
。
・
、
手法
、
異
違
理解
、
。
、主
2
。第 5 章「MongoDB」
(p. 127) 取
取 上
対
・
選択
。
値
。
高
、
(p. 165)
、
型
ID
上
、第 6 章「CouchDB」
MongoDB
。
CouchDB
MongoDB
MongoDB 、巨大
、humongous《
設計
源
。
出
、何
。
機能
。
mapreduce
書
込
、RDBMS
操作
供
》
言語
(名前
)。Mongo
(
来
更新
人
「mongo」
整合性
魅力的
、
限
。
)同
、値
値
読
加算
扱
JavaScript
同時
採用
提
、単純
複雑
。
CouchDB
CouchDB
、
語
維持
、
、
環境
。Erlang
書
第1章
6
、他
高
切断
障害
。Mongo
。mapreduce 関数
永続性
発生
。一時的
、
同
損
、
構成
保存
保持
言語
JavaScript
、他
使
同様
、複数
。
、
、
相互接続
得意
、
。
構成
。
、
。
長所
探索
上
次々
。
第 7 章「Neo4j」
(p. 203)
取
保存
、
、最
人気
Neo4j
。
Neo4j
自己参照
複雑
操作
。
巡回
登場
Neo4j
高速
、他
。
探索
使
、目的
利点
、
発見
。
、
柔軟性
引力
。Neo4j
、
頂点
一緒
使
実装
。
(混合型)
実際
現場
、複数
単独
長所
。
組
、単純
。
(p. 283)
合
取 上
、
、
合計
強力
、
。今
使
複数
構築
性能
永続化
高
呼
、
堅牢
。本書
、第 9 章「
」
。
1.3 今後 行方
我々
、
爆発
正確 予測
独占
域 (重複
。
代
非
複数
、
、腰道具
問題領
。
同
大工
進化
管理者(DBA)
登場
言語
。優
。次
)特定
、専用
。
、
熟知
限
)受 持
専門職
発者
中
、
(
、
何
開
把握
1.3 今後 行方
。数多
選択肢 精通
本書
速習
回
。
、
、最初
、熟練者
考
放
7
。最終的
。
。
打
、巣箱
PostgreSQL
取 掛
、電動
作
。
第2章
PostgreSQL
界
PostgreSQL
、頑丈
本的
、力
理解
PostgreSQL
。誰
振
多
、熟練
理解
問題
、
解決
開発者
、
、
実装
行
厳密
型
。
決
関心
最
続
人気
2 次元
高
存在
、
。
普及
・
、
・
(
)、
安全性(ACID 準拠)、
(多
的
、
違
基
集合
列
。新
、今
最
。
管理
論
利用
。
柔軟性
、
。
話
)
。
使用
正規化
考
備
事前
、問 合
PostgreSQL 、最 優
(RDBMS) 。
知
他
必要
柔軟
。
管理
2.1 Post-greS-Q-L
名前 由来
現在
1995 年 発足
、元々
、1970 年代 初期
大学
校 始
。当時 、Interactive Graphics and
Retrieval System(Ingres) 呼
。
後、1980 年代 改良
Post-Ingres(Ingres 後継) 発表
。略
、Postgres
。
大学
校
1993 年 終了
、
Postgres95
開始
。
後、SQL
続
表明
、1996 年
PostgreSQL
改名
。
PostgreSQL
歴史
古
。元
PostgreSQL
、本書 紹介
最 歴史 古 、現場 最 評価
。自然言語
・多次元
9
・地理空間
第 2 章 PostgreSQL
10
。高度
対応
組
処理
込
対応
持
。
、
最
。高速 信頼性 高 、
言語
、
・
、ANSI SQL
、複数
・
継承・副問
合
準拠
単位
扱
。
、Skype・
全国家族手当金庫(CNAF)
・米連邦航空局(FAA)
実運用
証明
終
*1 。基本
OS
異
tablefunc、dict_xsyn、fuzzystrmatch、pg_trgm、
Postgres 拡張
。
方法
方法
PostgreSQL
、本書 使用
contrib
cube
。
、
*2 *3 *4 。
参考
、以下
Postgres
作成
名前
book
。
$ createdb book
本章
、
使
book
。次
正
、以下
確認
contrib
。
$ psql book -c "SELECT ’1’::cube;"
何
受
探
取
、
詳
情報
1
2
。
2.2 1 日目:
・CRUD・結合
熟練者
触
、過去
。
。
。次
、
発行
、
、
値
機能
多
同様
、
)5432
投入
取
出
、
、Postgres
、
結合
。
処理
接続
始
。最後
行
。
通信
。
psql
接続
(
。
$ psql book
*1
http://www.postgresql.org/download/
http://www.postgresql.org/docs/9.0/static/contrib.html
*3[訳注]日本語版:http://www.postgresql.jp/document/9.0/html/contrib.html。
*4[訳注]本書
、現時点 最新版
9.2
、
9.0 使用
。各
、次 URL 参照
:
http://www.postgresql.org/support/versioning/。
別
、次 URL 参照
:http://www.postgresql.org/docs/manuals/(日本語版:
http://www.postgresql.jp/document/)。
*2
2.2 1 日目:
、
PostgreSQL
、管理者
記号
記号
。
。\? 入力
。
、通常
閲覧可能
入力
、psql
、SQL
情報
情報 表示
記号
。
11
後
実行
、
。\h
表示
名前 表示
実行
続
・CRUD・結合
。
最高
表示
、最初 文字
、SQL
使
方
以下
。
book=# \h CREATE INDEX
Command:
CREATE INDEX
Description: define a new index
Syntax:
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ]
( { column | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | ...
[ WITH ( storage_parameter = value [, ... ] ) ]
[ TABLESPACE tablespace ]
[ WHERE predicate ]
Postgres 世界 踏 込 前 、
CREATE TABLE
。SELECT
(
復習
便利
慣
親
、軽
)
調
。
SQL
PostgreSQL
慣習 合
SQL
属性 「列」
(COLUMN)、
用語
使
。
使
、
「
」
(TABLE)
、
「行」
(ROW) 呼
、数学用語
。
概念
。本書
、
、
・属性・
、
「数学的
」 参照
。
数学的
、
、
(
名前
(行) 集合
)
使
。
、
属性 原子的 値 写像
(
、{name: ’Genghis Khan’, p.died_at_age: 65})。利用可能
、属性
行(列)
定義
(
構造
名前
数学的
、実装
「関係」
。
実用的
?
関係
。
、数学
、
数学的
強調
。外部
持
。
制約
、数学的
、
属性
制約型
、{name: string, age: int})。以上
要点
話 持 出
、
力
数学
使
関係
側面
他
話
表
大
。
。
出
第 2 章 PostgreSQL
12
、
強力
最適化
。RDBMS
築
、以下
。
、
集合論
派生
規定
関係代数
構
選択(WHERE ...)
、射影(SELECT ...)
、
積(JOIN ...)
nameだけ
を返す
表現
組
合
。
died_at_ageがnullである Peopleを
ところを選択する
xに改名する
( x (People)))
name ( died_at_age=
SELECT x.name FROM People x WHERE x.died_at_age IS NULL
物理
延々
繰
(配列
返
、
)
配列。
考
行
、
組関係演算
数学
タプルxが
存在する
{ t : {name} |
授業
苦
。
書
。
、関係代数
変換
宣言型
RDBMS 、代数 変換
SQL 、上記 図 同
属性nameの
自由変数t
入門
、開発現場
。PostgreSQL
過程
最適化
。以下
図
。
属性nameと
属性died_at_age
タプルxは
リレーション
Peopleに存在する
x : {name, died_at_age} ( x
People
died_at_age
はnull
x.died_at_age =
タプルの属性name
の値が等しい
t.name = x.name )}
自由変数の結果
SELECT x.name FROM People x WHERE x.died_at_age IS NULL
使
PostgreSQL
。
投入
、先
設計 必要
設計
、
定義
沿
。
、
名 列 構成
。
、行
特定
。列
一意
、型 制約情報(任意)
識別子列
決
2.2 1 日目:
。
識別子
PRIMARY KEY(主
SQL 以下
作成
・CRUD・結合
) 呼 。
13
、countries
。
CREATE TABLE countries (
country_code char(2) PRIMARY KEY,
country_name text UNIQUE
);
、複数
別子
特定
。2
、PRIMARY KEY
保存
。行
、2 文字
制約
国
識
。国
重複
country_code 制約
。
。country_name
一意性制約
。
、countries
存在
1
行
列
主
、us
gb
、
挿入
。
INSERT INTO countries (country_code, country_name)
VALUES (’us’,’United States’), (’mx’,’Mexico’), (’au’,’Australia’),
(’gb’,’United Kingdom’), (’de’,’Germany’), (’ll’,’Loompaland’);
次
、一意性制約
追加
。country_name
、一意性制約
引
*5 。
挿入
、
PostgreSQL
正常
重複
保
制約 使
。
INSERT INTO countries
VALUES (’uk’,’United Kingdom’);
ERROR: duplicate key value violates unique constraint "countries_country_name_key"
DETAIL: Key (country_name)=(United Kingdom) already exists.
CRUD
CRUD
、基本的
頭文字
覚
操作
。
追加(Create)、既存
(Delete) 当
)
Create・Read・Update・Delete
。
、新
更新(Update)、不要
以外
参照(Read) 。
削除
操作 (
、CRUD
何
。
行
正
挿入
確認
、SELECT...FROM
SELECT *
FROM countries;
country_code | country_name
--------------+--------------us
| United States
mx
| Mexico
*5[訳注]日本語環境
日本語 表示
。
使 。
第 2 章 PostgreSQL
14
au
gb
de
ll
(6 rows)
|
|
|
|
信頼
Australia
United Kingdom
Germany
Loompaland
地図
、Loompaland
削除
。
country_code
行
行
ll
国
実在
、WHERE 句
削除
削除
。
指定
。
、
。
DELETE FROM countries
WHERE country_code = ’ll’;
countries
実在
国
。country_code
、countries
、REFERENCES
追加
作
指定
、他
主
参照
。
。次
、cities
存在
。country_code 列
外部
制約 呼
。
CREATE TABLE cities (
name text NOT NULL,
postal_code varchar(9) CHECK (postal_code <> ’’),
country_code char(2) REFERENCES countries,
PRIMARY KEY (country_code, postal_code)
);
cities
空
、NULL
name
文字列
許可
許可
(<>
行 一意 特定
、複合
。2
、行
列 一緒
。
型
、text(制限
不等
。postal_code
意味)。
、PRIMARY KEY
特定
。
。
、3
文字列型
可変長文字列)
、varchar(9)(9 文字
挿入
見
可変
長文字列)
、char(2)(2 文字 固定長文字列) 。
CA
、
(country_code + postal_code) 作
一意
、
Postgres
制約
Toronto,
。
INSERT INTO cities
VALUES (’Toronto’,’M4C1B5’,’ca’);
ERROR: insert or update on table "cities" violates foreign key constraint
"cities_country_code_fkey"
DETAIL: Key (country_code)=(ca) is not present in table "countries".
失敗
、
思惑
、country_code
参照整合性
呼
。country_code REFERENCES countries
countries
存在
。
。図 2.1 ( 次
) 示
、
「REFERENCES
、他
」
主
、
cities.country_code
値
表
、cities
NOT NULL
定義
常
正
参照
制約
保証
。
、
NULL 挿入
注意
。NULL
。country_code 参照 NULL 許可
列
country_code char(2) REFERENCES countries
。
2.2 1 日目:
name
・CRUD・結合
country_code | country_name
| postal_code | country_code
--------------+---------------
----------+-------------+-------------Portland | 97205
| us
N 図 2.1 REFERENCES
15
、他
us
| United States
mx
| Mexico
au
| Australia
uk
| United Kingdom
de
| Germany
主
参照
制約
、他
市
挿入
。今度
市 。
INSERT INTO cities
VALUES (’Portland’,’87200’,’us’);
INSERT 0 1
挿入
。
、postal_code
郵便番号 「97205」
、値
。
間違
。Portland
、行 削除
更新
正
再挿入
。
UPDATE cities
SET postal_code = ’97205’
WHERE name = ’Portland’;
行
CRUD(作成・参照・更新・削除)
。
結合参照
本書
取
上
、
CRUD 操作
他
greSQL
結合
。結合
、2
操作
、新
単語
基本的
合
作
似
列
選 出
。Post-
、参照時
何
。
、内部結合
違
可能
方法
合体
。
。簡単
、2
、ON
使
結合
組
。
SELECT cities.*, country_name
FROM cities INNER JOIN countries
ON cities.country_code = countries.country_code;
name
| postal_code | country_code | country_name
----------+-------------+--------------+--------------Portland | 97205
| us
| United States
結合
、1
*6[訳注]単語
返
作
遊
、1
*6
、
。
。
、cities
第 2 章 PostgreSQL
16
列
値
、countries
値
country_name
含
。
複合
開催地
開催地
主
保存
、郵便番号 国
参照
両方
結合
cities
、
値
2
新
存在
列
必要
。
確認
作
。
、外部
(MATCH FULL
保証
NULL
。
venues
制約
、両方
cities
値
存在
、
)
。
CREATE TABLE venues (
venue_id SERIAL PRIMARY KEY,
name varchar(255),
street_address text,
type char(7) CHECK ( type in (’public’,’private’) ) DEFAULT ’public’,
postal_code varchar(9),
country_code char(2),
FOREIGN KEY (country_code, postal_code)
REFERENCES cities (country_code, postal_code) MATCH FULL
);
venue_id 列 、
使
主
設定 。値 自動的 増加
2, 3, 4……)
。
識別子 作
、SERIAL
AUTO_INCREMENT 使 )。
使 (MySQL
整数(1,
INSERT INTO venues (name, postal_code, country_code)
VALUES (’Crystal Ballroom’, ’97205’, ’us’);
上記
venue_id
値
設定
、行
正
挿入
。
複合
結合 話 戻
、2
直後
別名
列
外部
書
venues AS v
。venues
必要
。
。中間
結合
cities
数
AS
節約
書
、
構
名
(venues v
大丈夫)。
SELECT v.venue_id, v.name, c.name
FROM venues v INNER JOIN cities c
ON v.postal_code=c.postal_code AND v.country_code=c.country_code;
venue_id |
name
|
name
----------+------------------+---------1 | Crystal Ballroom | Portland
挿入時
RETURNING 文
、PostgreSQL
指定
列 返
INSERT INTO venues (name, postal_code, country_code)
VALUES (’Voodoo Donuts’, ’97205’, ’us’) RETURNING venue_id;
id
- - - 2
、新
発行
venue_id
取得
。
。