使用pg_dump与pg_restore工具(逻辑备份/恢复)
这是PostgreSQL官方推荐的迁移方法,适用于大多数场景(如跨版本升级、跨服务器迁移)。操作步骤如下:
pg_dump命令生成自定义格式(.dump)的备份文件(包含表结构、数据、索引及大对象),例如:sudo -u postgres pg_dump -Fc -b -v -f /path/to/backup/mydb.dump mydb(-Fc表示自定义格式,-b包含大对象,-v开启详细模式)。scp等工具将备份文件复制到目标服务器,例如:scp /path/to/backup/mydb.dump user@target_debian:/path/to/destination/。sudo -u postgres createdb mydb),再用pg_restore命令恢复数据,例如:sudo -u postgres pg_restore -d mydb -v /path/to/destination/mydb.dump(-v显示恢复进度)。使用pgloader工具(异构数据迁移)
若需从MySQL、Oracle等非PostgreSQL数据库迁移数据,或需要更智能的数据转换(如自动处理数据类型差异),可使用pgloader。操作步骤如下:
sudo apt install pgloader。.load配置文件(如my_migration.load),指定源数据库与目标数据库的连接信息及迁移选项,例如:LOAD DATABASE
FROM mysql://user:password@source_host/source_db
INTO postgresql:///target_db
WITH include drop, create tables, create indexes, reset sequences
SET maintenance_work_mem to '128MB', work_mem to '12MB';
pgloader my_migration.load命令,工具会自动处理数据类型转换、表创建及数据加载。使用COPY命令(批量数据导入)
若数据已以CSV、TSV等结构化格式存在(如从Excel导出或旧系统导出的文本文件),可直接使用COPY命令高效导入。操作步骤如下:
CREATE TABLE employees (id SERIAL PRIMARY KEY, name VARCHAR(100), salary NUMERIC(10,2));。COPY命令将数据文件导入表中,例如:COPY employees(name, salary) FROM '/path/to/employees.csv' WITH CSV HEADER;(WITH CSV HEADER表示第一行为列名)。psql的\copy命令(无需超级用户权限)导入。使用INSERT语句(小批量数据迁移)
若数据量较小(如几百条记录),可直接编写SQL脚本,通过INSERT语句逐条插入数据。操作步骤如下:
INSERT语句,例如:INSERT INTO employees (name, salary) VALUES ('张三', 8000.00), ('李四', 9500.00);。psql命令执行脚本,例如:psql -U postgres -d target_db -f insert_script.sql。物理复制(实时/增量迁移)
若需实现实时数据同步(如主从复制)或最小化停机时间(如大型数据库迁移),可使用PostgreSQL的物理复制功能(基于WAL日志)。操作步骤如下:
postgresql.conf(设置wal_level = replica、max_wal_senders = 10),修改pg_hba.conf(允许目标服务器连接,如host replication replicator source_ip/32 md5),重启服务。CREATE USER replicator WITH REPLICATION PASSWORD 'secure_password' LOGIN;。postgresql.conf(设置hot_standby = on),修改pg_hba.conf(允许源服务器连接),重启服务。SELECT pg_create_physical_replication_slot('replication_slot');创建复制槽,再通过rsync同步数据目录(需停止源服务器),最后启动目标服务器进入热备模式。迁移注意事项
pg_dump需SELECT权限,pg_restore需CREATEDB权限)。pg_dump的--lock-tables选项),避免数据变更;迁移后验证数据完整性(如对比表记录数、关键字段值)。pg_dumpall备份所有数据库),迁移后备份目标数据库,防止数据丢失。