我有一个松散类型的临时表(数据类型文本的所有cols(pk除外))并且我想将此数据移动到为数据正确键入的表中,例如数字是数字,日期是日期等。
我最初的方法是在pgsql中创建一个游标,然后通过适当的强制转换将数据插入到最终表中。
我将捕获错误并使用它们将失败的行插入到我可以查看并稍后解决的错误表中。
有更聪明的方法吗?
此致 戴夫
答案 0 :(得分:1)
使用带有BEGIN ... EXCEPTION WHEN ... END
块的PL / PgSQL函数包装可能失败的操作。
请参阅Postgres sql exception handling for batch insert以获取示例,并提出警告。
如果可以在测试模式下调用PostgreSQL的强制转换函数,那将是很好的,它们会返回一个布尔结果,表示成功并丢弃产品,甚至更好地返回(result, successflag)
元组。这样你就可以用普通的SQL做到这一切。不幸的是他们不支持,所以你必须使用异常处理循环和子事务。