数据库迁移脚本生成专家

0 浏览
0 试用
0 购买
Nov 2, 2025更新

本提示词专门为开发者和数据库管理员设计,能够根据不同的数据库系统和迁移需求,自动生成高质量的数据迁移脚本。通过分析源数据库类型、目标数据库类型和数据结构特征,系统会生成确保数据完整性、最小化停机时间并简化复杂迁移任务的定制化脚本。该提示词支持主流数据库系统间的迁移,具备智能数据类型映射、约束条件处理和性能优化建议等功能,大幅提升数据库迁移工作的效率和可靠性。

迁移概述

本方案面向“MySQL → PostgreSQL”的标准复杂度迁移,核心特点:

  • 使用 PostgreSQL 的 mysql_fdw 通过纯 SQL 直接读取 MySQL 数据进行迁移,避免中间文件,降低数据一致性风险。
  • 提供通用的类型映射与转换函数(如零日期修复、TINYINT(1)→BOOLEAN 转换)。
  • 采用“先结构、后数据、再约束与索引”的顺序,支持逐表迁移与验证(行数、校验和)。
  • 所有约束/索引在数据加载后创建,支持 DEFERRABLE,减少加载过程中的锁与失败。
  • 自带回滚与验证思路,兼顾性能与安全。

说明:由于未提供具体表结构,脚本包含可复用的迁移过程、函数与两个示例表(customers、orders)。你可按示例快速替换实际表名与列映射表达式完成迁移。


数据类型映射表

常见 MySQL → PostgreSQL 类型映射与注意项:

  • 数值

    • TINYINT(1) → boolean(业务表示布尔时);否则 → smallint
    • TINYINT → smallint
    • SMALLINT → smallint
    • MEDIUMINT → integer
    • INT → integer
    • BIGINT → bigint
    • 浮点:FLOAT → real;DOUBLE → double precision
    • DECIMAL(p,s) → numeric(p,s)
    • UNSIGNED:
      • TINYINT UNSIGNED → smallint(或 integer,视上限)
      • INT UNSIGNED → bigint
      • BIGINT UNSIGNED → numeric(20)(防止溢出)
  • 字符与二进制

    • CHAR(n), VARCHAR(n) → 同名类型(PostgreSQL 以 UTF8 编码;注意 Collation 差异)
    • TEXT/TINYTEXT/MEDIUMTEXT/LONGTEXT → text
    • BINARY(n)/VARBINARY(n) → bytea
    • BLOB/TINYBLOB/MEDIUMBLOB/LONGBLOB → bytea
  • 日期与时间

    • DATE → date(修复 '0000-00-00' 为 NULL)
    • DATETIME/TIMESTAMP → timestamp without time zone(修复 '0000-00-00 00:00:00' 为 NULL;若存储 UTC,建议统一为 timestamptz)
    • TIME → time without time zone
    • YEAR → smallint
  • 结构化类型

    • JSON → jsonb(推荐 jsonb 以便索引与查询优化)
    • ENUM('a','b',...) → text + CHECK 约束(保留可枚举值集)
    • SET('x','y',...) → text[](或 text,取决于业务)
  • 空间类型

    • GEOMETRY/POINT 等 → PostGIS geometry(需扩展 postgis),或保持为 text/bytea 并后续转换
  • 其他

    • AUTO_INCREMENT → GENERATED BY DEFAULT AS IDENTITY(PostgreSQL 序列/标识列)
    • COLLATION/CHARSET → PostgreSQL 使用数据库级编码与排序规则;如需特定排序规则,使用 COLLATE

迁移脚本

以下脚本在 PostgreSQL 上执行(psql),需预先安装 mysql_fdw(PostgreSQL 扩展)。将其中的连接信息与示例表替换为你的实际环境。脚本按步骤组织,可分批执行。

-- =========================================
-- 环境与FDW准备
-- =========================================

BEGIN;

-- 1) 创建FDW扩展(确保已安装:CREATE EXTENSION IF NOT EXISTS mysql_fdw;)
CREATE EXTENSION IF NOT EXISTS mysql_fdw;

-- 2) 目标与源schema
CREATE SCHEMA IF NOT EXISTS src_mysql;    -- 用于承载MySQL的外部表
CREATE SCHEMA IF NOT EXISTS tgt;          -- 目标PostgreSQL表schema(可改为public)

-- 3) 定义MySQL连接(替换为你的配置)
-- 注意:避免将密码明文提交到版本库;生产环境使用安全凭据管理
DROP SERVER IF EXISTS mysql_src CASCADE;
CREATE SERVER mysql_src
  FOREIGN DATA WRAPPER mysql_fdw
  OPTIONS (host 'MYSQL_HOST', port '3306');

CREATE USER MAPPING FOR CURRENT_USER
  SERVER mysql_src
  OPTIONS (username 'MYSQL_USER', password 'MYSQL_PASSWORD');

COMMIT;

-- 4) 导入源数据库表为外部表(替换数据库名与需要的表,或全量导入后按需过滤)
-- 注:部分版本的mysql_fdw支持IMPORT FOREIGN SCHEMA,若不支持需手工CREATE FOREIGN TABLE。
-- 下面尝试导入名为 source_db 的MySQL数据库的所有表至 src_mysql schema。
DO $$
BEGIN
  BEGIN
    EXECUTE $sql$
      IMPORT FOREIGN SCHEMA `source_db`
      FROM SERVER mysql_src
      INTO src_mysql
    $sql$;
  EXCEPTION WHEN others THEN
    RAISE NOTICE 'IMPORT FOREIGN SCHEMA 不可用或失败,请使用手工 CREATE FOREIGN TABLE 方式.';
  END;
END $$;

-- 如IMPORT不支持,请按以下模板手工创建外部表:
-- CREATE FOREIGN TABLE src_mysql.customers (
--   id integer,
--   name varchar(255),
--   is_active smallint,
--   created_at timestamp without time zone
-- ) SERVER mysql_src OPTIONS (dbname 'source_db', table_name 'customers');

-- =========================================
-- 通用转换与校验函数
-- =========================================

-- 修复MySQL零日期('0000-00-00' / '0000-00-00 00:00:00')
CREATE OR REPLACE FUNCTION tgt.safe_date(d text)
RETURNS date LANGUAGE sql IMMUTABLE AS $$
  SELECT CASE WHEN d IS NULL OR d='0000-00-00' THEN NULL ELSE d::date END
