ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
PostgreSQL とは
PostgreSQL (通称 Postgres) は、商用 RDBMS に匹敵する機能を持つオープンソースの ORDBMS (Object-Relational DBMS)。BSD/MIT 系の PostgreSQL ライセンスで、商用利用も完全フリー。MySQL と並ぶ二大 OSS RDBMS で、近年は MySQL を抜く勢いで採用が増えています。
特長
| 項目 | 内容 |
|---|---|
| SQL 準拠度 | SQL:2016 の大部分に対応 (MySQL より厳格) |
| ACID | 完全準拠 (デフォルト動作で安全) |
| MVCC | マルチバージョン同時実行制御 (読み込みはロックフリー) |
| JSON / JSONB | ネイティブ型、インデックス可能 (GIN) |
| 拡張型 | UUID、配列、範囲型、HStore、ENUM 等が標準 |
| CTE | WITH 句、再帰 CTE 対応 |
| ウィンドウ関数 | ROW_NUMBER / LAG / LEAD / NTILE 全対応 |
| パーティション | 宣言的パーティション (RANGE / LIST / HASH) |
| FTS | 全文検索 (tsvector / tsquery)、多言語対応 |
| 地理空間 | PostGIS 拡張で GIS の業界標準 |
| レプリケーション | 物理 / 論理 / 同期 / 非同期 |
| 拡張機能 | CREATE EXTENSION で多数の拡張 (uuid-ossp, pg_stat_statements, citus, TimescaleDB) |
インストール
Ubuntu / Debian
sudo apt update
sudo apt install -y postgresql postgresql-contrib
# サービス起動
sudo systemctl enable --now postgresql
# postgres ユーザに切替えて接続
sudo -u postgres psql
macOS
brew install postgresql@16
brew services start postgresql@16
createuser -s myuser
createdb mydb
psql mydb
Docker
docker run -d \
--name pg \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
postgres:17
# 接続
docker exec -it pg psql -U postgres mydb
psql の基本コマンド
\l -- DB 一覧
\c mydb -- DB 切替
\dt -- テーブル一覧
\d users -- テーブル定義
\du -- ユーザ一覧
\df -- 関数一覧
\dn -- スキーマ一覧
\x -- 縦表示モード切替
\q -- 終了
\timing on -- クエリ実行時間表示
\e -- 外部エディタで SQL 編集
\i file.sql -- ファイル実行
\copy users TO 'users.csv' CSV HEADER -- CSV エクスポート
主要なデータ型
| 型 | 用途 |
|---|---|
SERIAL / BIGSERIAL | 自動採番 (PG10+ は GENERATED ALWAYS AS IDENTITY 推奨) |
UUID | UUID 型 (uuid-ossp 拡張で生成関数) |
TEXT / VARCHAR | 文字列 (TEXT は無制限長で性能差なし) |
NUMERIC(p,s) | 正確な十進数 (金額系) |
TIMESTAMP WITH TIME ZONE | タイムゾーン付き日時 (推奨) |
JSONB | バイナリ JSON、検索/インデックス可 |
INTEGER[] | 配列型 |
INT4RANGE / TSRANGE | 範囲型 (期間など) |
INET / CIDR | IP アドレス |
POINT / POLYGON | 幾何 (PostGIS なしでも) |
JSONB の例
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
data JSONB NOT NULL
);
INSERT INTO products(data) VALUES
('{"name":"Laptop","price":1500,"tags":["pc","work"]}'),
('{"name":"Phone","price":800,"tags":["mobile"]}');
-- 抽出 (-> は jsonb / ->> はテキスト)
SELECT data->>'name' AS name, (data->>'price')::int AS price FROM products;
-- 含有検索
SELECT * FROM products WHERE data @> '{"tags":["mobile"]}';
-- GIN インデックス
CREATE INDEX idx_products_data ON products USING GIN (data jsonb_path_ops);
-- 更新
UPDATE products SET data = jsonb_set(data, '{price}', '1600') WHERE id = 1;
CTE とウィンドウ関数
-- 再帰 CTE: 組織階層
WITH RECURSIVE tree AS (
SELECT id, name, parent_id, 1 AS depth FROM org WHERE parent_id IS NULL
UNION ALL
SELECT o.id, o.name, o.parent_id, t.depth + 1
FROM org o JOIN tree t ON o.parent_id = t.id
)
SELECT * FROM tree ORDER BY depth, name;
-- ウィンドウ関数: 部署内売上ランキング
SELECT
dept,
name,
sales,
RANK() OVER (PARTITION BY dept ORDER BY sales DESC) AS rank
FROM employees;
全文検索 (FTS)
-- 検索カラム作成
ALTER TABLE articles ADD COLUMN tsv TSVECTOR;
UPDATE articles
SET tsv = to_tsvector('simple', title || ' ' || body);
CREATE INDEX idx_articles_tsv ON articles USING GIN(tsv);
-- 検索
SELECT id, title
FROM articles
WHERE tsv @@ to_tsquery('simple', 'PostgreSQL & JSONB')
ORDER BY ts_rank(tsv, to_tsquery('simple', 'PostgreSQL & JSONB')) DESC;
-- 日本語は pg_bigm / pg_trgm / textsearch_ja などの追加が必要
バックアップ / リストア
# 論理バックアップ (SQL)
pg_dump -U postgres mydb > mydb.sql
pg_dump -U postgres -F c mydb > mydb.dump # カスタム形式 (推奨)
# リストア
psql -U postgres mydb < mydb.sql
pg_restore -U postgres -d mydb mydb.dump
# クラスタ全体
pg_dumpall -U postgres > all.sql
# 物理バックアップ (PITR)
pg_basebackup -D /backup -F t -X stream -P
PostGIS (地理空間)
-- PostGIS 拡張
CREATE EXTENSION postgis;
CREATE TABLE shops (
id SERIAL PRIMARY KEY,
name TEXT,
geom GEOMETRY(POINT, 4326) -- WGS84
);
INSERT INTO shops(name, geom) VALUES
('Tokyo', ST_SetSRID(ST_MakePoint(139.7671, 35.6812), 4326));
-- 半径 1km 以内
SELECT name FROM shops
WHERE ST_DWithin(
geom::geography,
ST_SetSRID(ST_MakePoint(139.7, 35.68), 4326)::geography,
1000 -- meters
);
マネージドサービス
| サービス | 特徴 |
|---|---|
| AWS RDS for PostgreSQL | 定番。自動バックアップ、レプリカ |
| AWS Aurora PostgreSQL | 互換版、ストレージ自動スケール |
| GCP Cloud SQL | シンプル運用 |
| Azure Database for PostgreSQL | Hyperscale (Citus) も提供 |
| Supabase | BaaS。Auth / REST / Realtime も込みで OSS |
| Neon | サーバレス Postgres、ブランチング機能 |
| Render / Railway | 個人開発向け軽量 |
| Heroku Postgres | 古参 PaaS |
MySQL との比較
| 項目 | PostgreSQL | MySQL |
|---|---|---|
| SQL 標準準拠 | ◎ | ○ |
| JSON | JSONB (高速・インデックス可) | JSON 型 (PostgreSQL より弱い) |
| CTE / ウィンドウ関数 | 古くから対応 | MySQL 8 で対応 |
| レプリケーション | 論理 / 物理 / 同期可 | 非同期が主、GTID |
| ライセンス | PostgreSQL License (BSD-like) | GPL / 商用 |
| 採用 | 金融 / 地理空間 / SaaS | Web 一般 / WordPress |
最新バージョン (2026 時点)
- PostgreSQL 17 (2024 年リリース) — VACUUM 効率化、論理レプリ強化
- PostgreSQL 16 (2023 年) — 並列ハッシュ結合、SQL/JSON 強化
- サポート期間はリリースから 5 年 (例: 16 は 2028 年まで)
FAQ
Q: PostgreSQL と MySQL、新規に選ぶならどっち?
A: 2020 年代以降は特に理由がなければ PostgreSQLを推奨。SQL の表現力、JSON、地理空間、CTE などで MySQL を上回り、運用ノウハウも揃ってきました。
Q: VACUUM とは?
A: MVCC で発生する不要行 (dead tuple) を回収する作業。Autovacuum が自動実行しますが、大量更新テーブルでは手動 VACUUM ANALYZE を検討。
Q: スーパーユーザのパスワードを忘れた
A: pg_hba.conf を一時的に trust に変更 → 再起動 → ALTER USER postgres PASSWORD 'new' → 戻して再起動。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
同階層のページ
- Oracle
- MySQL & MariaDB
- DB2
- SQLite
- PostgreSQL
- RDBMS共通
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- UE5のEvent Tickノードの使い方|毎フレーム処理とDelta Seconds 2026-06-13 13:26:37
- UE5のレベルブループリントでキャラクターをスポーンさせる方法 2026-06-13 13:26:37
- Reactのよくあるエラーと対処まとめ|環境構築・npm関連 2026-06-13 13:26:36
- UE5のビューポートの使い方|視点操作・ビューモード・投影の基本 2026-06-13 13:26:36
- UE5でAI Move ToがBlockedで失敗する原因と対処方法|NavMesh確認 2026-06-13 13:26:36
- UE5のWorld Compositionとは|サブレベルによる大規模ワールドと非推奨化 2026-06-13 13:26:35
- C++のコンパイルと実行方法|g++の使い方とオプション 2026-06-13 13:26:35
- .protoのgo_packageオプションとは|Goコード生成時のパッケージ指定 2026-06-13 13:26:34
- C++の開発環境構築|コンパイラとIDEの選び方・Hello World 2026-06-13 13:26:34
- gRPCクイックスタート|.proto定義からサーバ・クライアント実装まで 2026-06-13 13:26:33
- C++の関数まとめ|標準入出力(printf・cout・cin)と関数の基本 2026-06-13 13:26:33
- C#・Visual Studioのよくあるエラーと対処まとめ 2026-06-13 13:26:33
- UE5でSet Input Mode UI Onlyを解除する方法|Game Onlyに戻す 2026-06-13 13:26:32
- UE5のアウトライナーとは|アクターの一覧・整理・親子付け 2026-06-13 13:26:32
- UE5エディタの自動保存の頻度を変更する方法|Auto Save設定 2026-06-13 13:26:31
コメントを削除してもよろしいでしょうか?