はじめに
本記事では、PostgreSQLのインストールから基本的なSQL操作・コマンド一覧までをまとめます。
初学者の方でも手を動かしながら理解できるように
手順・コマンド・コード例を丁寧に解説するつもりで
まとめていきます。
対象読者
- データベースを初めて学ぶ方
- PostgreSQLを業務・個人開発で使い始めたい方
実行環境
| 項目 | 内容 |
|---|---|
| OS | Windows 11 |
| PostgreSQL | 16系 |
1. PostgreSQL とは
PostgreSQLはオープンソースのリレーショナルデータベース(RDBMS)です。
完全無料で商用利用も可能で、世界中のシステムで採用されています。
主な特徴
| 特徴 | 内容 |
|---|---|
| オープンソース | 無料・商用利用可 |
| ACID準拠 | トランザクションの信頼性が高い |
| 豊富なデータ型 | JSON・配列・地理情報など |
| SQL標準への高い準拠度 | 複雑なクエリも書きやすい |
| 多言語対応 | Python・Go・Java・Node.jsなど |
MySQL との違い(簡易比較)
| 比較項目 | PostgreSQL | MySQL |
|---|---|---|
| SQL標準準拠 | 高い | やや低い |
| 複雑なクエリ | 得意 | やや苦手 |
| 書き込み速度 | 普通 | 速い |
| JSON対応 | 高機能 | 基本的な対応 |
| ライセンス | PostgreSQL License | GPL / 商用 |
2. インストール(Windows 11)
インストーラーのダウンロード
公式サイトから Windows 用インストーラーを入手します。
https://www.postgresql.org/download/windows/
EnterpriseDB 製インストーラーを選択してください。
GUI付きで初心者に最適です。
インストール手順
| 手順 | 内容 |
|---|---|
| 1 | ダウンロードした .exe を右クリック →「管理者として実行」 |
| 2 | インストール先はデフォルト(C:\Program Files\PostgreSQL\16)でOK |
| 3 | コンポーネントを選択する |
| 4 | スーパーユーザー postgres のパスワードを設定する |
| 5 | ポート番号はデフォルト(5432)のまま進む |
コンポーネントの選択
インストール時に以下をすべてチェックします。
☑ PostgreSQL Server ← メインのDBサーバー
☑ pgAdmin 4 ← GUIツール(初学者に便利)
☑ Stack Builder ← 追加ツール管理
☑ Command Line Tools ← psql コマンドに必要
注意: スーパーユーザーのパスワードは後から変更が手間なので、最初にしっかり決めておきましょう。
PATH を環境変数に追加
psql コマンドをどこからでも使えるように PATH を設定します。
# PowerShell(管理者として実行)
[System.Environment]::SetEnvironmentVariable(
"Path",
$env:Path + ";C:\Program Files\PostgreSQL\16\bin",
"Machine"
)
設定後、新しいターミナルを開いてバージョン確認します。
psql --version
# psql (PostgreSQL) 16.x と表示されれば成功
3. 初期設定・接続手順
psql でサーバーに接続
# 書式: psql -U ユーザー名 -d データベース名
psql -U postgres
パスワード入力後、以下のプロンプトが表示されれば接続成功です。
postgres=#
データベースとユーザーの作成
-- 新しいユーザー(ロール)を作成
CREATE USER myuser WITH PASSWORD 'mypassword';
-- データベースを作成
CREATE DATABASE mydb OWNER myuser;
-- 権限付与
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
-- mydb に切り替え
\c mydb myuser
テーブルの作成と基本操作
-- テーブル作成
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(200) UNIQUE,
age INTEGER,
created_at TIMESTAMP DEFAULT NOW()
);
-- データ挿入
INSERT INTO users (name, email, age)
VALUES ('山田太郎', 'yamada@example.com', 25);
-- データ取得
SELECT * FROM users;
-- データ更新
UPDATE users SET age = 26 WHERE name = '山田太郎';
-- データ削除
DELETE FROM users WHERE id = 1;
4. コマンド一覧
psql メタコマンド(\ 系)
| コマンド | 説明 | 使用例 |
|---|---|---|
\l |
データベース一覧を表示 | \l |
\c [DB名] |
データベースに切り替え | \c mydb |
\dt |
テーブル一覧を表示 | \dt |
\d [テーブル名] |
テーブル構造を表示 | \d users |
\du |
ユーザー(ロール)一覧 | \du |
\i [ファイル] |
SQLファイルを実行 | \i setup.sql |
\o [ファイル] |
出力をファイルに書き出し | \o result.txt |
\timing |
クエリ実行時間を表示 | \timing |
\e |
外部エディタでSQL編集 | \e |
\q |
psqlを終了 | \q |
\? |
メタコマンドのヘルプ | \? |
\h [SQL] |
SQL構文のヘルプ | \h SELECT |
DDL(データ定義言語)
| コマンド | 説明 | 使用例 |
|---|---|---|
CREATE DATABASE |
データベースを作成 | CREATE DATABASE mydb; |
DROP DATABASE |
データベースを削除 | DROP DATABASE mydb; |
CREATE TABLE |
テーブルを作成 | CREATE TABLE t (id SERIAL PRIMARY KEY, name TEXT); |
ALTER TABLE |
テーブルを変更(列追加など) | ALTER TABLE t ADD COLUMN age INT; |
DROP TABLE |
テーブルを削除 | DROP TABLE IF EXISTS t; |
CREATE INDEX |
インデックスを作成(検索高速化) | CREATE INDEX idx_name ON t(name); |
CREATE VIEW |
ビューを作成 | CREATE VIEW v AS SELECT * FROM t WHERE age > 20; |
DML(データ操作言語)
| コマンド | 説明 | 使用例 |
|---|---|---|
SELECT |
データを検索・取得 | SELECT name, age FROM users WHERE age >= 20; |
INSERT INTO |
データを挿入 | INSERT INTO users (name) VALUES ('鈴木'); |
UPDATE |
データを更新 | UPDATE users SET age = 30 WHERE id = 1; |
DELETE |
データを削除 | DELETE FROM users WHERE id = 1; |
UPSERT |
挿入 or 更新(重複時) | INSERT INTO t VALUES(1,'A') ON CONFLICT(id) DO UPDATE SET name='A'; |
TRUNCATE |
全データを高速削除 | TRUNCATE TABLE users; |
よく使う関数・句
| コマンド / 関数 | 説明 | 使用例 |
|---|---|---|
COUNT() |
件数を数える | SELECT COUNT(*) FROM users; |
SUM() / AVG()
|
合計 / 平均 | SELECT AVG(age) FROM users; |
MAX() / MIN()
|
最大 / 最小 | SELECT MAX(age) FROM users; |
GROUP BY |
グループ集計 | SELECT age, COUNT(*) FROM users GROUP BY age; |
ORDER BY |
並び順を指定 | SELECT * FROM users ORDER BY age DESC; |
LIMIT / OFFSET
|
取得件数 / 開始位置 | SELECT * FROM users LIMIT 10 OFFSET 20; |
JOIN |
テーブルを結合 | SELECT u.name, o.item FROM users u JOIN orders o ON u.id = o.user_id; |
LIKE |
パターン検索 | SELECT * FROM users WHERE name LIKE '山%'; |
NOW() / CURRENT_DATE
|
現在日時 / 日付 | SELECT NOW(); |
COALESCE() |
NULL を別値に置換 | SELECT COALESCE(age, 0) FROM users; |
CAST() |
型変換 | SELECT CAST('123' AS INTEGER); |
EXPLAIN ANALYZE |
クエリ実行計画を確認 | EXPLAIN ANALYZE SELECT * FROM users; |
バックアップ・復元(シェルから実行)
| コマンド | 説明 | 使用例 |
|---|---|---|
pg_dump |
DBをバックアップ(SQL形式) | pg_dump -U postgres mydb > backup.sql |
pg_dump -Fc |
カスタム形式でバックアップ | pg_dump -U postgres -Fc mydb > backup.dump |
pg_restore |
カスタム形式から復元 | pg_restore -U postgres -d mydb backup.dump |
psql(リストア) |
SQLファイルから復元 | psql -U postgres mydb < backup.sql |
pg_dumpall |
全DBをバックアップ | pg_dumpall -U postgres > all.sql |
まとめ
| 手順 | コマンド |
|---|---|
| バージョン確認 | psql --version |
| サーバーに接続 | psql -U postgres |
| DB切り替え | \c mydb |
| テーブル一覧 | \dt |
| テーブル構造確認 | \d users |
| psqlを終了 | \q |
さいごに
PostgreSQL は個人開発から大規模な業務システムまで幅広く使われているデータベースです。
OSS-DBの資格取得予定ですのでハンズオンで学んでいきます。