哪里有做网站服务商,重庆教育建设集团有限公司网站,做纸棋的网站,免费的域名注册网站目录 版本概述#xff1a;
跨大版本数据迁移
QProcess 调用相关进程进行备份和恢复 版本概述#xff1a; 该数据库版本主要分为主要版本和次要版本#xff0c;大版本基本每年发布一次#xff0c;小版本则每几个月即发布#xff0c;更新较快。在10.0之前所使用的数据库版…目录 版本概述
跨大版本数据迁移
QProcess 调用相关进程进行备份和恢复 版本概述 该数据库版本主要分为主要版本和次要版本大版本基本每年发布一次小版本则每几个月即发布更新较快。在10.0之前所使用的数据库版本由三个数字组成如pms所使用9.5.2主要版本为9.5次要版本为2即9.5版本第二次发布在10.0之后版本由两位数字组成如10.16
10为主要版本16为次要版本同一个主版本由于数据的存储结构相同且总是前后版本兼容因此升级只需要将旧版本的data文件替换到新的data文件即可而跨越主版本升级则会因为存储结构的改变而不能简单的进行data替换。 跨大版本数据迁移 通过pg_dump进行升级该方法主要是将原有的数据库转存为文本该文本主要包含数据库重新生成的sql语句后续再新版本中配合pg_restore或pg_sql进行数据库重新生成。
pg_dump -h 127.0.0.1 -U dbusername -p 5432 -d dbname -f sqlfilename .sql
psql -h 127.0.0.1 -U dbusername -p 5432 -d dbname -f sqlfilename.sql pg_dump -h 127.0.0.1 -U dbusername -p 5432 -d dbname -F c -f sqlfilename.backup
pg_restore -h 127.0.0.1 -U dbusername -p 5432 -d dbname -1 backup_file.backup 不指定输出格式则输出纯文本即sql文件恢复时需要psql程序执行sqlfilename 中sql语句恢复 指定自定义格式或其他格式恢复时必须用pg_restore读取sqlfilename进行恢复
纯文本格式恢复效率一般比自定义格式低。
-h, --hostHOSTNAME指定数据库服务器的主机名或 IP 地址。 -p, --portPORT指定数据库服务器的端口号。 -U, --usernameNAME指定连接数据库时使用的用户名。 -d, --dbnameNAME指定要备份的数据库名称。 输出格式参数 -F, --formatFORMAT指定导出文件的格式。常见的格式有 c自定义格式compressed这是默认格式支持压缩和并行恢复。 d目录格式将数据库导出为多个文件存储在一个目录中。 t纯文本格式SQL 脚本可读性强但恢复时可能较慢。 C自定义格式不压缩。 输出文件参数 -f, --fileFILENAME指定导出文件的路径和名称。 备份内容参数 -n, --schemaSCHEMA指定要导出的架构名称。 -t, --tableTABLE指定要导出的表名称。 --exclude-tableTABLE排除某张表不导出。 -a, --data-only只导出数据不导出结构表定义。 -s, --schema-only只导出结构不导出数据。
QProcess 调用相关进程进行备份和恢复
int AsyBackUpFileObj::pg_dump_sqlfile(const QStringDbBinDirStr, const QStringsqlfilePath)
{cLogger(PG)-info(TR(开始执行pg_dump命令备份数据).toStdString().c_str());QProcess pgProcess;QStringList ArgumentsList;ArgumentsList -h 127.0.0.1 -U username -p 5432 -d dbname -f sqlfilePath;pgProcess.setProgram(QDir::cleanPath(DbBinDirStr QDir::separator() pg_dump.exe));pgProcess.setArguments(ArgumentsList);QProcessEnvironment env QProcessEnvironment::systemEnvironment();env.insert(PGPASSWORD, MyPassWord);//数据库密码写在进程的环境变量中pgProcess.setProcessEnvironment(env);pgProcess.start();QObject::connect(pgProcess, QProcess::readyReadStandardOutput, []() {QString msg pgProcess.readAllStandardOutput();cLogger(PG)-info(msg.toStdString());});QObject::connect(pgProcess, QProcess::readyReadStandardError, []() {QString msg pgProcess.readAllStandardError();cLogger(PG)-info(msg.toStdString());});if (!pgProcess.waitForStarted()){cLogger(PG)-error(TR(执行pg_dump命令失败).toStdString().c_str());return -1;}if (pgProcess.waitForFinished(-1)){cLogger(PG)-info(TR(执行pg_dump命令备份数据成功).toStdString().c_str());return 0;}else{return -1;}
}int AsyBackUpFileObj::pg_restore_fromFile(const QStringDbBinDirStr, QStringsqlfilePath)
{cLogger(PG)-info(TR(开始执行psql命令执行数据备份sql进行恢复).toStdString().c_str());QProcess pgProcess;QStringList ArgumentsList;ArgumentsList -h 127.0.0.1 -U pms_db_role -p 5432 -d pms_db_client -f sqlfilePath;pgProcess.setProgram(QDir::cleanPath(DbBinDirStr QDir::separator() psql.exe));pgProcess.setArguments(ArgumentsList);pgProcess.start();if (!pgProcess.waitForStarted()){cLogger(PG)-error(TR(执行psql命令失败).toStdString().c_str());return -1;}if (pgProcess.waitForFinished(-1)){cLogger(PG)-info(TR(执行psql命令执行数据备份sql进行恢复成功).toStdString().c_str());return 0;}else{return -1;}
}该程序除了用于备份和恢复也适合用于数据跨版本迁移在使用文本格式的备份文件时备份文件是将数据以sql的形式存储在文件中在高版本中调用psql实际是在将该sql执行一遍在恢复数据相较于自定义格式效率较低。