開発・プログラミング・データベース
基本SQLからインデックスチューニング・トランザクション・pgvectorまで
一つのPostgreSQLで網羅する講座
本講座は、基本的なSQLからインデックスチューニング、トランザクション、JSONB、pgvectorまで、PostgreSQLを実践的に学ぶ初心者向けのPostgreSQL講座です。ログが溜まればストレージを増やし、検索が必要になればエンジンをもう一つ追加し、AI機能にはベクターDBをさらに追加するといった流れを、たった一つのデータベースで完結させます。
- 難易度:入門
- 9時間26分
- 39講義
- 実践中心
- Docker環境
- 受講期間無制限
- 基礎 → 分散リレーショナル概念から分散環境まで一貫した流れ
- 39講 · 9時間26分9セクション、基礎から分散まで
- pgvector · JSONB外部依存なしで1つのDBで
2,000++億件規模のデータを扱ってきたシリコンバレーのAIスタートアップ現役サーバー開発者が共同で構築したカリキュラム
実習環境はmacOS(Apple M3)・Dockerがあれば十分です
PostgreSQL ・オブジェクトリレーショナルデータベースCREATE TABLE ・制約条件INSERT / SELECT / UPDATE / DELETEUPSERTクエリパターンソート ・集計 ・JOIN設計B-Tree ・GIN ・GiSTインデックストランザクション ・MVCC ・分離レベルスナップショットJSONB非構造化データpgvector埋め込み類似度検索Search Extension トークナイザーcron ・分散シャーディング総合演習39講 ・9時間26分 ・Docker演習
PostgreSQL ・オブジェクトリレーショナルデータベースCREATE TABLE ・制約条件INSERT / SELECT / UPDATE / DELETEUPSERTクエリパターンソート ・集計 ・JOIN設計B-Tree ・GIN ・GiSTインデックストランザクション ・MVCC ・分離レベルスナップショットJSONB非構造化データpgvector埋め込み類似度検索Search Extension トークナイザーcron ・分散シャーディング総合演習39講 ・9時間26分 ・Docker演習
この講座が始まった理由
シリコンバレーの開発者が先に提案しました。
以下は実際の会話の内容です。合流していたシリコンバレー出身の開発者が、自ら取り上げたいテーマとしてPostgreSQLを提案しました。
シリコンバレー出身の開発者あの…合流してからいろいろ見させてもらっているうちに、だいぶ時間も経ちましたので、取り上げてみたいテーマがありまして…大丈夫でしょうか??
Toss開発者兄貴はいつでもオーケーみたいだけどwwww Hong、一緒に働こう
카카오 면접관님오!! 저도 어떤 주제로 다루실지 기대하고 있었는데!! 어떤 주제로 다루실 예정이신가요??
シリコンバレー出身の開発者DB関連の話題で、笑 PostgreSQLについて話してみようかと!!pgvectorを提供しているおかげで、AI時代でも大きな依存なく活用できるので、
Kakao面接官おっ、私もそれ名前だけ聞いたことあって使ったことはないんだけど… 私も一度課金してみようかな 笑
Toss開発者wwwwとりあえず信じて進めばいいよ、あの人マジで開発うまいし、視野もすごく広いし
Hongああ…また私にこんな試練を与えるんですね…私は先輩たちを信じてついていくだけなんでwwww一度まとめて送っていただければ、一緒に検討して進めてみましょう!!
こうして、この講座が生まれました。シリコンバレーで実際にPostgreSQLを使用している開発者が、"これは必ず取り上げるべきだ"と真っ先に提案した内容です。
今直面していること
機能を作っているのではなく、システムを維持・保守しているのです。
最初はシンプルに始めます。MySQL一つで十分ですし、CRUDが正常に動いていれば問題ありません。しかし、サービスが少しでも大きくなると状況は一変します。
- ログを蓄積し始めると、別のストレージを検討することになり、
- 検索機能が追加されるとElasticsearchも導入し、
- リアルタイム処理のためにRedisを追加し、
- AI機能を追加しようと思うと、今度はVector DBも追加しなければなりません。
"私は今、機能を作っているのではなく、システムを保守しているんだな"
AI時代のデータベース
AI時代にPostgreSQLがなぜ脚光を浴びているのでしょうか
これまでのデータベースは、主に構造化データの保存と検索という役割に注力してきました。しかし、今は違います。AIサービスの登場により、もはや単純なテーブルデータだけを扱うわけにはいかなくなりました。
- JSON形式の非構造化データ
- 蓄積され続けるログデータ
- 임베딩 기반의 벡터 데이터
これら3つを同時に扱わなければならない環境はすでに整っています。PostgreSQLはJSONBによって柔軟なスキーマを構成し、インデックスにより大規模データセットでもパフォーマンスを維持しながら、pgvectorのような拡張機能でAIベースの類似性検索まで処理します。追加の依存関係なしに、PostgreSQL一つで。
複数のシステムを別途構築しなくても、単一のPostgreSQLでAI時代に求められるデータ処理要件に対応できます。
インデックスマップ
PostgreSQLのインデックスは、いつ、何を使えばよいのでしょうか
PostgreSQLがさまざまな種類のインデックスを提供する理由は、データの特徴がそれぞれ異なるためです。セクション6「インデックスとパフォーマンス最適化」では、この選択基準について実践演習で解説します。
B-Tree
PostgreSQLの標準インデックスです。等号や不等号による比較、範囲検索、ソートなど、値の順序を問う条件に使用されます。ほとんどのカラムにはこれで十分です。
GIN
単一の値に複数の要素が含まれるカラムに使用します。JSONBのキー・値検索や配列、全文検索のように、"中に何が含まれているか"を問う条件に適しています。
GiST
幾何データや範囲型のように、値が重なるか、含むかを判定する必要がある条件に使用します。位置情報データを扱う際に頻繁に登場します。
実際の講義内容のプレビュー
このような場面を扱います。
説明するより、画面でご覧いただく方がずっと早いです。実際の講義の一部をそのまま切り抜いてきました。
繋ぎ合わせるのではなく、一つを深く使い込む選択
39講、9時間26分。基礎SQLから分散環境まで、順を追って進められます。
今すぐ始める
なぜPostgreSQLか
PostgreSQLにはどのような特徴がありますか。
PostgreSQLはMySQL、Oracleと並んで広く使われているリレーショナルデータベース管理システム(DBMS/RDBMS)です。同じリレーショナルデータベースですが、以下の特徴がPostgreSQLを選ぶ理由になります。
ACID
PostgreSQLはACIDトランザクションをサポートし、データの整合性を保証します。金融・決済のように正確性が求められるシステムにおいても、安定して利用されています。
MVCC
PostgreSQLのMVCC(マルチバージョン同時実行制御)は、読み取りと書き込みが互いにブロックしないようにすることで、高い同時実行性とパフォーマンスを確保します。
インデックス
PostgreSQLはB-Tree、GIN、GiSTなど様々なインデックスをサポートし、複雑なクエリも効率的に処理できます。JSONBのような非構造化カラムにはGINインデックスを適用して、キー・値の検索を高速化できます。
拡張性
PostgreSQLはユーザー定義関数・型・拡張モジュールを通じて、データベース自体を柔軟に拡張できます。
標準SQL
PostgreSQLは標準SQLに忠実でありながら、実務に必要な機能を幅広く提供しています。
JSONB ・ GIS
PostgreSQLは、リレーショナルデータにとどまらず、JSONBのような半構造化データや位置情報(GIS)データまで、単一のデータベースで処理します。
エコシステム
PostgreSQLは、pgvectorやPostGISのような拡張機能を必要に応じて追加して利用する拡張エコシステムを備えています。
公式ドキュメントでは、PostgreSQLを次のように説明しています。
PostgreSQLは、信頼性、機能の堅牢性、そしてパフォーマンスにおいて高い評価を得ている、強力でオープンソースのオブジェクトリレーショナルデータベースシステムです。
PostgreSQLは強力なオープンソースのオブジェクトリレーショナルデータベースシステムであり、高い信頼性、豊富な機能、優れたパフォーマンスで広く知られています。
同じテーブルでも、どのインデックスを張っているかによってクエリの応答は変わり、隔離レベルのたった一行の違いで、他のセッションから見えるデータも変わってきます。機能を知っていることと、今の状況で何を選ぶべきかを判断できることとは全く別の話です。
この講座が特別な理由
なぜこのPostgreSQL講座なのか
シリコンバレーの現役開発者の視点で構成しました。
シリコンバレーでAI関連の開発に携わる13年目のサーバー開発者と共同で制作した講座です。PostgreSQLを実際に使用しながら培った見解と判断基準をそのまま盛り込みました。
講義の大半は実習とクエリで構成されています。
全講義で実際のPostgreSQLクエリが提供され、概念解説は実践演習と結びついています。全39講のほとんどは、実際にクエリを実行しながら進められます。
単なるストレージではなく、システムの中心として扱います。
基本的なSQLで終わることはありません。インデックスとパフォーマンス、トランザクションと同時実行性、分散環境とスケジューリングにまで及び、データベースをサービス設計の中核コンポーネントとして捉えることができるようになります。
AI時代においてPostgreSQLが果たす役割を直接確認します。
pgvectorを使用して、エンベディングベクトルの検索クエリを直接実行してみます。別途ベクトルDBを用意しなくても、PostgreSQL内で類似度検索が動作している様子を目で確認することができます。
こんな方におすすめです
このPostgreSQL講座は、どのような方におすすめでしょうか
- PostgreSQLの基礎からしっかりと固めたい初・中級開発者単純なCRUDを超えて、INSERT・UPDATE・DELETEの様々なパターン、SELECTチューニング、インデックス活用を体系的に学びたい方
- PostgreSQLをどう活用するか知りたいバックエンド開発者DDL・DMLといった基本概念から、実務にすぐ活かせる視点まで、一度に整理したい方
- 面接対策が必要なバックエンドの就活生・ジュニア開発者トランザクション・整合性・インデックス・FKなどの頻出テーマを実務基準で整理したい方
- PostgreSQLをシステムの核となる構造として捉えたいシニア志向の開発者単なるストレージではなく、サービス設計の中心的コンポーネントとして理解し、スキーマリファクタリングや進化するDB構造に関心のある方
- AI時代にデータベースが担う役割に興味のある開発者pgvectorを使って埋め込みベクトル検索クエリを直接実行してみたい方
逆に、JSONBの設計やインデックスの選択、分離レベルの違いについて今すぐ説明できるのであれば、この講座は不要です。
カリキュラム
PostgreSQL講座カリキュラム・全39回・9時間26分
PostgreSQLを初めて学ぶ開発者に向けて、順序立てて構成されています。データベースの基礎から始まり、基本SQL、クエリ設計、インデックスとパフォーマンス、トランザクション、Extension、分散まで順を追って進んでいきます。各セクションが次のセクションの前提となるように構成しています。
セクション1. 講座紹介
第2講・7分
- AI時代に最も注目されるデータベースPostgreSQL!!07:09
- Hongさんと行くKakaoTalkコミュニティ!資料
セクション2. データベースの基礎とPostgreSQLの紹介
第3講・20分
- データベースとリレーショナル概念11:10
- PostgreSQLの特徴およびDocker環境構築09:38
- DB接続設定資料
セクション3. テーブルのリレーションと基本SQL
第6講・1時間27分
- データ型15:00
- テーブル作成と制約16:21
- INSERTとSELECT18:52
- UPDATEとDELETE07:38
- WHERE演算子16:53
- UPSERTクエリパターン12:31
セクション4. ソート・集計・JOIN設計
第6講・1時間26分
- ソートと集計、複数のテーブルを結合するJOINの設計を扱います。1:26:00
セクション5. 高度なSQLクエリパターン
第4講・47分
- 基本文法を超えた高度なクエリパターンを実践で学びます。47:00
セクション6. インデックスおよびパフォーマンス最適化
第5講 · 1時間41分
- B-Tree・GIN・GiSTインデックスとパフォーマンス最適化の観点を扱います。1:41:00
セクション7. トランザクション・同時実行性・スケーラビリティ
第4講・1時間14分
- トランザクションと分離レベル、MVCCに基づく同時実行性とスケーラビリティを扱います。1:14:00
セクション8. Extension機能
第5講・1時間12分
- pgvector・検索拡張など、PostgreSQLエコシステムの拡張機能を取り上げます。1:12:00
セクション9. 分散環境とスケジューリング
第4講・1時間9分
- 分散環境の構築とcronベースのスケジューリングを総合演習で締めくくります。1:09:00
扱う技術・実習環境
何を使って実習しますか
- PostgreSQL
- JSONB
- B-Tree・GIN・GiST
- MVCC・分離レベル
- pgvector
- 検索拡張機能
- cron · 分散シャーディング
- Docker
- macOS (Apple M3)
- DBMS/RDBMS
- データベース
Apple M3 Air環境で進め、軽量化と隔離された環境構築のためにDockerを活用します。ローカルでコンテナを1つ立ち上げるだけで、すぐに実践に移れます。
カリキュラムまで全てご覧いただいたなら
受講期間は無制限です。必要な時にいつでも取り出して見返すことができます。
今すぐ登録して実習を始める
誰が作成しましたか
本講座を共に手がけたシリコンバレーの開発者
シリコンバレー・AIスタートアップサーバー開発者
ワディ
バックエンドサーバー開発者として13年のキャリアを積み、国内の様々な企業で開発に携わってきましたが、最近シリコンバレーに転職し、AI関連の開発を行っています。トスの開発者である友人との縁で参加することになり、持っている知識をできるだけ分かりやすく、親しみやすい形でお伝えしていきたいと思っています。
- [現] シリコンバレーのAIスタートアップ サーバー開発者
- [前] カカオ本社サーバー開発者
- [前] 国内スタートアップ2〜3社 サーバー開発者
- [前] 海外コンピュータサイエンス専攻
よくある質問
PostgreSQL講座よくある質問
PostgreSQLとはどのようなデータベースですか?
PostgreSQLはオープンソースのオブジェクトリレーショナルデータベースです。リレーショナルテーブルを扱いつつ、ACIDトランザクションやMVCCによる同時実行制御、B-Tree・GIN・GiSTインデックス、ユーザー定義関数・型・拡張モジュールを標準で備えており、構造化データとJSONやベクトルといった非構造化データを一つのデータベースで同時に扱うことができます。本講座では、これらの機能を基礎SQL → インデックス → トランザクション → Extensionの順で実践しながら習得していきます。
AI時代にPostgreSQLはなぜ注目されているのでしょうか?
扱うべきデータが、もはや構造化テーブルだけではなくなったからです。JSON形式の非構造化データ、蓄積され続けるログ、埋め込みベースのベクトルデータを同時に処理する必要がありますが、PostgreSQLは、JSONBによる柔軟なスキーマ、インデックスによる大規模データセットのパフォーマンス、pgvector拡張による類似度検索を、すべて一箇所で処理します。複数のシステムを接続しなくて済むというのが最大のポイントです。
pgvectorとは何ですか?
pgvectorは、PostgreSQLにベクトル型と類似度距離演算子を追加する拡張機能(Extension)です。エンベディングをカラムに保存しておけば、通常のSELECT文の並び替え条件だけで最も類似した項目を見つけられるため、別途ベクトルDBを用意しなくてもAI機能を追加できます。セクション8のExtension機能では、このクエリを直接実行してみます。
PostgreSQLのJSONBカラムにもインデックスを張ることができますか?
はい。JSONBカラムにGINインデックスを設定することで、特定のキーや値で検索する際も全体をスキャンすることなくデータを取得できます。つまり、非構造化データを格納していても、リレーショナルテーブルと同様に高速に検索できるということです。セクション6「インデックスおよびパフォーマンス最適化」では、B-Tree・GIN・GiSTインデックスについて取り上げます。
PostgreSQLと、MySQLやOracleといった他のRDBMSにはどのような違いがあるのでしょうか。
3つともリレーショナルDBMS(RDBMS)であるため、テーブル・SQL・トランザクションという骨格は同じです。PostgreSQLが他と差別化されるポイントは、インデックスと拡張機構です。PostgreSQLはB-Treeに加えてGIN・GiSTインデックスを標準で提供しており、JSONBや配列のような非構造化カラムにもインデックスを張ることができます。また、pgvectorのような拡張機能をインストールすることで、ベクトル検索をデータベース内で直接追加することも可能です。そのため、サービスが拡大する際に、ログストレージ・検索エンジン・ベクトルDBを一つずつ別途追加していく構成を減らすことができます。本講座では、その選択基準と限界について、セクション6・8で併せて取り上げます。
PostgreSQL(ポスグレSQL)は初心者でも問題なく進められますか?
はい。初心者向けの講座で、データベースとリレーショナルの概念から始まり、データ型・制約条件・基本SQLの順にステップアップしていきます。基本的なSQLの使用経験があれば十分で、後半のインデックス・トランザクション・分散環境については実務経験者にとっても新しい内容となっています。
PostgreSQLのトランザクション分離レベルはどのように扱われますか?
PostgreSQLはRead Committed・Repeatable Read・Serializableの分離レベルをサポートしており、デフォルトはRead Committedです。セクション7「トランザクション・同時実行性・拡張性」では、セッションを分けて分離レベルを変更しながら、同一時点で各セッションが参照するスナップショットがどのように異なるかを直接確認します。
実習環境はどのように構築するのでしょうか?
Apple M3 Air環境にて実施し、軽量化とクローズドな環境構築のため、Dockerを使用します。セクション2ではPostgreSQLの特徴に加え、Docker環境の構築やDB接続設定についても扱うため、そのまま進めていただければ問題ありません。
どのようなExtensionを扱いますか?
セクション8 Extension機能(第5講 1時間12分)では、pgvectorを活用した埋め込みベクトル検索と、Search Extensionを活用したトークナイザーについて取り上げます。続くセクション9では、cronと分散シャーディングを組み合わせた総合演習で締めくくります。
すでに実務でPostgreSQLを使っているのですが、それでも受講する理由はありますか?
PostgreSQLはRead Committed・Repeatable Read・Serializableの分離レベルをサポートしており、デフォルトはRead Committedです。分離レベルによって、他のセッションがコミットした変更が自分のトランザクションから見えるタイミングが異なります。クエリを書くことと、この違いを説明することは別問題です。セクション7では、セッションを分けて分離レベルごとのスナップショットが実際にどのように変わるのかを実習で確認し、セクション6ではインデックス選択の基準を、セクション9では分散環境でクエリが実行される仕組みを扱います。
公式ドキュメントで独学しても問題ないのでしょうか?
公式ドキュメントは各機能が何であるかを正確に説明しています。ただし、今のこのテーブルにどのインデックスを張るべきか、隔離レベルを変えると自分のサービスで何が変わるのかといった判断は、ドキュメントが代わりに下してくれるわけではありません。この講座では、実際にクエリを直接実行して検証することに時間を割いています。
難易度は入門向けですが、扱う範囲はどこまでなのでしょうか?
序盤はデータベースとリレーショナルモデルの概念から始まり、終盤ではインデックスとパフォーマンス最適化(セクション6)、トランザクションと同時実行制御(セクション7)、Extension(セクション8)、分散環境とスケジューリング(セクション9)まで学びます。全39講義、合計9時間26分の全編がこの流れで構成されており、受講期限は無制限ですので、必要なセクションだけを繰り返し復習することも可能です。
PostgreSQL講座のカリキュラムはどのような順序で構成されていますか?
データベースとリレーショナル概念、Docker環境の構築から始まり、データ型と制約、基本SQL、ソート・集計・JOIN設計、高度なクエリパターン、インデックスとパフォーマンス最適化、トランザクション・同時実行性・スケーラビリティ、Extension、分散環境とスケジューリングの順で進みます。全39講義、合計9時間26分で、受講期間は無制限です。
なぜそのようにインデックスを選ぶのか、分離レベルを変更すると何が変わるのか
基本SQLから始まり、インデックスやパフォーマンス、トランザクション、pgvectorベクター検索まで、全39講義を実践形式で確認します。
講座を始める
一緒に成長しましょう
開発者オープンチャットルーム
キャリアや現場の状況、技術などを共有する開発者向けオープンチャットルームを運営しています。講義を受講しながら気になる点や実務でのお悩みなど、お気軽に共有してみてください。
オープンチャットに参加する →