我有一个松散类型的staging表(数据类型文本的所有cols (pk除外)),我想将此数据移动到正确类型的数据表中,例如数字是数字,日期是日期等。
我最初的方法是在pgsql中创建一个游标,并循环遍历数据,通过适当的强制转换将其插入到最终表中。
我将捕获错误,并使用它们将失败的行插入到错误表中,以便稍后查看和处理。
有更聪明的方法吗?
的问候戴夫
使用带有BEGIN ... EXCEPTION WHEN ... END
块的PL/PgSQL函数来包装可能失败的操作。
参见Postgres sql处理批处理插入异常的例子和注意事项。
如果PostgreSQL的强制转换函数可以在测试模式下调用就好了,在测试模式下,它们返回一个布尔值结果,表示成功并丢弃产品,或者更好的是返回一个(result, successflag)
元组。这样,您就可以使用纯SQL完成所有操作。不幸的是,他们不支持,所以你必须使用异常处理循环和子事务。