SQL

MongoDB

【MongoDB】MongoDBのインストールとmongoshの基本操作

こんにちは、かつコーチです。前回の記事で、MongoDBが「ドキュメント指向のNoSQLデータベース」であることを解説しました。今回は実際に手を動かして、自分のパソコンにMongoDBをインストールし、コマンドラインツールmongosh(M...
MongoDB

【MongoDB】MongoDBとは?ドキュメント指向NoSQLを初心者向けに解説

こんにちは、かつコーチです。ここまでSQL基礎編・MySQL・PostgreSQLと、RDBMS(リレーショナルデータベース管理システム)を中心に学んできました。テーブルと行、外部キーによる正規化など、SQLの世界観にはもう慣れてきた頃だと...
SQL

【SQLite】SQLiteはどんなアプリに向いているか?MySQL・PostgreSQLとの比較検証

こんにちは、かつコーチです。SQLite編もいよいよ最終回です。これまでファイルベースの仕組み、型アフィニティ、トランザクション、インデックス、WALモード、バックアップと、SQLite固有の特徴を一通り解説してきました。最終回となる今回は...
SQL

【SQLite】SQLiteのバックアップとVACUUMコマンド

こんにちは、かつコーチです。WALモードまで解説してきて、SQLiteの内部の仕組みはかなり理解が深まったのではないでしょうか。今回は、実際に運用していく上で欠かせないバックアップとVACUUMコマンドを扱います。「ファイルをコピーするだけ...
SQL

【SQLite】WALモードとは?読み書きを両立させる仕組み

こんにちは、かつコーチです。前回はインデックスによる読み取り最適化を扱いました。今回は、SQLiteの同時アクセス問題を大きく緩和するWALモード(Write-Ahead Logging)を、ジャーナリングの仕組みを前提知識として扱っていき...
SQL

【SQLite】インデックスとEXPLAIN QUERY PLANの読み方

こんにちは、かつコーチです。ここからは上級者向けの内容として、インデックスとBスツリー、EXPLAIN QUERY PLANの読み方といった前提知識を踏まえて解説していきます。トランザクションとロックの挙動を理解したところで、今回はクエリを...
SQL

【SQLite】トランザクションと同時アクセスで気をつけたいこと

こんにちは、かつコーチです。前回はSQLite独自のデータ型・型アフィニティを解説しました。今回は、SQLiteを実運用する上で最も誤解が多い同時アクセスの挙動について解説します。「SQLiteは同時に書き込むと落ちる」という話を聞いたこと...
SQL

【SQLite】SQLiteのデータ型と型アフィニティという独自の仕組み

こんにちは、かつコーチです。ファイルベースの仕組みを理解したところで、今回はSQLiteを使う上で必ずつまずくデータ型の話をします。MySQLやPostgreSQLに慣れていると、SQLiteのデータ型の扱いには驚くはずです。「なぜINTE...
SQL

【SQLite】SQLiteのファイルベースDBの仕組みと使い方

こんにちは、かつコーチです。前回はSQLiteが「サーバーを持たない組み込み型DB」であることを紹介しました。今回は、その核心であるファイルベースという仕組みをもう一歩掘り下げます。「1つのファイルにDBが入っている」とはどういうことなのか...
GraphQL

【GraphQL】GraphQLとは?

こんにちは、かつコーチです。今回は、昨今流行っているGraphQLについて解説します。これまでのSQLと何が違うのかも含めて解説します。GraphQLは、Facebookが開発したAPIクエリ言語です。REST APIの代替として広く採用さ...
SQL

【SQLite】SQLiteとは?組み込み・エッジ向けの軽量DBを初心者向けに解説

こんにちは、かつコーチです。SQL基礎編ではMySQLやPostgreSQLを想定して標準SQLを学んできました。今回からは新シリーズとして、SQLiteという少し毛色の違うデータベースを扱っていきます。「SQLiteって聞いたことはあるけ...
PostgreSQL

【PostgreSQL】PostgreSQLとMongoDB、JSONBはどこまでMongoDBの代わりになるか比較検証

こんにちは、かつコーチです。これでPostgreSQL編は20本目、最終回です。「MongoDBを検討していたけど、PostgreSQLのJSONBがあれば十分では」。こういう相談を、案件のDB選定でよく受けます。JSONB型(バイナリ形式...
PostgreSQL

【PostgreSQL】よくあるPostgreSQLエラーまとめと対処法

こんにちは、かつコーチです。PostgreSQLを触り始めると、赤い文字のERROR:メッセージに何度も出くわします。最初は焦りますが、実は出てくるエラーの種類はある程度パターン化されています。この記事では、初中級者がつまずきやすいPost...
PostgreSQL

【PostgreSQL】Row-Level Securityでマルチテナントのデータを守る実践ガイド

こんにちは、かつコーチです。マルチテナント(1つのデータベースで複数の顧客・組織のデータを扱う構成)のSaaSを設計していると、必ず突き当たるのが「テナントAのデータがテナントBに見えてしまわないか」という不安です。アプリケーションコードで...
PostgreSQL

【PostgreSQL】ロールベースの権限管理をCREATE ROLEでゼロから設計する

こんにちは、かつコーチです。「アプリからは全部postgresユーザーで接続している」というプロジェクト、実は少なくありません。これは動作こそしますが、セキュリティの観点では避けたい設計です。PostgreSQLにはロール(ユーザーとグルー...
PostgreSQL

【PostgreSQL】pg_dumpでバックアップ・リストアする方法をコマンド付きで解説

こんにちは、かつコーチです。「本番データベースのバックアップ、実はコマンド1つも覚えていない」という方は意外と多いのではないでしょうか。バックアップ(データベースの内容を別の場所に複製しておくこと)は、障害やオペレーションミスからデータを守...
PostgreSQL

【PostgreSQL】VACUUMとオートバキュームの仕組みを理解して肥大化を防ぐ

こんにちは、かつコーチです。「テーブルのデータ量は変わっていないのに、ディスク使用量だけがどんどん増えていく」。PostgreSQLを本番運用していると、こういう現象に出くわすことがあります。原因の多くは、VACUUM(不要になった行を回収...
PostgreSQL

【PostgreSQL】EXPLAIN ANALYZEで実行計画を読む

こんにちは、かつコーチです。前回はインデックスの種類を解説しましたが、「インデックスを貼った」だけでは安心できません。実際にそのインデックスが使われているかは、実行計画(PostgreSQLがクエリをどう処理するか事前に立てる計画)を見て確...
PostgreSQL

【PostgreSQL】PostgreSQLのインデックスの種類(B-tree・GiST・GIN・BRIN)

こんにちは、かつコーチです。「インデックスを貼ったのにクエリが速くならない」という相談は、よく聞くと索引の種類がデータの性質に合っていないケースが少なくありません。PostgreSQLはCREATE INDEX ... USINGで複数のイ...
PostgreSQL

【PostgreSQL】シーケンスとSERIAL・IDENTITY列の違い

こんにちは、かつコーチです。PostgreSQLで主キーを自動採番する方法を調べると、SERIALとGENERATED ... AS IDENTITYという2つの書き方が出てきて、どちらを使えばいいか迷った方も多いのではないでしょうか。結論...