2023-01

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つの書き方が出てきて、どちらを使えばいいか迷った方も多いのではないでしょうか。結論...
PostgreSQL

【PostgreSQL】スキーマを使ってテーブルを整理する

こんにちは、かつコーチです。1つのデータベースにテーブルが50個、100個と増えてくると、users、logs、settingsのような似た名前のテーブルがどのアプリ由来か分からなくなってきます。そんなときに使うのがスキーマです。今回は、P...
React

【Next.js】Next.js 13 から next/link の Linkコンポーネント が 常に aタグをレンダリングするようになった。

こんにちは、かつコーチです。Next.js12までは、<a>タグを常にネストしなければいけませんでした。import Link from 'next/link'// Next.js 12までは<a>タグを常にネストしないといけませんでした。...