$$;

CREATE OR REPLACE FUNCTION tgt.safe_timestamp(d text)
RETURNS timestamp without time zone LANGUAGE sql IMMUTABLE AS $$
  SELECT CASE WHEN d IS NULL OR d='0000-00-00 00:00:00' THEN NULL ELSE d::timestamp WITHOUT TIME ZONE END
$$;

-- TINYINT(1) → boolean
CREATE OR REPLACE FUNCTION tgt.tinyint_to_bool(i integer)
RETURNS boolean LANGUAGE sql IMMUTABLE AS $$
  SELECT CASE WHEN i IS NULL THEN NULL WHEN i=0 THEN FALSE ELSE TRUE END
$$;

-- BINARY(16)/CHAR(36) → uuid(示例:若源为BINARY(16)存储UUID)
CREATE OR REPLACE FUNCTION tgt.bytes_to_uuid(b bytea)
RETURNS uuid LANGUAGE plpgsql IMMUTABLE AS $$
DECLARE
  v uuid;
BEGIN
  IF b IS NULL OR length(b) <> 16 THEN
    RETURN NULL;
  END IF;
  -- 将16字节转UUID(以big-endian为例,如有自定义字节序需调整)
  SELECT (
    encode(substr(b,1,4),'hex')||'-'||
    encode(substr(b,5,2),'hex')||'-'||
    encode(substr(b,7,2),'hex')||'-'||
    encode(substr(b,9,2),'hex')||'-'||
    encode(substr(b,11,6),'hex')
  )::uuid INTO v;
  RETURN v;
END $$;

-- 通用表校验和(按主键排序,将整行转JSON后聚合md5)
-- 注意:若迁移时有类型归一化(如tinyint→boolean),源/目标校验和可能不同;此函数用于同构比较或目标内复核。
CREATE OR REPLACE FUNCTION tgt.table_checksum(_schema text, _table text, _pk text)
RETURNS text LANGUAGE plpgsql AS $$
DECLARE out_md5 text;
BEGIN
  EXECUTE format($fmt$
    SELECT md5(string_agg(md5(row_to_json(t)::text), ''))
    FROM (SELECT * FROM %I.%I ORDER BY %I) t
  $fmt$, _schema, _table, _pk)
  INTO out_md5;
  RETURN out_md5;
EXCEPTION WHEN undefined_table THEN
  RETURN NULL;
END $$;

-- 通用迁移过程(结构创建、数据导入、索引约束与校验)
CREATE OR REPLACE PROCEDURE tgt.migrate_table(
  src_schema      text,
  src_table       text,
  dst_schema      text,
  dst_table       text,
  dst_ddl         text,   -- 目标表DDL(CREATE TABLE ...)
  insert_select   text,   -- 数据加载语句(INSERT INTO ... SELECT ... FROM src_schema.src_table)
  pk_col          text,   -- 主键列名(用于序列/标识重置与排序校验)
  create_indexes  text DEFAULT NULL,    -- 可选,索引DDL(可为多个语句串)
  create_constraints text DEFAULT NULL  -- 可选,约束DDL(FK/UNIQUE/CHECK等)
)
LANGUAGE plpgsql
AS $$
DECLARE
  next_start bigint;
  src_cnt bigint;
  dst_cnt bigint;
BEGIN
  -- 1) 创建目标表
  EXECUTE dst_ddl;

  -- 2) 数据加载(建议在单独事务中批量导入)
  EXECUTE insert_select;

  -- 3) 重置标识列起始值(若使用IDENTITY)
  IF pk_col IS NOT NULL THEN
    EXECUTE format('SELECT COALESCE(MAX(%I),0)+1 FROM %I.%I', pk_col, dst_schema, dst_table) INTO next_start;
    -- 对IDENTITY列生效
    EXECUTE format('ALTER TABLE %I.%I ALTER COLUMN %I RESTART WITH %s', dst_schema, dst_table, pk_col, next_start);
  END IF;

  -- 4) 创建索引(如有)
  IF create_indexes IS NOT NULL THEN
    EXECUTE create_indexes;
  END IF;

  -- 5) 创建约束(如有;建议使用 DEFERRABLE INITIALLY DEFERRED)
  IF create_constraints IS NOT NULL THEN
    EXECUTE create_constraints;
  END IF;

  -- 6) 验证行数一致性
  EXECUTE format('SELECT COUNT(*) FROM %I.%I', src_schema, src_table) INTO src_cnt;
  EXECUTE format('SELECT COUNT(*) FROM %I.%I', dst_schema, dst_table) INTO dst_cnt;
  IF src_cnt <> dst_cnt THEN
    RAISE EXCEPTION '行数不一致:源=%, 目标=%(表:%.%→%.%)', src_cnt, dst_cnt, src_schema, src_table, dst_schema, dst_table;
  END IF;

  -- 注:类型归一化会导致跨库校验和不一致,这里不做跨库校验和比对。
  RAISE NOTICE '迁移完成:%.% → %.%(行数=%)', src_schema, src_table, dst_schema, dst_table, dst_cnt;
END $$;

-- =========================================
-- 示例:customers 表迁移(按需替换)
-- 源MySQL:customers(id INT AUTO_INCREMENT PK, name VARCHAR(255), is_active TINYINT(1), created_at DATETIME)
-- =========================================

-- 目标表DDL(注意使用IDENTITY以替代AUTO_INCREMENT)
DO $$
DECLARE
  ddl text := $DDL$
    CREATE TABLE IF NOT EXISTS tgt.customers (
      id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
      name varchar(255) NOT NULL,
      is_active boolean NOT NULL DEFAULT TRUE,
      created_at timestamp without time zone
    )
  $DDL$;

  ins text := $INS$
    INSERT INTO tgt.customers (id, name, is_active, created_at)
    SELECT
      c.id,
      c.name,
      tgt.tinyint_to_bool(c.is_active) AS is_active,
      tgt.safe_timestamp(c.created_at::text) AS created_at
    FROM src_mysql.customers c
  $INS$;

  idx text := $IDX$
    CREATE INDEX IF NOT EXISTS idx_customers_name ON tgt.customers(name);
  $IDX$;

