在 PostgreSQL 中使用 ASSERT 的示例

Posted

技术标签:

【中文标题】在 PostgreSQL 中使用 ASSERT 的示例【英文标题】:Example use of ASSERT with PostgreSQL 【发布时间】:2018-05-08 15:55:19 【问题描述】:

在阅读the documentation for ASSERT 之后,我仍然对如何使用它感到困惑,并且在网上找不到任何关于如何在 .sql 脚本中使用ASSERT 做一些简单事情的示例。

例如,假设我想ASSERTSELECT * FROM my_table WHERE my_col = 3 返回的行数等于 10。

有人可以提供一个可行的例子吗?

【问题讨论】:

【参考方案1】:

我会假设你尝试做类似的事情?

so=# select count(*) from pg_database;
 count
-------
    21
(1 row)

so=# do $$ begin assert (select count(*) from pg_database) = 21, 'not 21!';end;$$;
DO
so=# do $$ begin assert (select count(*) from pg_database) = 22, 'not 22!';end;$$;
ERROR:  not 22!
CONTEXT:  PL/pgSQL function inline_code_block line 1 at ASSERT

【讨论】:

【参考方案2】:
do $$
    begin
        ASSERT 1 = 2;
    end;
$$ LANGUAGE plpgsql;

但请注意,它只能从 PostgreSql 9.5 开始工作。在旧版本中,您可以像这样定义自己的断言函数

CREATE OR REPLACE FUNCTION __assert(boolean) RETURNS VOID AS $$
    BEGIN
        IF NOT $1 THEN
            RAISE EXCEPTION 'ASSERTING FAILED';
        END IF;
    END;
$$ LANGUAGE plpgsql;

然后这样使用

do $$
    declare
        tmp char;
    begin
        tmp := __assert(tmp_to_https('https') = 'https');
    end;
$$ LANGUAGE plpgsql;

【讨论】:

以上是关于在 PostgreSQL 中使用 ASSERT 的示例的主要内容,如果未能解决你的问题,请参考以下文章

关于c++中的assert语句

java中的assert

在 pig 中使用 ASSERT 时出错

在 guard 语句的 else 块中使用 assert

Java陷阱之assert关键字

Java陷阱之assert关键字