開発・プログラミング・データベース
基本SQLからインデックスチューニング・トランザクション・pgvectorまで
1つのPostgreSQLで扱う講義
この講義は、基本SQLからインデックスチューニング、トランザクション、JSONB、pgvectorまでを実習で学ぶ、初心者向けのPostgreSQL講座です。ログが蓄積されればストレージを追加し、検索機能が必要になれば別のエンジンを追加し、AI機能にはさらにベクトルDBを追加するという流れを、1つのデータベース内で完結させます。
- 難易度:入門
- 実習中心
- Docker環境
- 受講期限なし
- 基礎 → 分散リレーショナルの概念から分散環境まで一つの流れ
- 基礎から分散まで基本SQLから始め、シャーディング・スケジューリングで終わります
- 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・分散シャーディング総合実習Docker実習
PostgreSQL・オブジェクトリレーショナルデータベースCREATE TABLE・制約INSERT / SELECT / UPDATE / DELETEUPSERTクエリパターンソート・集計・JOIN設計B-Tree・GIN・GiSTインデックストランザクション・MVCC・分離レベルのスナップショットJSONB非構造化データpgvector埋め込み類似度検索Search Extension トークナイザーcron・分散シャーディング総合実習Docker実習
この講義が始まった理由
シリコンバレーの開発者が先に提案しました
以下は実際の会話内容です。参加していたシリコンバレー出身の開発者が、直接取り上げたいテーマとしてPostgreSQLを持ち出しました。
シリコンバレー出身の開発者あの…私が参加していろいろ見学させていただいてから少し時間が経ちましたが、取り上げてみたいテーマがありまして…大丈夫でしょうか??
Tossの開発者僕はいつでもオッケーだと思うけどㅋㅋㅋㅋ Hong、仕事しよう
Kakaoの面接官おお!!私もどんなテーマを扱われるのか楽しみにしていたところです!!どのようなテーマを扱う予定ですか??
シリコンバレー出身の開発者僕はDB関連で、ㅎㅎ PostgreSQLを扱ってみようと思ってます!!pgvectorを提供しているので、AI時代にも大きな依存性なく活用できるからです
Kakaoの面接官お、それは名前だけ聞いたことがあって、使ったことはないんですが……私も一度課金してみますね(笑)
Tossの開発者ㅋㅋㅋㅋ とりあえず信じて進めばいいんだよ。あの兄さん、本当に開発が上手くて、視野もすごく広いし
Hongさん…また私にこんな試練をお与えになるんですね…私は兄貴たちを信じてついていくしかないのでwwww 一度まとめて送っていただければ、一緒に確認して進めてみましょう!!
こうしてこの講義が作られました。シリコンバレーで実際にPostgreSQLを使っている開発者が、「これは必ず扱うべきだ」と最初に言った内容です。
今、直面していること
機能を作っているのではなく、システムを保守しています
最初はシンプルに始めます。MySQL一つで十分で、CRUDさえうまく動けば問題ありません。ところが、サービスが少し成長すると状況が変わります。
- ログを蓄積し始めると、別のストレージを検討するようになり、
- 検索機能が追加されるとElasticsearchを導入し、
- リアルタイム処理のためにRedisを追加し、
- AI機能を追加しようとすると、またVector DBを追加する必要があります。
"私は今、機能を作っているのではなく、システムを保守しているのだな"
AI時代のデータベース
AI時代にPostgreSQLがなぜ注目されているのでしょうか
これまでのデータベースは、主に構造化データを保存・検索する役割に重点を置いていました。今は違います。AIサービスが登場し、単純なテーブルデータだけを扱うわけではなくなりました。
- JSON形式の非構造化データ
- 蓄積され続けるログデータ
- 埋め込みベースのベクトルデータ
この3つを一緒に扱う必要がある環境は、すでに整っています。PostgreSQLはJSONBで柔軟なスキーマを構成し、インデックスによって大規模なデータセットでもパフォーマンスを維持し、pgvectorのような拡張機能でAIベースの類似度検索まで処理できます。追加の依存関係なしに、PostgreSQLひとつで。
複数のシステムを別々に用意しなくても、1つのPostgreSQLでAI時代に必要なデータ処理の要件に対応できます。
インデックスマップ
PostgreSQLのインデックスは、いつ何を使うのでしょうか
PostgreSQLが複数種類のインデックスを提供する理由は、データの形がそれぞれ異なるためです。インデックスとパフォーマンス最適化を扱いながら、この選択基準を実習で確認します。
B-Tree
PostgreSQL의 기본 인덱스입니다. 등호와 부등호 비교, 범위 조회, 정렬처럼 값의 순서를 따지는 조건에 씁니다. 대부분의 컬럼에는 이것으로 충분합니다.
GIN
하나의 값 안에 여러 요소가 들어 있는 컬럼에 씁니다. JSONB의 키·값 검색이나 배열, 전문 검색처럼 "안에 무엇이 들어 있는가"를 묻는 조건에 맞습니다.
GiST
기하 데이터나 범위 타입처럼 값이 겹치는지, 포함하는지를 따져야 하는 조건에 씁니다. 위치 기반 데이터를 다룰 때 자주 등장합니다.
実際の講義内容をちょっとご紹介
このような場面を扱います
説明よりも画面のほうが早いです。実際の講義の一部をそのまま切り取ってきました。
いくつも付け加えるのではなく、一つを深く書くという選択
基本的なSQLから始めて、分散環境まで順を追って進みます。
지금 시작하기
PostgreSQLを選ぶ理由
PostgreSQLにはどのような特徴がありますか
PostgreSQLはMySQL、Oracleとともに広く使われているリレーショナルデータベース管理システム(DBMS/RDBMS)です。同じリレーショナル database ですが、以下の特徴が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クエリが提供され、概念の説明が実習と結び付いています。ほとんどの講義は、実際にクエリを実行しながら進めていきます。
単なるストレージではなく、システムの中心として扱います
基本的なSQLで終わりません。インデックスとパフォーマンス、トランザクションと同時実行性、分散環境とスケジューリングまで掘り下げ、データベースをサービス設計の中心コンポーネントとして捉えられるようになります。
AI時代にPostgreSQLが果たす役割を直接確認します
pgvectorで埋め込みベクトル検索クエリを実際に実行してみます。別途ベクトルDBを用意しなくても、PostgreSQL内で類似度検索が動作する様子を目で確認できます。
このような方におすすめです
このPostgreSQL講座はどのような方を対象としていますか?
- PostgreSQLの基礎からしっかり身につけたい初級・中級開発者単純なCRUDを超えて、INSERT・UPDATE・DELETEのさまざまなパターン、SELECTのチューニング、インデックスの活用方法を体系的に学びたい方
- PostgreSQLをどのように活用するのか知りたいバックエンド開発者DDL・DMLなどの基本概念から実務ですぐに応用できる視点まで一度に整理したい方
- 面接対策が必要なバックエンド志望者・ジュニア開発者トランザクション・整合性・インデックス・FKなど、よく出題されるテーマを実務基準で整理したい方
- PostgreSQLをシステムの中核構造として捉えたいシニア志向の開発者単なるストレージではなく、サービス設計の中心コンポーネントとして理解し、スキーマのリファクタリングや進化するDB構造に関心がある方
- AI時代にデータベースが果たす役割に関心がある開発者pgvectorで埋め込みベクトル検索クエリを実際に実行してみたい方
逆に、JSONBの設計やインデックスの選択、分離レベルの違いを今すぐ説明できるのであれば、この講義は必要ありません。
カリキュラム
PostgreSQL講座のカリキュラム
PostgreSQLを初めて学ぶ開発者向けの順序で構成されています。データベースの基礎から始めて、基本SQL、クエリ設計、インデックスとパフォーマンス、トランザクション、Extension、分散へと順番に進みます。前の内容が後の内容の前提となるように構成しています。
セクション1. 講義紹介
- AI時代に最も注目を集めているデータベース、PostgreSQL!!
- Hongと一緒に参加するKakaoTalkコミュニティ!
セクション2. データベースの基礎とPostgreSQLの紹介
- データベースとリレーショナル概念
- PostgreSQLの特徴およびDocker環境の構築
- DB接続設定
セクション 3. テーブルのリレーションと基本 SQL
- データ型
- テーブルの作成と制約
- INSERTとSELECT
- UPDATEとDELETE
- WHERE演算子
- UPSERTクエリパターン
セクション 4. 並べ替え・集計・JOIN設計
- 並べ替えと集計、複数のテーブルを結合するJOIN設計を扱います。
セクション 5. 高度なSQLクエリパターン
- 基本構文を超えた高度なクエリパターンを、実習を通して身につけます。
セクション 6. インデックスおよびパフォーマンス最適化
- B-Tree·GIN·GiSTインデックスとパフォーマンス最適化の観点を扱います。
セクション 7. トランザクション・同時実行性・拡張性
- トランザクションと分離レベル、MVCCに基づく同時実行性と拡張性を扱います。
セクション 8. Extension機能
- pgvector・検索拡張などPostgreSQLエコシステムの拡張機能を扱います。
セクション 9. Distributed環境とScheduling
- 分散環境の構成とcronベースのスケジューリングを総合演習で締めくくります。
扱う技術 · 実習環境
何で実習しますか
- PostgreSQL
- JSONB
- B-Tree・GIN・GiST
- MVCC · 分離レベル
- pgvector
- 検索拡張機能
- cron · 分散シャーディング
- Docker
- macOS(Apple M3)
- DBMS/RDBMS
- データベース
Apple M3 Air環境で進め、軽量化と閉鎖的な環境構成のためにDockerを活用します。ローカルでコンテナを1つ起動すれば、すぐに実践できます。
誰が作りましたか?
この講義をともに準備したシリコンバレーの開発者
シリコンバレー · AIスタートアップのサーバー開発者
ワディ
13年目のバックエンドサーバー開発者として、韓国国内の複数の企業で開発に携わった後、最近シリコンバレーに転職し、AI関連の開発を行っています。Tossの開発者である友人との縁をきっかけに参加し、知っている知識をできるだけわかりやすく、気軽にお伝えしたいと思っています。
- [現] シリコンバレーAIスタートアップのサーバー開発者
- [前] カカオ本社サーバー開発者
- [前] 韓国国内のスタートアップ2~3社のサーバー開発者
- [前] 海外でコンピュータサイエンス専攻
よくある質問
PostgreSQL講義 よくある質問
PostgreSQLはどのようなデータベースですか?
PostgreSQLはオープンソースのオブジェクトリレーショナルデータベースです。リレーショナルテーブルを扱いながら、ACIDトランザクションとMVCCによる同時実行制御、B-Tree・GIN・GiSTインデックス、ユーザー定義関数・型・拡張モジュールを標準で備えているため、構造化データとJSON・ベクトルなどの非構造化データを1つのデータベースでまとめて扱えます。この講義では、これらの機能を基礎SQL → インデックス → トランザクション → Extensionの順に実習しながら身につけます。
AI時代にPostgreSQLがなぜ注目されているのでしょうか?
扱うべきデータが、構造化されたテーブルだけではなくなったからです。JSON形式の非構造化データ、増え続けるログ、埋め込みベースのベクトルデータを一緒に処理する必要がありますが、PostgreSQLはJSONBによる柔軟なスキーマ、インデックスによる大規模データセットの性能、pgvector拡張による類似度検索を、1か所で処理できます。複数のシステムを連携させなくてもよいという点が核心です。
pgvectorとは何ですか?
pgvectorは、PostgreSQLにベクトル型と類似度距離演算子を追加する拡張機能(Extension)です。埋め込みをカラムに保存しておけば、通常のSELECT文で並べ替え条件を指定するだけで最も類似した項目を見つけられるため、別途ベクトルDBを用意せずにAI機能を追加できます。Extensionの機能を扱いながら、このクエリを実際に実行してみます。
PostgreSQLのJSONBカラムにもインデックスを作成できますか?
はい。JSONBカラムにはGINインデックスを作成でき、特定のキーや値で検索する際にも全体を走査せずに検索できます。非構造化データを格納しておいても、リレーショナルテーブルのように高速に検索できるという意味です。インデックスとパフォーマンス最適化を扱う中で、B-Tree・GIN・GiSTインデックスについて取り上げます。
PostgreSQLとMySQL・Oracleのような他のRDBMSは何が違いますか?
3つともリレーショナルDBMS(RDBMS)なので、テーブル・SQL・トランザクションという基本構造は共通しています。PostgreSQLとの違いが表れるのは、インデックスと拡張構造です。PostgreSQLはB-Tree以外にもGIN・GiSTインデックスを標準で提供しており、JSONBや配列のような非定型カラムにもインデックスを設定できます。また、pgvectorのような拡張機能をインストールすれば、ベクトル検索をデータベース内に直接追加できます。そのため、サービスが大きくなったときに、ログストレージ・検索エンジン・ベクトルDBを一つずつ追加していく流れを減らせます。この講座では、そうした選択基準と限界を併せて扱います。
PostgreSQL(ポストグレSQL)初心者でもついていけますか?
はい。入門レベルの講座で、データベースとリレーショナルの概念から始め、データ型・制約・基本的なSQLの順に進みます。基本的なSQLの使用経験があれば十分で、後半のインデックス・トランザクション・分散環境は、実務経験者にとっても新しい内容です。
PostgreSQLのトランザクション分離レベルはどのように扱いますか?
PostgreSQLはRead Committed・Repeatable Read・Serializableの分離レベルをサポートしており、デフォルト値はRead Committedです。トランザクション・同時実行性・拡張性を扱いながら、セッションを分けて分離レベルを変更し、同じ時点で各セッションが見るスナップショットがどのように異なるのかを実際に確認します。
実習環境はどのように構成しますか?
Apple M3 Air環境で進め、軽量化と閉鎖的な環境構成のためにDockerを使用します。PostgreSQLの特徴と併せてDocker環境の構成、DB接続設定を扱うため、そのまま進めていけば大丈夫です。
どのExtensionを扱いますか?
Extension機能を扱いながら、pgvectorを活用した埋め込みベクトル検索と、Search Extensionを活用したトークナイザーについて説明します。その後、cronと分散シャーディングを組み合わせた総合実習で締めくくります。
すでに実務でPostgreSQLを使っているのに、受講する理由はありますか?
PostgreSQLはRead Committed・Repeatable Read・Serializableの分離レベルをサポートしており、デフォルトはRead Committedです。分離レベルによって、別のセッションがコミットした変更が自分のトランザクションから見えるタイミングが異なります。クエリを書くことと、この違いを説明することは別の話です。セッションを分け、分離レベルごとにスナップショットが実際にどのように異なるのかを実習で確認し、インデックスの選択基準と、分散環境でクエリが実行される仕組みを扱います。
公式ドキュメントで一人で勉強してもいいのではないですか?
公式ドキュメントは、各機能が何であるかを正確に説明しています。ただし、今このテーブルにどのインデックスを設定すべきか、分離レベルを変更すると自分のサービスで何が変わるのかについては、ドキュメントが代わりに判断してくれるわけではありません。この講義では、その判断をクエリを実際に実行して確認することに時間をかけます。
難易度は入門とのことですが、扱う範囲はどこまでですか?
始まりはデータベースとリレーショナルの概念ですが、最後はインデックスとパフォーマンス最適化、トランザクション・同時実行、Extension、分散環境とスケジューリングまで扱います。全体がこの流れでつながっており、受講期限は無制限なので、必要な箇所だけをもう一度見返すこともできます。
PostgreSQL講義のカリキュラムはどのような順序ですか?
データベースとリレーショナルの概念、Docker環境の構築から始まり、データ型と制約、基本SQL、並べ替え・集計・JOINの設計、高度なクエリパターン、インデックスとパフォーマンス最適化、トランザクション・同時実行性・スケーラビリティ、Extension、分散環境とスケジューリングの順に進みます。受講期限は無期限です。
インデックスをなぜそのように選ぶのか、分離レベルを変更すると何が変わるのか
基本的なSQLから始め、インデックスとパフォーマンス、トランザクション、pgvectorによるベクトル検索まで、すべて実習を通して確認します。
강의 시작하기
一緒に成長しましょう
開発者向けオープンチャットルーム
キャリアや現場の状況、技術について共有する開発者向けオープンチャットを運営しています。講義を受講しながら疑問に思ったことや実務上の悩みを気軽に共有してみてください。
オープンチャットに参加するInstagramを見る