BEGIN
  CALL tgt.migrate_table(
    'src_mysql','customers',
    'tgt','customers',
    ddl, ins, 'id',
    idx, NULL
  );
END $$;

-- =========================================
-- 示例:orders 表迁移(含ENUM映射为text + CHECK,FK约束)
-- 源MySQL:orders(id BIGINT AUTO_INCREMENT PK, customer_id INT, amount DECIMAL(12,2), status ENUM('pending','paid','cancelled'), order_date DATE)
-- =========================================

DO $$
DECLARE
  ddl text := $DDL$
    CREATE TABLE IF NOT EXISTS tgt.orders (
      id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
      customer_id integer NOT NULL,
      amount numeric(12,2) NOT NULL,
      status text NOT NULL,
      order_date date,
      CHECK (status IN ('pending','paid','cancelled'))
    )
  $DDL$;

  ins text := $INS$
    INSERT INTO tgt.orders (id, customer_id, amount, status, order_date)
    SELECT
      o.id,
      o.customer_id,
      o.amount::numeric(12,2),
      o.status::text,
      tgt.safe_date(o.order_date::text)
    FROM src_mysql.orders o
  $INS$;

  idx text := $IDX$
    CREATE INDEX IF NOT EXISTS idx_orders_customer_id ON tgt.orders(customer_id);
  $IDX$;

  cons text := $CONS$
    ALTER TABLE tgt.orders
      ADD CONSTRAINT fk_orders_customer
      FOREIGN KEY (customer_id) REFERENCES tgt.customers(id)
      DEFERRABLE INITIALLY DEFERRED;
  $CONS$;

BEGIN
  CALL tgt.migrate_table(
    'src_mysql','orders',
    'tgt','orders',
    ddl, ins, 'id',
    idx, cons
  );
END $$;

-- =========================================
-- 其它表:请参考以上模式,每表一段 DO 块,填充目标DDL与INSERT..SELECT转换表达式。
-- =========================================

-- 可选:迁移后统计与分析
ANALYZE tgt.customers;
ANALYZE tgt.orders;

-- 结束

执行步骤

  1. 前置准备

    • 在目标 PostgreSQL 安装并启用 mysql_fdw。
    • 确认 MySQL 与 PostgreSQL 的时区、字符集(建议 MySQL 使用 utf8mb4,PostgreSQL 使用 UTF8)。
    • 为迁移窗口做好业务只读或低写入策略,减少数据漂移。
  2. 连接配置

    • 在脚本中填写 MySQL 连接信息(host、port、user、password、dbname)。
    • 使用 IMPORT FOREIGN SCHEMA 或手工 CREATE FOREIGN TABLE 将 MySQL 源表映射到 src_mysql schema。
  3. 结构设计

    • 为每个表撰写目标 DDL(考虑类型映射、是否使用 identity、约束与索引设计)。
    • 对 ENUM/SET、UNSIGNED、零日期、布尔值等进行转换策略定义。
  4. 数据迁移

    • 使用示例的 DO 块 + CALL tgt.migrate_table(...) 对每个表执行迁移。
    • 先迁移无外键依赖的主数据表,再迁移从表,并在加载后添加 FK(DEFERRABLE)。
  5. 验证与优化

    • 逐表比对行数(脚本已内置)。
    • 如需更深度比对,可在目标表上计算校验和,也可抽样比对关键字段。
    • 执行 ANALYZE,重建必要索引并检查执行计划。
  6. 切换与回滚

    • 验证通过后切换应用到 PostgreSQL。
    • 如需回滚,保留 MySQL 为权威数据源(本脚本不包含破坏性操作),可随时重跑迁移过程。

注意事项

  • 零日期与无效时间:MySQL 可存在 '0000-00-00';PostgreSQL 不允许。脚本已提供 safe_date/safe_timestamp 将其转换为 NULL。
  • 布尔字段:仅在业务语义明确为 TINYINT(1) → boolean 时转换;否则保留为 smallint。
  • UNSIGNED:需上调到更大范围的类型(如 INT UNSIGNED → bigint),避免溢出。
  • JSON:建议统一为 jsonb,以便后续索引与查询优化。
  • 排序规则与大小写敏感:MySQL 与 PostgreSQL collation 行为不同;如对排序、distinct、有大小写不敏感需求,请评估并设置 COLLATE 或使用 citext。
  • 时区:DATETIME/TIMESTAMP 请统一策略(UTC/timestamptz);脚本默认使用 timestamp without time zone。
  • 索引与约束创建时机:为提升加载性能,索引与外键在数据导入后创建;外键使用 DEFERRABLE INITIALLY DEFERRED 降低锁风险。
  • 安全:避免在生产中暴露明文密码;连接凭据应采用安全管理方式(如 .pgpass、密钥管理服务)。

验证方法

  • 行数一致性(已在过程内核查):
    • SELECT COUNT() FROM src_mysql.table 与 SELECT COUNT() FROM tgt.table 比较。
  • 校验和值(目标库内核查):
    • 在目标库中计算校验和:SELECT tgt.table_checksum('tgt','orders','id'); 用于迁移后数据一致性快照。
  • 抽样字段比对(跨库):
    • 从 MySQL 选取样本(按主键),在 PostgreSQL 选取对应记录(按主键)比对关键字段(数值、日期、状态)。
  • 约束完整性:
    • 在目标库执行:ALTER TABLE ... VALIDATE CONSTRAINT ...;确保所有 FK/UNIQUE/CHECK 有效。
  • 性能与统计:
    • 执行 ANALYZE 后检查查询计划;对高频查询建立合适索引(btree、partial index、GIN/GiST 用于 jsonb、全文检索等)。

如需针对你的实际表结构生成精确的 DDL 与 INSERT..SELECT 转换表达式,请提供 MySQL 表的 CREATE TABLE 语句或信息架构(字段名、类型、约束),我可进一步输出定制化的完整迁移脚本。

迁移概述

