如何继续sql脚本出错?

时间:2014-06-26 12:57:34

标签: sql postgresql

我们有几个迁移脚本,可以将模式从版本更改为版本。

有时会发生迁移步骤(例如,向表中添加列)已经手动或通过修补程序安装完成,因此迁移脚本失败。

如何防止脚本因错误而停止(理想情况下是在特定的预期错误处),而是记录消息并继续使用脚本?

我们使用PostgresQL 9.1,PostgresQL的解决方案以及一般的SQL解决方案都可以。

2 个答案:

答案 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)

我不认为你有另一个解决方案,而不是在交易之外运行整个脚本。

如果我在那种情况下会怎么做:

  • 对a的元数据(drop / create table / column ...) 进行修改 交易。
  • 对数据进行所有修改(更新/插入/删除) 内部一项交易。