visuddhinanda пре 2 година
родитељ
комит
febfc8a250

+ 11 - 0
app/Models/UserInfo.php

@@ -0,0 +1,11 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class UserInfo extends Model
+{
+    use HasFactory;
+}

+ 47 - 0
database/migrations/2023_05_17_125307_create_user_infos_table.php

@@ -0,0 +1,47 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateUserInfosTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('user_infos', function (Blueprint $table) {
+            $table->id();
+            $table->uuid('userid')->unique();
+            $table->uuid('path')->nullable();
+            $table->string('username',64)->unique();
+            $table->string('password',64);
+            $table->string('nickname',64);
+            $table->string('email',256)->unique();
+            $table->bigInteger('create_time')->nullable();
+            $table->bigInteger('modify_time')->nullable();
+            $table->bigInteger('receive_time')->nullable();
+            $table->text('setting')->nullable();
+            $table->text('reset_password_token')->nullable();
+            $table->timestamp('reset_password_sent_at')->nullable();
+            $table->text('confirmation_token')->nullable();
+            $table->timestamp('confirmed_at')->nullable();
+            $table->timestamp('confirmation_sent_at')->nullable();
+            $table->text('unconfirmed_email')->nullable();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('user_infos');
+    }
+}

+ 133 - 0
v1/scripts/migrations/20230517195200_user_info_copy.php

@@ -0,0 +1,133 @@
+<?php
+/*
+迁移  user_info 表
+从旧数据表中提取数据插入到新的表
+插入时用uuid判断是否曾经插入
+曾经插入就不插入了
+*/
+require_once __DIR__."/../../../public/app/config.php";
+
+set_exception_handler(function($e){
+	fwrite(STDERR,"error-msg:".$e->getMessage().PHP_EOL);
+	fwrite(STDERR,"error-file:".$e->getFile().PHP_EOL);
+	fwrite(STDERR,"error-line:".$e->getLine().PHP_EOL);
+	exit;
+});
+$start = time();
+
+$fpError = fopen(__DIR__.'/log/'.basename($_SERVER['PHP_SELF'],'.php').".err.data.csv",'w');
+
+#
+$src_db = _SQLITE_DB_USERINFO_;#源数据库
+$src_table = _SQLITE_TABLE_USER_INFO_;#源表名
+
+$dest_db = _PG_DB_USERINFO_;#目标数据库
+$dest_table = _PG_TABLE_USER_INFO_;#目标表名
+
+fwrite(STDOUT,"migarate user info".PHP_EOL);
+
+#打开源数据库
+$PDO_SRC = new PDO($src_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
+$PDO_SRC->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+fwrite(STDOUT,"open src table".PHP_EOL);
+
+#打开目标数据库
+$PDO_DEST = new PDO($dest_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
+$PDO_DEST->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+fwrite(STDOUT,"open dest table".PHP_EOL);
+
+$queryInsert = "INSERT INTO ".$dest_table."
+								(
+                                    id,
+                                    userid,
+                                    path,
+                                    username,
+									password,
+									nickname,
+									email,
+									create_time,
+									modify_time,
+									receive_time,
+									setting,
+									reset_password_token,
+									reset_password_sent_at,
+									confirmation_token,
+									confirmed_at,
+									confirmation_sent_at,
+									unconfirmed_email,
+									created_at,
+									updated_at
+                                    )
+									VALUES (
+                                        ? , ? , ? , ? , ?,
+                                        ? , ? , ? , ? , ?,
+                                        ? , ? , ? , ? , ?,
+                                        ? , ? , ? , ?
+                                        )";
+$stmtDEST = $PDO_DEST->prepare($queryInsert);
+
+$commitData = [];
+$allInsertCount = 0;
+$allSrcCount = 0;
+$count = 0;
+
+
+#从源数据表中读取
+$query = "SELECT *  FROM ".$src_table;
+$stmtSrc = $PDO_SRC->prepare($query);
+$stmtSrc->execute();
+while($srcData = $stmtSrc->fetch(PDO::FETCH_ASSOC)){
+	$allSrcCount++;
+
+	//查询是否已经插入
+	$queryExsit = "SELECT id  FROM ".$dest_table." WHERE id = ? ";
+	$getExist = $PDO_DEST->prepare($queryExsit);
+	$getExist->execute(array($srcData["id"]));
+	$exist = $getExist->fetch(PDO::FETCH_ASSOC);
+	if($exist){
+		continue;
+	}
+    $created_at = date("Y-m-d H:i:s.",$srcData["create_time"]/1000).($srcData["create_time"]%1000)." UTC";
+	$updated_at = date("Y-m-d H:i:s.",$srcData["modify_time"]/1000).($srcData["modify_time"]%1000)." UTC";
+
+	#插入目标表
+	$commitData = array(
+			$srcData["id"],
+			$srcData["userid"],
+			$srcData["path"],
+			$srcData["username"],
+			$srcData["password"],
+			$srcData["nickname"],
+			$srcData["email"],
+			$srcData["create_time"],
+			$srcData["modify_time"],
+			$srcData["receive_time"],
+			$srcData["setting"],
+			$srcData["reset_password_token"],
+			$srcData["reset_password_sent_at"],
+			$srcData["confirmation_token"],
+			$srcData["confirmed_at"],
+			$srcData["confirmation_sent_at"],
+			$srcData["unconfirmed_email"],
+			$created_at,
+			$updated_at
+		);
+	$stmtDEST->execute($commitData);
+	$count++;
+	$allInsertCount++;
+
+    echo "finished {$count} - {$srcData["username"]}".PHP_EOL;
+
+}
+
+$stmtDEST = $PDO_DEST->prepare("alter sequence user_infos_id_seq restart with 400");
+$stmtDEST->execute();
+
+fwrite(STDOUT,"insert done $allInsertCount in $allSrcCount ".PHP_EOL) ;
+fwrite(STDOUT, "all done in ".(time()-$start)."s".PHP_EOL);
+
+fclose($fpError);
+
+
+
+