本方案面向 Oracle 到 MySQL 的复杂迁移场景,兼顾数据类型精确映射、主键与序列替换、约束与索引重建、批量高效数据导入以及数据一致性验证。整体策略如下:

  • 数据类型按精度与范围做精准映射,避免溢出与截断;
  • Oracle 序列与触发器使用 MySQL 的 AUTO_INCREMENT 或“序列表 + 函数”进行替代;
  • 先建表后导数,再建外键/索引/检查约束,提升导入效率;
  • 使用 CSV 批量导入(LOAD DATA),统一字符集为 utf8mb4,时间统一为 UTC;
  • 提供验证与回滚方案,保证迁移安全性与业务连续性。

数据类型映射表

说明:尽量保持与 Oracle 精度一致;MySQL 版本建议为 8.0.16+(支持 CHECK)。

  • NUMBER(p,0)
    • p ≤ 9 → INT
    • 10 ≤ p ≤ 18 → BIGINT
    • p > 18 → DECIMAL(p,0)
  • NUMBER(p,s) → DECIMAL(p,s)(MySQL DECIMAL 总位数 ≤ 65;如 p>65 需降维或分拆)
  • NUMBER(未指定精度)→ DECIMAL(38,10)(保守策略;如逻辑为整型可改 BIGINT)
  • BINARY_FLOAT → FLOAT
  • BINARY_DOUBLE / FLOAT → DOUBLE
  • VARCHAR2(n [BYTE|CHAR]) → VARCHAR(n)(统一字符集 utf8mb4;注意行大小限制)
  • NVARCHAR2(n) / NCHAR(n) → VARCHAR/CHAR(以 utf8mb4 存储;建议用对应 collation)
  • CHAR(n) → CHAR(n)
  • DATE(含时分秒)→ DATETIME(0) 或 DATETIME(6)(若使用毫秒则选(6))
  • TIMESTAMP[(n)] → DATETIME[(n)](避免 MySQL TIMESTAMP 的自动更新语义)
  • TIMESTAMP WITH TIME ZONE → DATETIME(6)(存 UTC;应用层处理时区)
  • INTERVAL YEAR TO MONTH → INT(总月数)或 VARCHAR(20)(建议 INT)
  • INTERVAL DAY TO SECOND → BIGINT(总毫秒或秒)或 VARCHAR(30)(建议 BIGINT 毫秒)
  • RAW(n) → VARBINARY(n)
  • LONG RAW → LONGBLOB
  • BLOB → BLOB
  • CLOB / NCLOB → LONGTEXT(utf8mb4)
  • XMLTYPE → LONGTEXT(存 XML 文本)
  • ROWID/UROWID → 不迁移为业务字段
  • 默认值:SYSDATE/SYSTIMESTAMP → CURRENT_TIMESTAMP[(6)]
  • 布尔(PL/SQL)→ TINYINT(1)(0/1)

注意:

  • utf8mb4 下 VARCHAR 最大长度受一行 65535 字节限制,超长建议改用 TEXT/LONGTEXT;
  • MySQL CHECK 约束在 8.0.16+ 才会强制执行;如低版本需改触发器或应用校验。

迁移脚本

以下脚本为通用模板与示例,需根据实际表结构替换对象名、列定义与约束。示例包含典型三张表:customers、orders、order_items,并演示序列替代与批量导入。

  1. 目标库初始化(MySQL 8.0)
-- 建议在全新 Schema 下迁移与验证
CREATE DATABASE IF NOT EXISTS target_mig
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_0900_ai_ci;
USE target_mig;

-- 基本会话配置
SET NAMES utf8mb4;
SET time_zone = '+00:00';
SET sql_mode = 'STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE';

-- 为避免导入期间外键开销,后续导数时临时关闭(见执行步骤)
-- SET FOREIGN_KEY_CHECKS=0;
-- SET UNIQUE_CHECKS=0;
  1. DDL:表结构(示例)
