SlideShare a Scribd company logo
1 of 118
Download to read offline
Webで役立つRDBの使い方
第九回 中国地方DB勉強会 in 米子
What is it?
データベースは何を基準に選んでますか?
What is it?
RDBを制する者は
データ層を制する
と言っても過言ではありません
What is it?
今日は
アプリを書く上で便利な事
をご紹介します
What is it?
ただし
インデックスやDB設計
の話は今日はしません
What is it?
主にSQLの話です
What is it?
MySQLやPostgreSQLを使う人の
今日から使える便利な知識(SQL)
を持ち帰って活用してください
あじぇんだ
1 自己紹介
2 連番を作る
3 クエリを減らす
4 まとめ
あじぇんだ
1 自己紹介
2 連番を作る
3 クエリを減らす
4 まとめ
自己紹介
名前:曽根 壮大(そね たけとも)
年齢:30歳(三人の子供がいます)
職業:Webエンジニア
所属:日本PostgreSQLユーザ会
   中国支部 支部長
  技術的にはLL系言語とかRDBが好きです
あじぇんだ
1 自己紹介
2 連番を作る
3 クエリを減らす
4 まとめ
連番を作る
検索結果に合わせて連番を作る
ID 名前 戦闘力 編
1 フリーザ 530000 フリーザ編
2 悟飯(幼少期) 1307 ラディッツ編
3 クリリン 206 ラディッツ編
4 ヤムチャ 177 ラディッツ編
5 農夫 5 ラディッツ編
6 ギニュー 120000 フリーザ編
7 クリリン 1500 フリーザ編
8 亀仙人 139 ラディッツ編
※実務では編は正規化するべき
連番を作る
MySQLの場合
連番を作る
MySQLの場合
↓
SQLの中で変数が使える
MySQLの場合
SET @num := 0;
SELECT
(@num := @num + 1) AS serial,
キャラクター.*
FROM キャラクター
ORDER BY 戦闘力 DESC;
MySQLの場合
SET @num := 0;
SELECT
(@num := @num + 1) AS serial,
キャラクター.*
FROM キャラクター
ORDER BY 戦闘力 DESC;
変数宣言
MySQLの場合
SET @num := 0;
SELECT
(@num := @num + 1) AS serial,
キャラクター.*
FROM キャラクター
ORDER BY 戦闘力 DESC;
変数宣言
変数をインクリメントしながら表示
MySQLの場合
SELECT
(@num := @num + 1) AS serial,
キャラクター.*
FROM キャラクター,
(SELECT @num := 0 ) AS base
ORDER BY 戦闘力 DESC;
MySQLの場合
SELECT
(@num := @num + 1) AS serial,
キャラクター.*
FROM キャラクター,
(SELECT @num := 0 ) AS base
ORDER BY 戦闘力 DESC;
変数宣言をテーブルとして行い、
JOINすることで1回のクエリにする
連番 ID 名前 戦闘力 編
1 1 フリーザ 530000 フリーザ編
2 6 ギニュー 120000 フリーザ編
3 7 クリリン 1500 フリーザ編
4 2 悟飯(幼少期) 1307 ラディッツ編
5 3 クリリン 206 ラディッツ編
6 4 ヤムチャ 177 ラディッツ編
7 8 亀仙人 139 ラディッツ編
8 5 農夫 5 ラディッツ編
※実行結果
連番を作る
他の変数宣言の使い方
MySQLの場合
SET sql_mode = 'PIPES_AS_CONCAT';
SET @num := 1;
INSERT INTO users (name)
VALUES (
'soudai+' || (@num := @num + 1)
);
MySQLの場合
SET sql_mode = 'PIPES_AS_CONCAT';
SET @num := 1;
INSERT INTO users (name)
VALUES (
'soudai+' || (@num := @num + 1)
);
文字結合を¦¦で出来るようにモード変更
MySQLの場合
SET sql_mode = 'PIPES_AS_CONCAT';
SET @num := 1;
INSERT INTO users (name)
VALUES (
'soudai+' || (@num := @num + 1)
);
INSERTを実行するたびに
nameが変わる
文字結合を¦¦で出来るようにモード変更
ID 名前 作成日
15 soudai+16 "2015-05-30 04:15:24"
14 soudai+15 "2015-05-30 04:15:24"
13 soudai+14 "2015-05-30 04:15:24"
12 soudai+13 "2015-05-30 04:15:24"
11 soudai+12 "2015-05-30 04:15:24"
10 soudai+11 "2015-05-30 04:15:24"
9 soudai+10 "2015-05-30 04:15:24"
8 soudai+9 "2015-05-30 04:15:23"
7 soudai+8 "2015-05-30 04:15:23"
6 soudai+7 "2015-05-30 04:15:23"
5 soudai+6 "2015-05-30 04:15:23"
4 soudai+5 "2015-05-30 04:15:23"
3 soudai+4 "2015-05-30 04:15:23"
2 soudai+3 "2015-05-30 04:15:23"
1 soudai+2 "2015-05-30 04:15:22"
※実行結果
MySQLの変数宣言
その他の使い方
MySQLの変数宣言
その他の使い方
1 帳簿などで連続した日付を作る
MySQLの変数宣言
その他の使い方
1 帳簿などで連続した日付を作る
2 テストデータの投入
MySQLの変数宣言
その他の使い方
1 帳簿などで連続した日付を作る
2 テストデータの投入
3 一時的にデータを保持をする
MySQLの変数宣言
その他の使い方
1 帳簿などで連続した日付を作る
2 テストデータの投入
3 一時的にデータを保持をする
MySQLの変数宣言
注意点
変数展開は
「いつ実施されるか定まってない」
MySQLの変数宣言
注意点
JOINやサブクエリは
先にselect_listが評価される
↓
SELECT @num = @num+1
の+1が行われない
MySQLの変数宣言
注意点
JOINやサブクエリは
先にselect_listが評価される
↓
SELECT @num = @num+1
の+1が行われない
対象の列でORDER BYとかしてるとハマる
(というかハマった)
連番を作る
PostgreSQLの場合
連番を作る
PostgreSQLの場合
↓
SQL内での変数宣言が無い
連番を作る
PostgreSQLの場合
↓
Window関数を使う
連番を作る
ウィンドウ関数
ウィンドウ関数は現在の行に何らの
関係するテーブル行の一纏まり全般
の計算を行う。
PostgreSQLの場合
SELECT
row_number()
OVER(
ORDER BY 戦闘力 DESC
) AS serial,
*
FROM キャラクター;
PostgreSQLの場合
SELECT
row_number()
OVER(
ORDER BY 戦闘力 DESC
) AS serial,
*
FROM キャラクター;
行番号を振る
PostgreSQLの場合
SELECT
row_number()
OVER(
ORDER BY 戦闘力 DESC
) AS serial,
*
FROM キャラクター;
行番号を振る
戦闘力で並べる
連番 ID 名前 戦闘力 編
1 1 フリーザ 530000 フリーザ編
2 6 ギニュー 120000 フリーザ編
3 7 クリリン 1500 フリーザ編
4 2 悟飯(幼少期) 1307 ラディッツ編
5 3 クリリン 206 ラディッツ編
6 4 ヤムチャ 177 ラディッツ編
7 8 亀仙人 139 ラディッツ編
8 5 農夫 5 ラディッツ編
※実行結果
連番 ID 名前 戦闘力 編
1 1 フリーザ 530000 フリーザ編
2 6 ギニュー 120000 フリーザ編
3 7 クリリン 1500 フリーザ編
4 2 悟飯(幼少期) 1307 ラディッツ編
5 3 クリリン 206 ラディッツ編
6 4 ヤムチャ 177 ラディッツ編
7 8 亀仙人 139 ラディッツ編
8 5 農夫 5 ラディッツ編
※実行結果
MySQLと同じ結果
連番を作る
区分ごとのランキングも作れる
PostgreSQLの場合
SELECT
rank() OVER (
PARTITION BY "編"
ORDER BY "戦闘力" DESC
)
, *
FROM "キャラクター";
PostgreSQLの場合
SELECT
rank() OVER (
PARTITION BY "編"
ORDER BY "戦闘力" DESC
)
, *
FROM "キャラクター";
区分を指定する
PostgreSQLの場合
SELECT
rank() OVER (
PARTITION BY "編"
ORDER BY "戦闘力" DESC
)
, *
FROM "キャラクター";
区分ごとのランキング
区分を指定する
RANK ID 名前 戦闘力 編
1 2 悟飯(幼少期) 1307 ラディッツ編
2 3 クリリン 206 ラディッツ編
3 4 ヤムチャ 177 ラディッツ編
4 8 亀仙人 139 ラディッツ編
5 5 農夫 5 ラディッツ編
1 1 フリーザ 530000 フリーザ編
2 6 ギニュー 120000 フリーザ編
3 7 クリリン 1500 フリーザ編
※実行結果
RANK ID 名前 戦闘力 編
1 2 悟飯(幼少期) 1307 ラディッツ編
2 3 クリリン 206 ラディッツ編
3 4 ヤムチャ 177 ラディッツ編
4 8 亀仙人 139 ラディッツ編
5 5 農夫 5 ラディッツ編
1 1 フリーザ 530000 フリーザ編
2 6 ギニュー 120000 フリーザ編
3 7 クリリン 1500 フリーザ編
※実行結果
ラディッツ編で集計
フリーザ編で集計
RANK ID 名前 戦闘力 編
1 2 悟飯(幼少期) 1307 ラディッツ編
2 3 クリリン 206 ラディッツ編
3 4 ヤムチャ 177 ラディッツ編
4 8 亀仙人 139 ラディッツ編
5 5 農夫 5 ラディッツ編
1 1 フリーザ 530000 フリーザ編
2 6 ギニュー 120000 フリーザ編
3 7 クリリン 1500 フリーザ編
※実行結果
ラディッツ編で集計
フリーザ編で集計
RANKが別々に振られる
連番を作る
もっと複雑なランキング
名前 戦闘力 編
フリーザ 530000 フリーザ編
フリーザ 10000000 フリーザ編
フリーザ 20000000 フリーザ編
悟飯(幼少期) 1307 ラディッツ編
クリリン 206 ラディッツ編
ヤムチャ 177 ラディッツ編
農夫 5 ラディッツ編
ギニュー 120000 フリーザ編
クリリン 1500 フリーザ編
クリリン 0 フリーザ編
クリリン 10000 フリーザ編
亀仙人 139 ラディッツ編
ランキングを作る
要件
1 戦闘力の降順(DESC)
2 表示はRANKと名前と戦闘力と編
3 編で分ける
4 キャラクターの戦闘力の最大値
実際のSQL
SELECT
rank() OVER (
PARTITION BY "編"
ORDER BY max("戦闘力") DESC
) , "名前", MAX("戦闘力"), "編"
FROM "キャラクター2"
GROUP BY "名前","編";
実際のSQL
SELECT
rank() OVER (
PARTITION BY "編"
ORDER BY max("戦闘力") DESC
) , "名前", MAX("戦闘力"), "編"
FROM "キャラクター2"
GROUP BY "名前","編"; 集約関数を指定する
実際のSQL
SELECT
rank() OVER (
PARTITION BY "編"
ORDER BY max("戦闘力") DESC
) , "名前", MAX("戦闘力"), "編"
FROM "キャラクター2"
GROUP BY "名前","編"; 集約関数を指定する
編ごとの最大戦闘力を指定
RANK 名前 戦闘力 編
1 悟飯(幼少期) 1307 ラディッツ編
2 クリリン 206 ラディッツ編
3 ヤムチャ 177 ラディッツ編
4 亀仙人 139 ラディッツ編
5 農夫 5 ラディッツ編
1 フリーザ 20000000 フリーザ編
2 ギニュー 120000 フリーザ編
3 クリリン 10000 フリーザ編
※実行結果
関数 説明
row_number() 行番号
rank() ランキング (同率で番号を飛ばす)
dense_rank() ランキング (同率で番号を飛ばさない)
percent_rank() ランキング (%で表示) : (rank - 1) / (全行数 - 1)
cume_dist() percent_rank に類似 : (現在の行の位置) / (全行数)
ntile(N) ランキング (1..N に分割)
lag(value, offset, default) ソート状態での前の行の値
lead(value, offset, default) ソート状態での後の行の値
first_value(value) 最初の値
last_value(value) 最後の値
nth_value(value, N) N番目の値 (1から数える)
※Window関数で指定できる関数
連番を作る
PostgreSQLでは
連番を作る関数がある
連番を作る
generate_series(start, end, step)
generate_series()
SELECT
generate_series(1, 10),
generate_series(1, 10, 2),
date(now())
+ generate_series(0, 9)::INT AS day
generate_series()
SELECT
generate_series(1, 10),
generate_series(1, 10, 2),
date(now())
+ generate_series(0, 9)::INT AS day
1から10の連番
generate_series()
SELECT
generate_series(1, 10),
generate_series(1, 10, 2),
date(now())
+ generate_series(0, 9)::INT AS day
1から10の連番
ステップ数を指定した場合
generate_series()
SELECT
generate_series(1, 10),
generate_series(1, 10, 2),
date(now())
+ generate_series(0, 9)::INT AS day
1から10の連番
ステップ数を指定した場合
連続した日付を生成
連番 ステップ指定 日付
1 1 2015-05-30
2 3 2015-05-31
3 5 2015-06-01
4 7 2015-06-02
5 9 2015-06-03
6 1 2015-06-04
7 3 2015-06-05
8 5 2015-06-06
9 7 2015-06-07
10 9 2015-06-08
※実行結果
連番 ステップ指定 日付
1 1 2015-05-30
2 3 2015-05-31
3 5 2015-06-01
4 7 2015-06-02
5 9 2015-06-03
6 1 2015-06-04
7 3 2015-06-05
8 5 2015-06-06
9 7 2015-06-07
10 9 2015-06-08
※実行結果
endの値を超えたので1に戻る
連番を作る
generate_series()を使えば
MySQLのような連番も作れる
あじぇんだ
1 自己紹介
2 連番を作る
3 クエリを減らす
4 まとめ
クエリを減らす
追加と更新を同時にしたい
クエリを減らす
追加と更新を同時にしたい
↓
Merge文
クエリを減らす
残念ながら…
MySQLにもPostgreSQLにも無い
クエリを減らす
MySQLには
↓
ON DUPLICATE KEY UPDATE
クエリを減らす
ON DUPLICATE KEY UPDATE
プライマリーキー制約やユニーク制
約が設定されているカラムにデータ
を追加する際に、既にデータがあれ
ば例外後にUPDATE文を行う
ON DUPLICATE KEY UPDATE
INSERT users (id, name)
SELECT
id + 5 AS id,
@num := @num + 1 AS name
FROM users,
(SELECT @num := 0) AS num
ON DUPLICATE KEY UPDATE
name = CONCAT('taketomo', @num := @num + 1)
ON DUPLICATE KEY UPDATE
INSERT users (id, name)
SELECT
id + 5 AS id,
@num := @num + 1 AS name
FROM users,
(SELECT @num := 0) AS num
ON DUPLICATE KEY UPDATE
name = CONCAT('taketomo', @num := @num + 1)
既存のIDの+5を指定
ON DUPLICATE KEY UPDATE
INSERT users (id, name)
SELECT
id + 5 AS id,
@num := @num + 1 AS name
FROM users,
(SELECT @num := 0) AS num
ON DUPLICATE KEY UPDATE
name = CONCAT('taketomo', @num := @num + 1)
既存のIDの+5を指定
INSERTの場合
ON DUPLICATE KEY UPDATE
INSERT users (id, name)
SELECT
id + 5 AS id,
@num := @num + 1 AS name
FROM users,
(SELECT @num := 0) AS num
ON DUPLICATE KEY UPDATE
name = CONCAT('taketomo', @num := @num + 1)
既存のIDの+5を指定
INSERTの場合
UPDATEの場合
ID 名前 作成日
1 soudai+1 "2015-05-30 06:21:50"
2 soudai+2 "2015-05-30 06:21:53"
3 soudai+3 "2015-05-30 06:21:54"
4 soudai+4 "2015-05-30 06:21:55"
5 soudai+5 "2015-05-30 06:21:55"
6 taketomo10 "2015-05-30 06:21:56"
7 taketomo11 "2015-05-30 06:21:58"
8 taketomo12 "2015-05-30 06:21:58"
9 taketomo13 "2015-05-30 06:21:59"
10 5 "2015-05-30 06:22:05"
11 6 "2015-05-30 06:22:05"
12 7 "2015-05-30 06:22:05"
13 8 "2015-05-30 06:22:05"
14 9 "2015-05-30 06:22:05"
※実行結果
ID 名前 作成日
1 soudai+1 "2015-05-30 06:21:50"
2 soudai+2 "2015-05-30 06:21:53"
3 soudai+3 "2015-05-30 06:21:54"
4 soudai+4 "2015-05-30 06:21:55"
5 soudai+5 "2015-05-30 06:21:55"
6 taketomo10 "2015-05-30 06:21:56"
7 taketomo11 "2015-05-30 06:21:58"
8 taketomo12 "2015-05-30 06:21:58"
9 taketomo13 "2015-05-30 06:21:59"
10 5 "2015-05-30 06:22:05"
11 6 "2015-05-30 06:22:05"
12 7 "2015-05-30 06:22:05"
13 8 "2015-05-30 06:22:05"
14 9 "2015-05-30 06:22:05"
※実行結果
IDが衝突したのでUPADTEした
ID 名前 作成日
1 soudai+1 "2015-05-30 06:21:50"
2 soudai+2 "2015-05-30 06:21:53"
3 soudai+3 "2015-05-30 06:21:54"
4 soudai+4 "2015-05-30 06:21:55"
5 soudai+5 "2015-05-30 06:21:55"
6 taketomo10 "2015-05-30 06:21:56"
7 taketomo11 "2015-05-30 06:21:58"
8 taketomo12 "2015-05-30 06:21:58"
9 taketomo13 "2015-05-30 06:21:59"
10 5 "2015-05-30 06:22:05"
11 6 "2015-05-30 06:22:05"
12 7 "2015-05-30 06:22:05"
13 8 "2015-05-30 06:22:05"
14 9 "2015-05-30 06:22:05"
※実行結果
IDが衝突したのでUPADTEした
新規のINSERT
クエリを減らす
MySQLには
↓
REPLACE文
クエリを減らす
REPLACE文
プライマリーキー制約やユニーク制
約が設定されているカラムで既にデー
タがあれば対象のデータを削除後に
INSERT文を行う
REPLACE
REPLACE users (id, name)
SELECT
id + 5 AS id,
CONCAT('replace', @num := @num + 1)
FROM users,
(SELECT @num := 0) AS num;
INSERTの条件
既存のIDの+5を指定
ID 名前 作成日
1 soudai+1 "2015-05-30 06:21:50"
2 soudai+2 "2015-05-30 06:21:53"
3 soudai+3 "2015-05-30 06:21:54"
4 soudai+4 "2015-05-30 06:21:55"
5 soudai+5 "2015-05-30 06:21:55"
6 replace1 "2015-05-30 08:06:59"
7 replace2 "2015-05-30 08:06:59"
8 replace3 "2015-05-30 08:06:59"
9 replace4 "2015-05-30 08:06:59"
10 replace5 "2015-05-30 08:06:59"
11 replace6 "2015-05-30 08:06:59"
12 replace7 "2015-05-30 08:06:59"
13 replace8 "2015-05-30 08:06:59"
14 replace9 "2015-05-30 08:06:59"
15 replace10 "2015-05-30 08:06:59"
※実行結果
ID 名前 作成日
1 soudai+1 "2015-05-30 06:21:50"
2 soudai+2 "2015-05-30 06:21:53"
3 soudai+3 "2015-05-30 06:21:54"
4 soudai+4 "2015-05-30 06:21:55"
5 soudai+5 "2015-05-30 06:21:55"
6 replace1 "2015-05-30 08:06:59"
7 replace2 "2015-05-30 08:06:59"
8 replace3 "2015-05-30 08:06:59"
9 replace4 "2015-05-30 08:06:59"
10 replace5 "2015-05-30 08:06:59"
11 replace6 "2015-05-30 08:06:59"
12 replace7 "2015-05-30 08:06:59"
13 replace8 "2015-05-30 08:06:59"
14 replace9 "2015-05-30 08:06:59"
15 replace10 "2015-05-30 08:06:59"
※実行結果
IDがかぶっていないので直接
INSERTしている
ID 名前 作成日
1 soudai+1 "2015-05-30 06:21:50"
2 soudai+2 "2015-05-30 06:21:53"
3 soudai+3 "2015-05-30 06:21:54"
4 soudai+4 "2015-05-30 06:21:55"
5 soudai+5 "2015-05-30 06:21:55"
6 replace1 "2015-05-30 08:06:59"
7 replace2 "2015-05-30 08:06:59"
8 replace3 "2015-05-30 08:06:59"
9 replace4 "2015-05-30 08:06:59"
10 replace5 "2015-05-30 08:06:59"
11 replace6 "2015-05-30 08:06:59"
12 replace7 "2015-05-30 08:06:59"
13 replace8 "2015-05-30 08:06:59"
14 replace9 "2015-05-30 08:06:59"
15 replace10 "2015-05-30 08:06:59"
※実行結果
IDが衝突したのでDELETEして
INSERTしている
IDがかぶっていないので直接
INSERTしている
クエリを減らす
REPLACE文
• 構文はINSERTと同じ
• 対象は全て削除してから作り直す
• AUTO_INCREMENTが変わる
• 構文でIDを指定しない場合はIDが振り直し
クエリを減らす
PostgreSQL 9.5
• INSERTの衝突時のUPDATEが実装される(予定
• ON CONFLICT DO NOTHING/UPDATE
• Marge文(UPSERT文)は何年も議論が進んでない
(現状の実装ではレアケースでクラッシュするらしい)
• Marge文はSQL標準なのでいつか実装する(多分
クエリを減らす
PostgreSQL 9.5
• INSERTの衝突時のUPDATEが実装される(予定
• ON CONFLICT DO NOTHING/UPDATE
• Marge文(UPSERT文)は何年も議論が進んでない
(現状の実装ではレアケースでクラッシュするらしい)
• Marge文はSQL標準なのでいつか実装する(多分
クエリを減らす
PostgreSQLにも便利な機能がある
↓
RETURNING句
クエリを減らす
RETURNING句
PostgreSQLの独自拡張で
INSERT・UPDATE・DELETE
の結果を返す
RETURNING
INSERT INTO tmp_log
(VALUE)
VALUES
('test1')
, ('test2')
, ('test3')
RETURNING *;
RETURNING
INSERT INTO tmp_log
(VALUE)
VALUES
('test1')
, ('test2')
, ('test3')
RETURNING *;
通常のINSERTの構文
RETURNING
INSERT INTO tmp_log
(VALUE)
VALUES
('test1')
, ('test2')
, ('test3')
RETURNING *;
通常のINSERTの構文
返す戻り値を指定
ID 名前 作成日
1 test1 "2015-05-30 21:25:18.699022"
2 test2 "2015-05-30 21:25:18.699022"
3 test3 "2015-05-30 21:25:18.699022"
4 test4 "2015-05-30 21:25:18.699022"
5 test5 "2015-05-30 21:25:18.699022"
6 test6 "2015-05-30 21:25:18.699022"
7 test7 "2015-05-30 21:25:18.699022"
※実行結果
RETURNING句
使い方
• INSERTしたレコードのIDの確認が不要
• WHERE句を利用したUPDATE文の対象を取得
• WITH句と組み合わせると戻り値を利用できる
• WITH句+RETURNING句でMerge文も出来る
WITH+RETURNING
WITH base AS (
SELECT * FROM tmp_log
), upd AS (
UPDATE tmp_log
SET value = base.value || ' update' FROM base
WHERE tmp_log.id > 2 RETURNING tmp_log.id
)
INSERT INTO tmp_log (value)
SELECT value || ‘ INSERT’ FROM base AS ins
WHERE id NOT IN (SELECT id FROM upd);
WITH+RETURNING
WITH base AS (
SELECT * FROM tmp_log
), upd AS (
UPDATE tmp_log
SET value = base.value || ' update' FROM base
WHERE tmp_log.id > 2 RETURNING tmp_log.id
)
INSERT INTO tmp_log (value)
SELECT value || ‘INSERT’ FROM base AS ins
WHERE id NOT IN (SELECT id FROM upd);
対象のテーブルを指定する
WITH+RETURNING
WITH base AS (
SELECT * FROM tmp_log
), upd AS (
UPDATE tmp_log
SET value = base.value || ' update' FROM base
WHERE tmp_log.id > 2 RETURNING tmp_log.id
)
INSERT INTO tmp_log (value)
SELECT value || ‘INSERT’ FROM base AS ins
WHERE id NOT IN (SELECT id FROM upd);
対象のテーブルを指定する
UPDATEを行う
UPDATEしたIDを返す
WITH+RETURNING
WITH base AS (
SELECT * FROM tmp_log
), upd AS (
UPDATE tmp_log
SET value = base.value || ' update' FROM base
WHERE tmp_log.id > 2 RETURNING tmp_log.id
)
INSERT INTO tmp_log (value)
SELECT value || ‘INSERT’ FROM base AS ins
WHERE id NOT IN (SELECT id FROM upd);
対象のテーブルを指定する
UPDATEを行う
UPDATEしたIDを返す
UPDATE以外の結果を
INSERT
WITH+RETURNING
tmp_log
一時領域
WITH+RETURNING
base tmp_log
WITH
一時領域
WITH+RETURNING
base tmp_log
一時領域
upd
UPDATE
WITH+RETURNING
base tmp_log
一時領域
upd
RETURNING
upd
WITH+RETURNING
base tmp_log
一時領域
updupd
ins
ins
サブクエリ
WITH+RETURNING
base tmp_log
一時領域
updupd
ins
ins
INSERT
ins
ID 名前 作成日
1 test1 "2015-05-30 21:41:15.014615"
2 test2 "2015-05-30 21:41:15.014615"
3 test1 update "2015-05-30 21:41:15.014615"
4 test1 update "2015-05-30 21:41:15.014615"
5 test1 update "2015-05-30 21:41:15.014615"
6 test1 update "2015-05-30 21:41:15.014615"
7 test1 update "2015-05-30 21:41:15.014615"
8 test1INSERT "2015-05-30 21:42:32.749261"
9 test2INSERT "2015-05-30 21:42:32.749261"
※実行結果
あじぇんだ
1 自己紹介
2 連番を作る
3 クエリを減らす
4 まとめ
まとめ
まとめ
Webは日々複雑になっている
まとめ
Webは日々複雑になっている
↓
取り扱うデータも増えている
まとめ
運用が始まるとデータは変えれない
まとめ
運用が始まるとデータは変えれない
↓
どんなにコードが綺麗でもデータ構造
がダメだとリファクタリングは難しい
まとめ
データの扱い(SQL)を覚える
まとめ
SQLを使ってデータを守る
まとめ
SQLを使ってデータを守る
↓
運用をシンプルにする
まとめ
データの寿命はコードより長い
ご静聴ありがとうございました。

More Related Content

What's hot

Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介Ryuichiro Munechika
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介Satoshi Hirata
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwToshi Harada
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017Shigeru Hanada
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-klyToshi Harada
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
Oratopostgres-hiroshima
Oratopostgres-hiroshimaOratopostgres-hiroshima
Oratopostgres-hiroshimaKosuke Kida
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo dbYuji Isobe
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubToshi Harada
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaShigeru Hanada
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話saiken3110
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Daichi Egawa
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫Insight Technology, Inc.
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5Toshi Harada
 

What's hot (20)

Chugokudb18_1
Chugokudb18_1Chugokudb18_1
Chugokudb18_1
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのかJSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
 
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdw
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
Oratopostgres-hiroshima
Oratopostgres-hiroshimaOratopostgres-hiroshima
Oratopostgres-hiroshima
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
 
Cassandra v0.6-siryou
Cassandra v0.6-siryouCassandra v0.6-siryou
Cassandra v0.6-siryou
 
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 

Viewers also liked

便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips豊明 尾古
 
第九回中国地方DB勉強会 in 米子 MySQL 5.7+
第九回中国地方DB勉強会 in 米子 MySQL 5.7+第九回中国地方DB勉強会 in 米子 MySQL 5.7+
第九回中国地方DB勉強会 in 米子 MySQL 5.7+Ryusuke Kajiyama
 
すぐ始めれるクラウド
すぐ始めれるクラウドすぐ始めれるクラウド
すぐ始めれるクラウドSoudai Sone
 
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@sakaik
 
Viewを使って開発を楽にする話
Viewを使って開発を楽にする話Viewを使って開発を楽にする話
Viewを使って開発を楽にする話Isamu Watanabe
 
中国地方Db勉強会
中国地方Db勉強会中国地方Db勉強会
中国地方Db勉強会Daisuke Kasuya
 
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)Shinya Sugiyama
 
20151205 中国地方db勉強会 dbm_fs
20151205 中国地方db勉強会 dbm_fs20151205 中国地方db勉強会 dbm_fs
20151205 中国地方db勉強会 dbm_fsTakahiro Iwase
 
意外と知らないFilemakerの世界
意外と知らないFilemakerの世界意外と知らないFilemakerの世界
意外と知らないFilemakerの世界Tatsuo_Ohtani
 
オープンデータ超入門
オープンデータ超入門オープンデータ超入門
オープンデータ超入門和宏 石崎
 
意外と知らないFilemakerの世界
意外と知らないFilemakerの世界意外と知らないFilemakerの世界
意外と知らないFilemakerの世界Tatsuo_Ohtani
 
Amazon Redshiftを使ったデータ分析
Amazon Redshiftを使ったデータ分析Amazon Redshiftを使ったデータ分析
Amazon Redshiftを使ったデータ分析Tomohiro Yamaguchi
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Toshi Harada
 
20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQL20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQLRyusuke Kajiyama
 
20150920 中国地方db勉強会
20150920 中国地方db勉強会20150920 中国地方db勉強会
20150920 中国地方db勉強会yoyamasaki
 
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQLMySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQLRyusuke Kajiyama
 
Handlerさんコンニチワ
HandlerさんコンニチワHandlerさんコンニチワ
Handlerさんコンニチワyoku0825
 
20150523 chatwork continuous delivery
20150523 chatwork continuous delivery20150523 chatwork continuous delivery
20150523 chatwork continuous deliveryYoshinori Fujiwara
 
DDDハンズオン
DDDハンズオンDDDハンズオン
DDDハンズオンSoudai Sone
 

Viewers also liked (20)

便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips
 
第九回中国地方DB勉強会 in 米子 MySQL 5.7+
第九回中国地方DB勉強会 in 米子 MySQL 5.7+第九回中国地方DB勉強会 in 米子 MySQL 5.7+
第九回中国地方DB勉強会 in 米子 MySQL 5.7+
 
10大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon201510大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon2015
 
すぐ始めれるクラウド
すぐ始めれるクラウドすぐ始めれるクラウド
すぐ始めれるクラウド
 
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
 
Viewを使って開発を楽にする話
Viewを使って開発を楽にする話Viewを使って開発を楽にする話
Viewを使って開発を楽にする話
 
中国地方Db勉強会
中国地方Db勉強会中国地方Db勉強会
中国地方Db勉強会
 
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
 
20151205 中国地方db勉強会 dbm_fs
20151205 中国地方db勉強会 dbm_fs20151205 中国地方db勉強会 dbm_fs
20151205 中国地方db勉強会 dbm_fs
 
意外と知らないFilemakerの世界
意外と知らないFilemakerの世界意外と知らないFilemakerの世界
意外と知らないFilemakerの世界
 
オープンデータ超入門
オープンデータ超入門オープンデータ超入門
オープンデータ超入門
 
意外と知らないFilemakerの世界
意外と知らないFilemakerの世界意外と知らないFilemakerの世界
意外と知らないFilemakerの世界
 
Amazon Redshiftを使ったデータ分析
Amazon Redshiftを使ったデータ分析Amazon Redshiftを使ったデータ分析
Amazon Redshiftを使ったデータ分析
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQL20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQL
 
20150920 中国地方db勉強会
20150920 中国地方db勉強会20150920 中国地方db勉強会
20150920 中国地方db勉強会
 
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQLMySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL
 
Handlerさんコンニチワ
HandlerさんコンニチワHandlerさんコンニチワ
Handlerさんコンニチワ
 
20150523 chatwork continuous delivery
20150523 chatwork continuous delivery20150523 chatwork continuous delivery
20150523 chatwork continuous delivery
 
DDDハンズオン
DDDハンズオンDDDハンズオン
DDDハンズオン
 

Similar to Webで役立つRDBの使い方

データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)Kenta Oku
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会Nao Minami
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜Michitoshi Yoshida
 
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏Insight Technology, Inc.
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張Shigeru Hanada
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
Lv1から始めるWebサービスのインフラ構築
Lv1から始めるWebサービスのインフラ構築Lv1から始めるWebサービスのインフラ構築
Lv1から始めるWebサービスのインフラ構築伊藤 祐策
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extensionToshi Harada
 
データベース11 - データベースとプログラム
データベース11 - データベースとプログラムデータベース11 - データベースとプログラム
データベース11 - データベースとプログラムKenta Oku
 
データベース設計の基本編.pdf
データベース設計の基本編.pdfデータベース設計の基本編.pdf
データベース設計の基本編.pdfTezuka Masato
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~オラクルエンジニア通信
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだNarami Kiyokura
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517akirahiguchi
 
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権Shohei Yokoyama
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...Insight Technology, Inc.
 

Similar to Webで役立つRDBの使い方 (20)

データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
 
Heroku Postgres
Heroku PostgresHeroku Postgres
Heroku Postgres
 
Heroku Postgres
Heroku PostgresHeroku Postgres
Heroku Postgres
 
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
DeclarativeSql
DeclarativeSqlDeclarativeSql
DeclarativeSql
 
Lv1から始めるWebサービスのインフラ構築
Lv1から始めるWebサービスのインフラ構築Lv1から始めるWebサービスのインフラ構築
Lv1から始めるWebサービスのインフラ構築
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
データベース11 - データベースとプログラム
データベース11 - データベースとプログラムデータベース11 - データベースとプログラム
データベース11 - データベースとプログラム
 
データベース設計の基本編.pdf
データベース設計の基本編.pdfデータベース設計の基本編.pdf
データベース設計の基本編.pdf
 
Tokyo r28 1
Tokyo r28 1Tokyo r28 1
Tokyo r28 1
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
 

More from Soudai Sone

DBの闇を書くにはこの余白は狭すぎる
DBの闇を書くにはこの余白は狭すぎるDBの闇を書くにはこの余白は狭すぎる
DBの闇を書くにはこの余白は狭すぎるSoudai Sone
 
レガシーな環境からモダンへの挑戦
レガシーな環境からモダンへの挑戦レガシーな環境からモダンへの挑戦
レガシーな環境からモダンへの挑戦Soudai Sone
 
PostgreSQLとpython
PostgreSQLとpythonPostgreSQLとpython
PostgreSQLとpythonSoudai Sone
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話Soudai Sone
 
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能Soudai Sone
 
実務で役立つデータベースの活用法
実務で役立つデータベースの活用法実務で役立つデータベースの活用法
実務で役立つデータベースの活用法Soudai Sone
 
今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQLSoudai Sone
 
Postgre sqlから見るnosql
Postgre sqlから見るnosqlPostgre sqlから見るnosql
Postgre sqlから見るnosqlSoudai Sone
 
中国地方Db勉強会
中国地方Db勉強会中国地方Db勉強会
中国地方Db勉強会Soudai Sone
 
Ansibleで始めるpostgre sqlの冗長化
Ansibleで始めるpostgre sqlの冗長化Ansibleで始めるpostgre sqlの冗長化
Ansibleで始めるpostgre sqlの冗長化Soudai Sone
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Soudai Sone
 
Web で変わったクラウドと postgre sql の今と昔
Web で変わったクラウドと postgre sql の今と昔Web で変わったクラウドと postgre sql の今と昔
Web で変わったクラウドと postgre sql の今と昔Soudai Sone
 
PostgreSQLの冗長化について
PostgreSQLの冗長化についてPostgreSQLの冗長化について
PostgreSQLの冗長化についてSoudai Sone
 
Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Soudai Sone
 
聞いたら参加したくなるJjug cccの報告
聞いたら参加したくなるJjug cccの報告聞いたら参加したくなるJjug cccの報告
聞いたら参加したくなるJjug cccの報告Soudai Sone
 
地方における勉強会事情
地方における勉強会事情地方における勉強会事情
地方における勉強会事情Soudai Sone
 

More from Soudai Sone (20)

DBの闇を書くにはこの余白は狭すぎる
DBの闇を書くにはこの余白は狭すぎるDBの闇を書くにはこの余白は狭すぎる
DBの闇を書くにはこの余白は狭すぎる
 
レガシーな環境からモダンへの挑戦
レガシーな環境からモダンへの挑戦レガシーな環境からモダンへの挑戦
レガシーな環境からモダンへの挑戦
 
PostgreSQLとpython
PostgreSQLとpythonPostgreSQLとpython
PostgreSQLとpython
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話
 
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
 
実務で役立つデータベースの活用法
実務で役立つデータベースの活用法実務で役立つデータベースの活用法
実務で役立つデータベースの活用法
 
今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL
 
Postgre sqlから見るnosql
Postgre sqlから見るnosqlPostgre sqlから見るnosql
Postgre sqlから見るnosql
 
中国地方Db勉強会
中国地方Db勉強会中国地方Db勉強会
中国地方Db勉強会
 
Ansibleで始めるpostgre sqlの冗長化
Ansibleで始めるpostgre sqlの冗長化Ansibleで始めるpostgre sqlの冗長化
Ansibleで始めるpostgre sqlの冗長化
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由
 
Web で変わったクラウドと postgre sql の今と昔
Web で変わったクラウドと postgre sql の今と昔Web で変わったクラウドと postgre sql の今と昔
Web で変わったクラウドと postgre sql の今と昔
 
Osc2014
Osc2014Osc2014
Osc2014
 
PostgreSQLの冗長化について
PostgreSQLの冗長化についてPostgreSQLの冗長化について
PostgreSQLの冗長化について
 
Osh2014
Osh2014Osh2014
Osh2014
 
Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)
 
聞いたら参加したくなるJjug cccの報告
聞いたら参加したくなるJjug cccの報告聞いたら参加したくなるJjug cccの報告
聞いたら参加したくなるJjug cccの報告
 
地方における勉強会事情
地方における勉強会事情地方における勉強会事情
地方における勉強会事情
 
Wtm
WtmWtm
Wtm
 

Webで役立つRDBの使い方