Debian 上 PostgreSQL 数据库迁移方法
一 常用迁移方法概览
二 逻辑迁移步骤 pg_dump 与 pg_restore
sudo -u postgres pg_dump -Fc -b -v -f /path/to/mydb.dump mydatabasescp /path/to/mydb.dump user@target:/path/to/sudo apt update && sudo apt install postgresql postgresql-contribsudo -u postgres createdb mydatabasesudo -u postgres pg_restore -d mydatabase /path/to/mydb.dumpsudo -u postgres psql -d mydatabase -c "SELECT COUNT(*) FROM my_table;"三 全实例迁移 pg_dumpall 与 psql
sudo -u postgres pg_dumpall -U postgres -f /path/to/all.sqlsudo apt update && sudo apt install postgresql postgresql-contrib && sudo systemctl start postgresqlsudo -u postgres psql -U postgres -f /path/to/all.sql四 零停机迁移 物理复制与基础备份
wal_level = replicamax_wal_senders = 10wal_keep_segments = 64(或根据版本使用 wal_keep_size)sudo systemctl restart postgresqlCREATE USER replicator WITH REPLICATION PASSWORD 'password' LOGIN;hot_standby = onsudo systemctl restart postgresql五 异构与文件导入工具
sudo apt-get install pgloaderLOAD DATABASE
FROM mysql://user:pass@host:port/src_db
INTO postgresql:///tgt_db
WITH include drop, create tables, create indexes, reset sequences, foreign keys
SET maintenance_work_mem to '128MB', work_mem to '12MB';
pgloader my_migration.loadCOPY my_table(name, age) FROM '/path/to/data.csv' WITH CSV HEADER;
cat data.csv | psql -U user -d dbname -c "\copy my_table FROM STDIN WITH CSV HEADER"六 注意事项与最佳实践
listen_addresses)与 pg_hba.conf(认证与来源网段),必要时临时开放安全网段。maintenance_work_mem、work_mem),分批次导入以减少长事务与锁竞争。