将 ASSERT 与 PostgreSQL 结合使用的示例
Example use of ASSERT with PostgreSQL
阅读 the documentation for ASSERT 后,我仍然对如何使用它感到困惑,并且无法在网上找到任何示例,说明我如何在 .[=20= 中使用 ASSERT
做一些简单的事情] 脚本。
例如,假设我想 ASSERT
从 SELECT * FROM my_table WHERE my_col = 3
返回的行数等于 10。
有人可以提供一个工作示例吗?
我假设你会尝试做类似的事情?
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
do $$
begin
ASSERT 1 = 2;
end;
$$ LANGUAGE plpgsql;
但请注意,它仅适用于 PostgreSql 9.5。在旧版本中,您可以像这样定义自己的断言函数
CREATE OR REPLACE FUNCTION __assert(boolean) RETURNS VOID AS $$
BEGIN
IF NOT 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;
阅读 the documentation for ASSERT 后,我仍然对如何使用它感到困惑,并且无法在网上找到任何示例,说明我如何在 .[=20= 中使用 ASSERT
做一些简单的事情] 脚本。
例如,假设我想 ASSERT
从 SELECT * FROM my_table WHERE my_col = 3
返回的行数等于 10。
有人可以提供一个工作示例吗?
我假设你会尝试做类似的事情?
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
do $$
begin
ASSERT 1 = 2;
end;
$$ LANGUAGE plpgsql;
但请注意,它仅适用于 PostgreSql 9.5。在旧版本中,您可以像这样定义自己的断言函数
CREATE OR REPLACE FUNCTION __assert(boolean) RETURNS VOID AS $$
BEGIN
IF NOT 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;