如何继续sql脚本出错?

Ale*_*ühl 5 sql postgresql

我们有几个迁移脚本,它们可以在不同版本之间改变模式.

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

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

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

Ale*_*ühl 5

尽管 @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;
$$;
Run Code Online (Sandbox Code Playgroud)

这个提示引导我找到了正确的 PostgresQL 站点,描述了可能捕获的错误代码- 所以这对我来说是正确的解决方案。