代码之家  ›  专栏  ›  技术社区  ›  rxmnnxfpvg

ASSERT与PostgreSQL的示例使用

  •  9
  • rxmnnxfpvg  · 技术社区  · 6 年前

    阅读后 the documentation for ASSERT ,我仍然对如何使用它感到困惑,并且在网上找不到任何关于如何使用 ASSERT 在a中。sql脚本。

    例如,说我想 明确肯定 返回的行数 SELECT * FROM my_table WHERE my_col = 3 等于10。

    有人能提供一个有效的例子吗?

    2 回复  |  直到 6 年前
        1
  •  17
  •   Vao Tsun    6 年前

    我想你也会尝试做类似的事情?

    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
  •  2
  •   Максим Стукало    5 年前
    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;