20220214163000_custom_book_id_copy.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /*
  3. 迁移 article 库
  4. 从旧数据表中提取数据插入到新的表
  5. 插入时用uuid判断是否曾经插入
  6. 曾经插入就不插入了
  7. */
  8. require_once __DIR__."/../../../public/app/config.php";
  9. require_once __DIR__."/../../../public/app/public/snowflakeid.php";
  10. set_exception_handler(function($e){
  11. fwrite(STDERR,"error-msg:".$e->getMessage().PHP_EOL);
  12. fwrite(STDERR,"error-file:".$e->getFile().PHP_EOL);
  13. fwrite(STDERR,"error-line:".$e->getLine().PHP_EOL);
  14. exit;
  15. });
  16. $start = time();
  17. # 雪花id
  18. $snowflake = new SnowFlakeId();
  19. $fpError = fopen(__DIR__.'/log/'.basename($_SERVER['PHP_SELF'],'.php').".err.data.csv",'w');
  20. #
  21. $src_db = _SQLITE_DB_HOSTSETTING_;#源数据库
  22. $src_table = _SQLITE_TABLE_HOSTSETTING_;#源表名
  23. $dest_db = _PG_DB_CUSTOM_BOOK_ID_;#目标数据库
  24. $dest_table = _PG_TABLE_CUSTOM_BOOK_ID_;#目标表名
  25. fwrite(STDOUT,"migarate custom book id".PHP_EOL);
  26. #打开源数据库
  27. $PDO_SRC = new PDO($src_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  28. $PDO_SRC->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  29. fwrite(STDOUT,"open src table".PHP_EOL);
  30. #打开目标数据库
  31. $PDO_DEST = new PDO($dest_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  32. $PDO_DEST->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  33. fwrite(STDOUT,"open dest table".PHP_EOL);
  34. $queryInsert = "INSERT INTO ".$dest_table."
  35. (
  36. key,
  37. value)
  38. VALUES (? , ? )";
  39. $stmtDEST = $PDO_DEST->prepare($queryInsert);
  40. $commitData = [];
  41. $allInsertCount = 0;
  42. $allSrcCount = 0;
  43. $count = 0;
  44. #从源数据表中读取
  45. $query = "SELECT key,value FROM ".$src_table. " where key = 'max_book_number' ";
  46. $stmtSrc = $PDO_SRC->prepare($query);
  47. $stmtSrc->execute();
  48. if($srcData = $stmtSrc->fetch(PDO::FETCH_ASSOC)){
  49. $allSrcCount++;
  50. //查询是否已经插入
  51. $queryExsit = "SELECT id FROM ".$dest_table." WHERE key = ? ";
  52. $getExist = $PDO_DEST->prepare($queryExsit);
  53. $getExist->execute(array($srcData["key"]));
  54. $exist = $getExist->fetch(PDO::FETCH_ASSOC);
  55. if($exist){
  56. echo "key max_book_number exist value=".$getExist['value'];
  57. exit;
  58. }
  59. #插入目标表
  60. $commitData = array(
  61. $srcData["key"],
  62. $srcData["value"]
  63. );
  64. $stmtDEST->execute($commitData);
  65. $count++;
  66. $allInsertCount++;
  67. }else{
  68. echo "no row read".PHP_EOL;
  69. }
  70. fwrite(STDOUT,"insert done $allInsertCount in $allSrcCount ".PHP_EOL) ;
  71. fwrite(STDOUT, "all done in ".(time()-$start)."s".PHP_EOL);
  72. fclose($fpError);