使用Pentaho ETL从MSSQL迁移至PostgreSQL时SQL执行报错求助
搞定Pentaho ETL从MSSQL迁PostgreSQL的表创建错误
嘿,看你贴的错误信息,问题其实很明显,先给你拆解下错误里的SQL:
CREATE TABLE "tablename" CREATE TABLE sysdiagrams ( ,`name` VARCHAR(128) , principal_id int , diagram_id int , version int )
这行SQL有两个致命的语法bug:
- 重复写了两次
CREATE TABLE,还把目标表名tablename和MSSQL的系统表sysdiagrams混在了一起 - 列定义开头多了个多余的逗号(括号后面直接跟了
,)
结合你用的是Pentaho 8.3版本,给你几个针对性的解决步骤:
1. 先把MSSQL的系统表排除在迁移范围外
sysdiagrams是MSSQL专门用来存数据库关系图的系统表,PostgreSQL根本不需要这玩意儿,完全没必要迁移。你去检查下你的Pentaho迁移作业:
- 打开表迁移的配置界面,找到表选择的部分
- 一定要勾选「排除系统表」的选项(Pentaho的表迁移工具默认应该有这个开关,可能你没勾)
- 如果自动排除没生效,手动把
sysdiagrams从待迁移的表列表里删掉就行
2. 修复自动生成的SQL语法
如果是Pentaho的自动建表功能抽风生成了错误SQL,你可以这么搞:
- 切换到自定义SQL模式,别用自动生成的语句,自己写兼容PostgreSQL的建表SQL(真要迁sysdiagrams的话,正确的语法大概是这样):
CREATE TABLE sysdiagrams ( name VARCHAR(128), principal_id INT, diagram_id INT PRIMARY KEY, version INT );
- 检查你的PostgreSQL数据库连接配置:确保驱动是适配的(Pentaho 8.3自带的PostgreSQL驱动可能有点旧,你可以替换成对应版本的
postgresql.jar),并且连接参数里设置了正确的SQL方言(选PostgreSQL)
3. 验证字段映射规则
MSSQL和PostgreSQL的数据类型虽然大部分兼容,但还是要注意细节:
- 确认Pentaho的字段映射没有乱匹配,别出现多余的符号或者重复关键字
- 如果用了表结构同步组件,先在测试环境生成SQL预览,确认语法没问题再执行
最后建议你先在测试环境单独测一两个表的迁移,没问题了再批量跑,省得一堆错误扎堆出现。
内容的提问来源于stack exchange,提问作者kemalgoklen
相关产品推荐
相关产品推荐

