You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中使用Prisma同款cuid()函数进行PostgreSQL数据迁移

解决Prisma迁移效率与cuid()一致性问题

一、批量SQL迁移提升效率方案

直接用原生SQL做迁移能大幅降低ORM带来的额外开销,建议采用分批次查询+批量插入+事务包裹的方式:

  • 从原表按批次拉取数据(比如每次取1000条)
  • 对每条数据生成对应ID后组装批量INSERT语句
  • 通过Prisma的$executeRawUnsafe执行原生SQL,跳过ORM的逐行处理逻辑

二、获取与Prisma一致的cuid()实现

Prisma目前默认使用cuid2作为cuid生成器(旧版Prisma<v4.16用的是原cuid包),直接安装对应包即可:

针对新版Prisma(v4.16+)

npm install @paralleldrive/cuid2

在JS中导入使用:

import { createId } from '@paralleldrive/cuid2';

// 生成和Prisma schema中cuid()完全一致的ID
const newId = createId();

// 组装批量插入SQL(注意参数化避免注入风险)
const batchValues = originalDataList.map(item => 
  `('${createId()}', '${item.attr1}', '${item.attr2}', '${item.attr3}')`
).join(',');

const insertQuery = `INSERT INTO new_format_table(id, attr1, attr2, attr3) VALUES ${batchValues}`;

// 执行原生SQL
await prisma.$executeRawUnsafe(insertQuery);

针对旧版Prisma(<v4.16)

npm install cuid

导入使用:

import cuid from 'cuid';
const newId = cuid();

三、验证cuid一致性的方法

  1. 在Prisma Studio中创建一条测试数据,复制其ID
  2. 用安装的包生成ID,对比格式:
    • cuid2生成的是7-10位随机字符串(如k8m2p7x0)
    • 旧版cuid生成的ID以c开头(如c5f8d2a9b3)

四、迁移关键注意事项

  • 用事务包裹整个迁移流程,避免中途失败导致数据不一致:
    await prisma.$transaction(async (tx) => {
      // 分批次查询+插入逻辑
    });
    
  • 控制单批次数据量(1000-5000条为宜),避免内存溢出或数据库锁表
  • 迁移前务必备份数据库,先在测试环境验证再操作生产环境

内容的提问来源于stack exchange,提问作者GABRIEL R GARCIA-AVILES

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:42:11