-- customers(Oracle: NUMBER PK + VARCHAR2 + DATE)
CREATE TABLE customers (
  customer_id BIGINT NOT NULL,                 -- Oracle NUMBER(10) 映射
  name        VARCHAR(200) NOT NULL,
  email       VARCHAR(320) NULL,               -- RFC email 可到 320 字符
  created_at  DATETIME(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT pk_customers PRIMARY KEY (customer_id),
  CONSTRAINT uq_customers_email UNIQUE (email),
  CONSTRAINT chk_customers_name CHECK (CHAR_LENGTH(name) > 0)
) ENGINE=InnoDB;

-- orders(Oracle: 序列 + 触发器填充;时间戳与状态检查)
CREATE TABLE orders (
  order_id    BIGINT NOT NULL,
  customer_id BIGINT NOT NULL,
  order_date  DATETIME(6) NOT NULL,
  status      VARCHAR(30) NOT NULL,            -- Oracle CHECK(status in (...))
  total_amt   DECIMAL(18,2) NOT NULL DEFAULT 0,
  CONSTRAINT pk_orders PRIMARY KEY (order_id),
  INDEX idx_orders_customer_id (customer_id)
) ENGINE=InnoDB;

-- order_items(含数量与价格,注意精度)
CREATE TABLE order_items (
  item_id     BIGINT NOT NULL,
  order_id    BIGINT NOT NULL,
  product_code VARCHAR(64) NOT NULL,
  quantity    DECIMAL(18,6) NOT NULL,          -- Oracle NUMBER(18,6)
  unit_price  DECIMAL(18,2) NOT NULL,
  CONSTRAINT pk_order_items PRIMARY KEY (item_id),
  INDEX idx_order_items_order_id (order_id)
) ENGINE=InnoDB;
  1. 外键与检查约束(建议在数据导入后再创建,以提升导入效率)
-- 外键约束
ALTER TABLE orders
  ADD CONSTRAINT fk_orders_customer
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
  ON DELETE RESTRICT ON UPDATE RESTRICT;

ALTER TABLE order_items
  ADD CONSTRAINT fk_items_order
  FOREIGN KEY (order_id) REFERENCES orders(order_id)
  ON DELETE CASCADE ON UPDATE RESTRICT;

-- 示例状态检查(MySQL 8.0.16+)
ALTER TABLE orders
  ADD CONSTRAINT chk_orders_status
  CHECK (status IN ('CREATED','PAID','SHIPPED','CANCELLED'));
  1. 序列替代方案
  • 若 Oracle 使用序列为 PK,且导入后仍需新插入生成主键,建议使用 AUTO_INCREMENT。
  • 如必须与多个表共享同一序列值或保持与历史序列完全一致,使用“序列表 + 函数”方案:

A. 将主键列改为 AUTO_INCREMENT(仅当序列不跨表共享)

ALTER TABLE customers MODIFY customer_id BIGINT NOT NULL AUTO_INCREMENT;
ALTER TABLE orders    MODIFY order_id    BIGINT NOT NULL AUTO_INCREMENT;
ALTER TABLE order_items MODIFY item_id   BIGINT NOT NULL AUTO_INCREMENT;

说明:导入历史数据时可显式写入主键值,AUTO_INCREMENT 不会阻止。

B. 跨表共享序列(可选):序列表 + 函数

-- 通用序列表
CREATE TABLE sequences (
  name VARCHAR(64) NOT NULL PRIMARY KEY,
  val BIGINT NOT NULL
) ENGINE=InnoDB;

-- 初始化已有的 Oracle 序列当前值(需从 Oracle 数据字典查询 last_number)
INSERT INTO sequences(name, val) VALUES
  ('seq_orders', 100000),  -- 示例值,替换为实际序列当前值
  ('seq_items',  500000);

DELIMITER $$
CREATE FUNCTION nextval(seq_name VARCHAR(64))
RETURNS BIGINT
DETERMINISTIC
BEGIN
  -- 使用 LAST_INSERT_ID 技巧保证并发安全
  UPDATE sequences SET val = LAST_INSERT_ID(val + 1) WHERE name = seq_name;
  RETURN LAST_INSERT_ID();
END$$
DELIMITER ;

-- 使用触发器示例(当不使用 AUTO_INCREMENT)
DELIMITER $$
CREATE TRIGGER trg_orders_before_ins
BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
  IF NEW.order_id IS NULL OR NEW.order_id = 0 THEN
    SET NEW.order_id = nextval('seq_orders');
  END IF;
END$$
DELIMITER ;
  1. 批量数据导入(CSV) 说明:建议用 SQLcl/SQL*Plus 从 Oracle 导出 CSV,统一为 UTF-8,日期格式固定;MySQL 使用 LOAD DATA LOCAL INFILE 高效导入。

A. Oracle 侧导出(优先 SQLcl)

-- 使用 SQLcl(支持 SET SQLFORMAT)
SET SQLFORMAT csv
SET NLS_DATE_FORMAT 'YYYY-MM-DD"T"HH24:MI:SS'
SET NLS_TIMESTAMP_FORMAT 'YYYY-MM-DD"T"HH24:MI:SS.FF6'
SPOOL customers.csv
SELECT customer_id, name, email, created_at FROM customers ORDER BY customer_id;
SPOOL OFF

SPOOL orders.csv
SELECT order_id, customer_id,
       TO_CHAR(order_date, 'YYYY-MM-DD"T"HH24:MI:SS.FF6') AS order_date,
       status, total_amt
FROM orders ORDER BY order_id;
SPOOL OFF

SPOOL order_items.csv
SELECT item_id, order_id, product_code, quantity, unit_price
FROM order_items ORDER BY item_id;
SPOOL OFF

若仅有 SQL*Plus,可设置分隔与引号,确保转义与空值一致(略)。

B. MySQL 侧导入(注意 secure_file_priv 设置;如用 LOCAL 需客户端支持)

-- 导入前建议关闭外键与唯一检查,加速导入(执行步骤中再开启)
SET FOREIGN_KEY_CHECKS=0;
SET UNIQUE_CHECKS=0;
SET AUTOCOMMIT=0;

-- customers
LOAD DATA LOCAL INFILE '/path/customers.csv'
INTO TABLE customers
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\n'
(customer_id, @v_name, @v_email, @v_created_at)
SET
  name       = NULLIF(@v_name, ''),
  email      = NULLIF(@v_email, ''),
  created_at = STR_TO_DATE(@v_created_at, '%Y-%m-%dT%H:%i:%s');

-- orders
LOAD DATA LOCAL INFILE '/path/orders.csv'
INTO TABLE orders
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\n'
(order_id, customer_id, @v_order_date, @v_status, total_amt)
SET
  order_date = STR_TO_DATE(@v_order_date, '%Y-%m-%dT%H:%i:%s.%f'),
  status     = NULLIF(@v_status, '');

-- order_items
LOAD DATA LOCAL INFILE '/path/order_items.csv'
INTO TABLE order_items
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\n'
(item_id, order_id, product_code, quantity, unit_price);

COMMIT;

-- 导入完成后恢复检查
SET FOREIGN_KEY_CHECKS=1;
SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT=1;
  1. 导入后再创建外键/索引/检查约束(若尚未创建)
-- 示例:已在上文提供 FK/CHK;若为了最大化性能可在此阶段再执行
-- 另外建议为常用查询列添加必要索引(结合执行计划)
CREATE INDEX idx_orders_status_date ON orders(status, order_date);
CREATE INDEX idx_items_product ON order_items(product_code);
  1. 空字符串与 NULL 的统一处理 Oracle 将空字符串当作 NULL;MySQL 不会,需进行清洗:
-- 示例:将空字符串标准化为 NULL(实际根据业务列选择)
UPDATE customers SET email = NULL WHERE email = '';

执行步骤

  1. 准备阶段

    • 确认 MySQL 版本(建议 8.0.16+)、目标库字符集 utf8mb4、时区统一为 UTC。
    • 采集 Oracle 元数据:表、列、约束、索引、序列、触发器、分区与物化视图等。
    • 根据映射表生成 MySQL DDL(可分批构建),确认长度、精度与 CHECK 条件。
  2. 架构搭建

    • 在新 Schema(如 target_mig)创建所有表(不含外键/索引/检查约束或暂不创建)。
    • 选择序列替代策略:AUTO_INCREMENT 或“序列表 + 函数”。
  3. 数据导出

    • 使用 SQLcl/SQL*Plus 导出 CSV(UTF-8;统一日期/时间戳格式;确保转义与空值策略)。
    • 大表分片导出(按主键范围或日期分段),避免超大单文件。
  4. 批量导入

    • 在 MySQL 会话中暂时关闭 FOREIGN_KEY_CHECKS 与 UNIQUE_CHECKS,关闭 autocommit。
    • 使用 LOAD DATA LOCAL INFILE 导入,逐表执行,父表先导入,子表后导入。
    • 导入完成后 COMMIT,并恢复检查开关。
  5. 约束与索引重建

    • 创建外键、唯一约束、普通索引、CHECK 约束。
    • 若有分区表,按 MySQL 语法与可用分区类型重建(需单独设计)。
  6. 验证与优化

    • 执行验证方法(见下节),确认行数与关键字段一致。
    • 根据慢查询日志与执行计划(EXPLAIN/ANALYZE)增补索引。
    • 调整 InnoDB 参数(如 buffer pool、redo/undo)在导入窗口优化性能。
  7. 切换与回滚

    • 采用“双库双写”或“只读切换”策略:先将应用指向新库的只读实例进行验证,再切主写。
    • 保留原库只读一段时间作为回退;如需回滚只需将应用连接指针切回原库。

注意事项

  • 精度风险:
    • NUMBER 未指定精度的列必须评估实际范围后再定 DECIMAL 或 BIGINT,避免溢出或截断。
  • 时间语义:
    • Oracle DATE 包含时间;请确保 MySQL 使用 DATETIME 并统一为 UTC,避免时区漂移。
  • 字符集与长度:
    • utf8mb4 下最大行长度限制会影响超长 VARCHAR;必要时用 TEXT/LONGTEXT。
  • CHECK 约束:
    • 仅 MySQL 8.0.16+ 强制执行;低版本需用触发器或应用侧校验。
  • 序列语义:
    • AUTO_INCREMENT 与 Oracle 序列行为不同;跨表共享序号需使用“序列表 + 函数”。
  • 物化视图/分区/高级特性:
    • Oracle 物化视图需改为表 + 事件/任务刷新;分区需按 MySQL 语法重新设计。
  • 安全与审计:
    • 避免在生产中使用 LOAD DATA LOCAL INFILE 不受控路径;启用审计日志与最小权限。
  • 不建议在导入期间进行 DML 并发写入,以免外键与唯一约束验证失败。

验证方法

  • 行数与基本统计
    • 每表比对 COUNT(*)、MIN/MAX(主键与日期)、SUM/AVG(数值列)。
  • 采样数据对比
    • 随机抽样 N 条记录(同一主键)比对字段值;可输出哈希校验。
  • 约束一致性
    • MySQL: SHOW CREATE TABLE;核对主键、唯一、外键、CHECK 与索引是否齐全。
  • 引用完整性
    • 检查孤儿记录:SELECT oi.* FROM order_items oi LEFT JOIN orders o ON oi.order_id=o.order_id WHERE o.order_id IS NULL;
  • 数据长度/截断检查
    • 统计文本列长度 > 设定上限的记录数;评估是否需放宽列长度。
  • 时间与时区
    • 随机抽样比对时间字段是否与 Oracle 一致(考虑秒/毫秒与时区转换)。
  • 性能验证
    • 使用 EXPLAIN ANALYZE 检查主要查询路径,确保索引命中;对慢查询增补复合索引。
  • 导入一致性
    • 全库 CRC/MD5 校验(可对关键列拼接后做哈希)对比抽样与总量趋势。

如需将上述模板生成针对您实际的 Oracle 数据字典的完整 MySQL DDL/约束/索引脚本,请提供具体表结构(列名、数据类型、精度、约束、索引、序列与触发器定义),我可按此输出可直接执行的迁移脚本。

迁移概述

本方案针对从 SQL Server 迁移到 PostgreSQL 的“简单”场景,聚焦常见表结构、基本约束和索引的迁移与数据导入。方案特点:

  • 明确的数据类型映射,确保精度与语义一致
  • 使用 PostgreSQL 标准特性(IDENTITY、UUID、DEFERRABLE 约束等)
  • 推荐以 CSV + COPY 导入的方式,兼顾效率与安全(避免危险操作)
  • 提供完整的 DDL/DML 模板与可执行步骤,支持快速落地
  • 包含数据一致性验证与性能优化建议

如未提供具体表结构,迁移脚本以模板形式给出,可直接替换占位符后使用。


数据类型映射表

以下为常见 SQL Server 到 PostgreSQL 的类型映射(简单场景适用):

  • 整数与布尔
    • SQL Server INT → PostgreSQL integer
    • BIGINT → bigint
    • SMALLINT → smallint
    • TINYINT → smallint(如需严格 0–255,可加 CHECK 约束)
    • BIT → boolean(0/1 → false/true)
  • 小数与数值
    • DECIMAL(p,s)/NUMERIC(p,s) → numeric(p,s)
    • MONEY/SMALLMONEY → numeric(19,4)/numeric(10,4)
    • FLOAT → double precision
    • REAL → real
  • 字符串
    • CHAR(n) → char(n)
    • VARCHAR(n) → varchar(n)
    • NVARCHAR(n) → varchar(n)(PostgreSQL 默认 UTF-8,兼容 Unicode)
    • VARCHAR(MAX)/NVARCHAR(MAX)/TEXT → text
  • 日期与时间
    • DATE → date
    • TIME → time without time zone
    • DATETIME/DATETIME2 → timestamp without time zone
    • DATETIMEOFFSET → timestamp with time zone
  • 其他常见类型
    • UNIQUEIDENTIFIER → uuid(需扩展 uuid-ossp 或使用 pgcrypto)
    • VARBINARY/IMAGE → bytea
    • XML → xml
  • 默认与函数映射
    • GETDATE() → CURRENT_TIMESTAMP(或 now())
    • SYSDATETIME() → CURRENT_TIMESTAMP
    • NEWID() → uuid_generate_v4()(uuid-ossp)或 gen_random_uuid()(pgcrypto)
  • 标识列
    • IDENTITY → GENERATED BY DEFAULT AS IDENTITY(推荐)或 GENERATED ALWAYS AS IDENTITY(更严格)

注意:SQL Server 的大小写不敏感与排序规则(collation)与 PostgreSQL 不同。若需不区分大小写的比较,建议使用 citext 扩展或统一 lower()/upper() 处理。


迁移脚本

以下提供 PostgreSQL 端的完整可执行模板脚本(含扩展、Schema、表结构、约束、索引与数据导入)。请根据实际表结构进行替换补充。

-- ================================================
-- PostgreSQL 迁移脚本模板(请在 psql 客户端执行)
-- 适用:简单场景,常规表、约束、索引、CSV 导入
-- ================================================

-- 1) 基础设置与扩展
BEGIN;

