Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 00:47
· 39 commits to main since this release

pgcopy Release Notes

v0.4.0 – High-Performance Mode + Web UI 🚀🖥️

Released: August 7, 2025

This is our biggest release yet. v0.4.0 brings a high‑performance mode powered by streaming PostgreSQL COPY, an all‑new Web UI dashboard, stronger foreign‑key resiliency, and a cleaner documentation set. It’s the fastest, safest, and most pleasant pgcopy to date.


✨ Highlights

🚀 High‑Performance Mode

  • Streaming COPY pipeline: --copy-pipe streams source→dest in binary mode for maximal throughput
  • In‑flight compression: --compress reduces WAN bandwidth (requires --copy-pipe)
  • Minimal memory footprint, fewer round‑trips, perfect for high‑latency links

Example:

pgcopy copy \
  --source "postgres://user:pass@source:5432/db" \
  --dest   "postgres://user:pass@dest:5432/db" \
  --parallel 8 \
  --copy-pipe \
  --compress

🖥️ Web UI Dashboard (Output: web)

  • Real‑time status in your browser: --output web
  • Auto‑start local dashboard with table progress, stats, and results
  • Works alongside logging and stats collection

Example:

pgcopy copy \
  --source "postgres://user:pass@src:5432/db" \
  --dest   "postgres://user:pass@dst:5432/db" \
  --output web

🔗 Foreign Key Resilience

  • Idempotent FK restoration: hash/signature comparison to skip redundant re‑adds
  • Smarter retries with capped exponential backoff for transient errors
  • Better handling when constraints already exist

🚀 Usage Examples

High‑Performance Copy (WAN‑friendly):

pgcopy copy \
  --source "postgres://user:pass@source:5432/db" \
  --dest   "postgres://user:pass@dest:5432/db" \
  --parallel 16 \
  --batch-size 10000 \
  --copy-pipe \
  --compress

Web Dashboard:

pgcopy copy \
  --source "postgres://user:pass@source:5432/db" \
  --dest   "postgres://user:pass@dest:5432/db" \
  --output web

Changelog

Others

  • 2561909: Change include and exclude parameters
  • 6da2a21: Copy pipe and compress modes
  • 02bc93b: Drop unused state_driven.go
  • fb55f1f: Exclude CI pipeline matrix
  • 0076e6c: Fix web mode to use opened port automatically
  • d41c2d7: Global state and web view POC
  • e397872: Global state usage improvement
  • 2dce9e1: Group small tables into a single worker sequence
  • c1002dd: Hash and compare FK definitions before re-adding
  • e642808: Introduce cancellation context for copy command
  • eb57ae7: Layers based refactoring
  • 7a1e62c: Re-structure documentation
  • c572e25: Refactor logging levels
  • 90d6a43: Remove resume option as not planned
  • 3516619: Retry and backoff FK re-creation
  • d195d9f: Simplify source and dest parameters options
  • af890cc: Streaming documentation update
  • 79d930e: Update web monitoring page design