看官方文档是不支持的
数据源及同步方案_大数据开发治理平台 DataWorks(DataWorks)-阿里云帮助中心 (aliyun.com)
看了下源码有个postsqlwriter 看了下也就拼接sql
将
PostgresqlWriter中的不允许更新先注释了 让他过去先
然后看到 WriterUtil中的对应方法
getWriteTemplate
确实只有对应mysql的方法
在下面加个postgres的
else if(forceUseUpdate ||((dataBaseType == DataBaseType.PostgreSQL ) && writeMode.trim().toLowerCase().startsWith("update"))) {writeDataSqlTemplate = new StringBuilder().append("INSERT INTO %s (").append(StringUtils.join(columnHolders, ",")).append(") VALUES(").append(StringUtils.join(valueHolders, ",")).append(")").append(onDuplicateKeyUpdateStringPostgres(columnHolders,writeMode.replace("update#",""))).toString();
}
其中调用方法
public static String onDuplicateKeyUpdateStringPostgres(List<String> columnHolders,String pk){if (columnHolders == null || columnHolders.size() < 1) {return "";}StringBuilder sb = new StringBuilder();sb.append(" ON CONFLICT ("+pk+") DO UPDATE SET ");boolean first = true;for(String column:columnHolders){if(column.equalsIgnoreCase(pk)){continue;}if(!first){sb.append(",");}else{first = false;}sb.append(column);sb.append("=EXCLUDED.");sb.append(column);}return sb.toString();}
然后配置文件中带上id
对应刚刚改的代码中的