-- 建议在新库中执行,避免与现有对象冲突
-- 客户端编码(确保 CSV 为 UTF-8)
SET client_encoding TO 'UTF8';

-- 添加常用扩展(根据需要选择)
-- 若使用 uuid_generate_v4(),需要 uuid-ossp
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- 如需 gen_random_uuid() 可改用 pgcrypto:
-- CREATE EXTENSION IF NOT EXISTS "pgcrypto";

-- 如需不区分大小写的文本列(可选)
-- CREATE EXTENSION IF NOT EXISTS "citext";

-- 2) 创建目标 schema(保留 SQL Server 的 dbo 命名习惯)
CREATE SCHEMA IF NOT EXISTS dbo;

-- 3) 示例表结构(请替换为实际表结构)
-- 下面示例涵盖常用类型与约束。将其复制拓展为你的所有表。
-- 示例一:dbo.users
CREATE TABLE IF NOT EXISTS dbo.users (
    id            integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    username      varchar(100) NOT NULL,
    email         varchar(255) NOT NULL,
    is_active     boolean NOT NULL DEFAULT true,
    created_at    timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
    external_guid uuid DEFAULT uuid_generate_v4(),
    -- 如 SQL Server 为 NVARCHAR(MAX),建议用 text
    bio           text
);

