我们有几个迁移脚本,可以将模式从版本更改为版本。
有时会发生迁移步骤(例如,向表中添加列)已经手动或通过修补程序安装完成,因此迁移脚本失败。
如何防止脚本因错误而停止(理想情况下是在特定的预期错误处),而是记录消息并继续使用脚本?
我们使用PostgresQL 9.1,PostgresQL的解决方案以及一般的SQL解决方案都可以。
答案 0 :(得分:3)
尽管@ LucM的回答似乎是一个很好的建议 - @TomasGreif向我指出了一个更符合我原始请求的答案。
对于添加列的给定示例,可以使用DO
语句来捕获异常:
DO $$
BEGIN
BEGIN
ALTER TABLE mytable ADD COLUMN counter integer default 0;
EXCEPTION
WHEN duplicate_column THEN RAISE NOTICE 'counter column already exists';
END;
END;
$$;
该提示将我带到了正确的PostgresQL网站,描述了error codes可能陷阱 - 这对我来说是正确的解决方案。
答案 1 :(得分:1)
我不认为你有另一个解决方案,而不是在交易之外运行整个脚本。
如果我在那种情况下会怎么做: