Wed. Apr 22nd, 2026

Install psql / pg_dump

sudo apt update
sudo apt install postgresql-client
pg_dump --version
psql --version

How to set DATABASE_URL

# local
export DATABASE_URL="postgresql://postgres:password@localhost:5432/mydb"

# supabase / Neon
postgresql://user:password@ep-xxx.region.aws.neon.tech/dbname?sslmode=require

How to export/dump/backup

# ########################################################
# 🔽 読み出し(export / dump / backup)
# 「DB → ファイル」
# ########################################################

# 1) DB全体を custom format でバックアップ
# - 圧縮される
# - pg_restore で柔軟に復元可能
# - 保管・移行向き
pg_dump -Fc "$DATABASE_URL" > backup.dump


# 2) DB全体を SQL テキストでバックアップ
# - 中身を読める / 編集できる
# - そのまま psql で流せる
pg_dump "$DATABASE_URL" > backup.sql


# 3) スキーマのみ(構造だけ)
# - CREATE TABLE / INDEX / CONSTRAINT
pg_dump --schema-only "$DATABASE_URL" > schema.sql


# 4) データのみ
# - INSERT / COPY
pg_dump --data-only "$DATABASE_URL" > data.sql


# 5) 特定テーブルだけ
pg_dump "$DATABASE_URL" -t companies -t categories > partial.sql

How to import/restore/apply


# ########################################################
# 🔼 書き戻し(import / restore / apply)
# 「ファイル → DB」
# ########################################################

# 7) SQL ファイルを DB に反映(基本)
# - backup.sql / migration.sql など
psql "$DATABASE_URL" < backup.sql

# 同じ(-f オプション)
psql "$DATABASE_URL" -f backup.sql


# 8) custom format を DB に復元
# - backup.dump を戻す
pg_restore -d "$DATABASE_URL" backup.dump


# 9) 上書き復元(既存オブジェクト削除付き)
# - clean: DROP してから作り直す
pg_restore -d "$DATABASE_URL" --clean --if-exists backup.dump


# 10) スキーマ → データ の順で反映
psql "$DATABASE_URL" < schema.sql
psql "$DATABASE_URL" < data.sql


# 11) 差分 SQL を反映(実務で最重要)
# - ALTER / UPDATE だけ書いた migration.sql を流す
psql "$DATABASE_URL" < migration.sql


# 12) DBを一度空にしてから完全復元(強い操作)
psql "$DATABASE_URL" -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
psql "$DATABASE_URL" < backup.sql