-- 唯一约束(示例)
ALTER TABLE dbo.users
    ADD CONSTRAINT uq_users_email UNIQUE (email);

-- 示例二:dbo.orders(含外键、数值类型)
CREATE TABLE IF NOT EXISTS dbo.orders (
    id             bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    user_id        integer NOT NULL,
    order_number   varchar(50) NOT NULL,
    amount         numeric(18,2) NOT NULL,
    status         varchar(20) NOT NULL,
    created_at     timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
    -- 示例 BIT → boolean
    paid           boolean NOT NULL DEFAULT false,
    -- 示例 DATETIMEOFFSET → timestamptz(如有)
    -- paid_at     timestamp with time zone
    -- 示例 UNIQUEIDENTIFIER → uuid
    source_guid    uuid
);

-- 外键约束(设为 DEFERRABLE,便于批量导入时推迟检查)
ALTER TABLE dbo.orders
    ADD CONSTRAINT fk_orders_user
    FOREIGN KEY (user_id) REFERENCES dbo.users(id)
    DEFERRABLE INITIALLY DEFERRED;

-- 唯一索引(示例)
CREATE UNIQUE INDEX IF NOT EXISTS idx_orders_order_number
ON dbo.orders (order_number);

-- 非唯一索引(示例)
CREATE INDEX IF NOT EXISTS idx_orders_user_id_status
ON dbo.orders (user_id, status);

-- 4) 数据导入(推荐使用 \copy 在 psql 客户端执行)
-- 注意:\copy 是 psql 元命令,运行于客户端,避免服务器文件权限问题
-- 将 SQL Server 导出的 CSV 文件路径替换为你的实际路径

-- 导入用户数据
-- CSV 须包含表列的表头,且编码为 UTF-8
\copy dbo.users (id, username, email, is_active, created_at, external_guid, bio)
FROM '/path/to/export/users.csv' WITH (FORMAT csv, HEADER true);

-- 导入订单数据(外键已设为 DEFERRABLE)
\copy dbo.orders (id, user_id, order_number, amount, status, created_at, paid, source_guid)
FROM '/path/to/export/orders.csv' WITH (FORMAT csv, HEADER true);

-- 5) 迁移后检查(示例:确保关键约束生效)
-- 若导入时临时去除 NOT NULL/UNIQUE,需在此处重新启用并清理坏数据
-- 简单场景建议直接在 DDL 中启用约束,避免后置修复

COMMIT;

-- 6) 可选:校验辅助查询(行数、空值、唯一性)
-- 行数
-- SELECT COUNT(*) FROM dbo.users;
-- SELECT COUNT(*) FROM dbo.orders;

-- 唯一性与空值检查
-- SELECT email, COUNT(*) FROM dbo.users GROUP BY email HAVING COUNT(*) > 1;
-- SELECT COUNT(*) FROM dbo.users WHERE email IS NULL;

-- 7) 性能建议(可在数据导入结束后)
-- ANALYZE 更新统计信息
ANALYZE dbo.users;
ANALYZE dbo.orders;

-- 可按需 VACUUM(通常不必立即执行)
-- VACUUM (ANALYZE) dbo.users;
-- VACUUM (ANALYZE) dbo.orders;

说明:

  • 以上为模板示例,请依据你的实际 SQL Server 表结构批量生成对应的 CREATE TABLE/INDEX/CONSTRAINT 语句。
  • IDENTITY 字段用 GENERATED BY DEFAULT AS IDENTITY 映射,兼容手工插入旧主键值;如希望严格禁止插入自增列,可改为 GENERATED ALWAYS。
  • 约束选用 DEFERRABLE INITIALLY DEFERRED,便于先导入数据、再在事务提交时统一校验外键。

执行步骤

  1. 评估与准备

    • 确认迁移范围为简单场景:无分区表、无复杂触发器、无计算列、无跨库依赖。
    • 对 SQL Server 源库进行全量备份,验证可恢复性。
    • 统一字符集策略:将 CSV 导出为 UTF-8 编码。
  2. 导出表结构

    • 在 SSMS 中对目标表使用“任务 → 生成脚本”,导出 CREATE TABLE/INDEX/CONSTRAINT。
    • 手工按“数据类型映射表”转换类型与默认值函数(例:GETDATE() → CURRENT_TIMESTAMP;UNIQUEIDENTIFIER → uuid)。
    • 将 SQL Server 的 IDENTITY 改为 PostgreSQL 的 GENERATED BY DEFAULT AS IDENTITY。
  3. 导出数据

    • 使用 bcp 或 SSMS 导出向导按表导出 CSV,包含表头,编码为 UTF-8。
      • 示例命令(在客户端执行):
        • bcp dbo.users out users.csv -S <sqlserver_host> -d -U -P -c -C 65001 -t "," -r "\n"
        • bcp dbo.orders out orders.csv -S <sqlserver_host> -d -U -P -c -C 65001 -t "," -r "\n"
      • 注意不要使用 xp_cmdshell 等高风险手段。
  4. 在 PostgreSQL 中创建架构

    • 连接 PostgreSQL 目标库,执行上文“迁移脚本”的 DDL 部分(扩展、schema、表、约束、索引)。
  5. 导入数据

    • 使用 psql 客户端执行 \copy 将 CSV 导入对应表。
    • 对包含外键的表,确保约束为 DEFERRABLE,在同一事务中导入以避免顺序问题。
  6. 校验与优化

    • 执行行数、唯一性、空值、外键等检查(见“验证方法”)。
    • 执行 ANALYZE 更新统计信息,必要时创建/调整索引。
  7. 切换与回滚预案

    • 预先准备回滚:保留源数据备份、目标库快照(或在事务中导入,失败则回滚)。
    • 切换前在只读窗口进行对比验证,通过后再切换应用连接。

注意事项

  • 字符集与排序规则差异:PostgreSQL 默认 UTF-8,大小写与排序行为不同。若业务依赖不区分大小写的匹配,考虑 citext 或在查询中统一 lower()/upper()。
  • 布尔值转换:SQL Server BIT 的 0/1 请转换为 false/true,导出 CSV 时确保值一致。
  • 时间类型与时区:DATETIME/DATETIME2 映射为 timestamp without time zone;如有时区需求使用 timestamptz,并在导出阶段携带时区信息。
  • UUID 默认值:NEWID() 不同于 uuid v4,若需一致性请在导出时保留源值;默认生成可用 uuid_generate_v4()。
  • 约束加载:为支持批量导入,外键设为 DEFERRABLE;请避免关闭约束或使用危险的 session_replication_role。
  • 索引:SQL Server 的 filtered index 可映射为 PostgreSQL 的 partial index(使用 WHERE 条件);如无过滤条件则常规 btree 索引即可。
  • 事务与幂等:建议在导入时使用事务,DDL 使用 IF NOT EXISTS,避免重复执行造成异常。

验证方法

  • 行数一致性

    • 在 SQL Server 源库:SELECT COUNT(*) FROM dbo.;
    • 在 PostgreSQL 目标库:SELECT COUNT(*) FROM dbo.
    • ;
    • 对所有迁移表进行对比,允许的偏差应为 0。
    • 主键与唯一性

      • 检查主键/唯一列是否存在重复:
        • SELECT , COUNT() FROM dbo.
    • GROUP BY HAVING COUNT() > 1;
    • 空值与约束

      • 检查 NOT NULL 列是否存在空值:
        • SELECT COUNT(*) FROM dbo.
    • WHERE <not_null_col> IS NULL;
    • 外键完整性

      • 检查孤儿记录:
        • SELECT o.* FROM dbo.orders o LEFT JOIN dbo.users u ON o.user_id = u.id WHERE u.id IS NULL;
    • 数值精度与范围

      • 对金额/数量类列比较聚合统计:
        • SQL Server:SELECT SUM(amount), MIN(amount), MAX(amount) FROM dbo.orders;
        • PostgreSQL:SELECT SUM(amount), MIN(amount), MAX(amount) FROM dbo.orders;
    • 随机抽样对比

      • 抽样记录并按主键比对字段一致性(可通过导出两侧同样主键集合进行比对)。
    • 性能与计划

      • 执行 ANALYZE 后查看查询计划是否合理;对慢查询添加合理索引或调整索引列顺序。
    • 如需针对你的实际表结构生成定制的 PostgreSQL DDL 与导入脚本,请提供源库的 CREATE TABLE/INDEX/CONSTRAINT 片段或表清单,我们将按上述映射生成可直接执行的完整脚本。

      示例详情

      适用用户

      数据库管理员(DBA)

      快速评估源目标差异,生成迁移手册与脚本;安排低峰切换、校验数据一致;为审计留存报告与回滚方案。

      后端开发负责人

      在版本发布前,一键产出表结构调整与数据变更脚本;联动测试环境提前演练,降低上线风险与返工。

      系统架构师/技术经理

      规划上云或架构升级时,快速验证多种迁移路线;量化停机窗口与性能影响,制定稳妥切换决策。

      解决的问题

      面向研发与运维团队,在系统升级、云上迁移、数据库替换等高频场景,快速产出可执行的迁移方案与脚本。通过智能类型映射、约束与索引重建、性能优化建议以及步骤化的执行与回滚指引,把复杂迁移标准化、可复用、可审计:显著缩短停机窗口,降低人为失误,确保数据安全与一致性,支持主流数据库互迁(如 MySQL、PostgreSQL、Oracle、SQL Server 与云数据库),最终以可量化的效率与质量提升,驱动试用到付费转化。

      特征总结

      一次输入源库与目标库,一键生成迁移脚本,覆盖表结构与数据迁移
      智能识别两端差异,自动给出映射方案与替代建议,避免精度与范围丢失
      自动处理主外键、索引与约束的迁移顺序,缩短锁表时间,减少停机窗口
      生成可分步执行与可回滚脚本,支持演练切换,突发问题可快速恢复
      为海量数据提供分批与并发策略,搭配进度控制与重试机制,加速迁移
      内置校验清单与比对查询,一键核对迁前迁后一致性,输出可审计报告
      输出清晰的操作步骤、注意事项与风险提示,团队协作可直接照单执行
      兼容主流数据库与云平台场景,跨版本跨引擎迁移无需改写大量脚本
      支持参数化模板与自定义规则,沉淀团队最佳实践,复用效率持续提升

      如何使用购买的提示词模板

      1. 直接在外部 Chat 应用中使用

      将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

      2. 发布为 API 接口调用

      把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

      3. 在 MCP Client 中配置使用

      在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

      AI 提示词价格
      ¥20.00元
      先用后买,用好了再付款,超安全!

      您购买后可以获得什么

      获得完整提示词模板
      - 共 633 tokens
      - 3 个可调节参数
      { 源数据库类型 } { 目标数据库类型 } { 迁移复杂度 }
      获得社区贡献内容的使用权
      - 精选社区优质案例,助您快速上手提示词
      限时免费

      不要错过!

      免费获取高级提示词-优惠即将到期

      17
      :
      23
      小时
      :
      59
      分钟
      :
      59