为了澄清我遇到的问题,我正在 DB 上编写 pgtap 单元测试,我的一个函数返回一个表。但是,pgtap 函数function_returns
没有表检查及其列(名称和数据类型)的定义。
这些都是函数的重载:
SELECT function_returns( :schema, :function, :args, :type, :description );
SELECT function_returns( :schema, :function, :args, :type );
SELECT function_returns( :schema, :function, :type, :description );
SELECT function_returns( :schema, :function, :type );
SELECT function_returns( :function, :args, :type, :description );
SELECT function_returns( :function, :args, :type );
SELECT function_returns( :function, :type, :description );
SELECT function_returns( :function, :type );
您可以阅读官方文档中的完整定义以及每个参数的含义
基本上问题是它:type
不适用于table
.
所以我想知道这些用户定义的函数保存在 Postgres 中的哪里(尝试编写我自己的版本并希望为 pgtap 项目做出贡献)。
在挖掘源代码后,我找到了后台使用的函数来检查这个,它被称为_func_compare
CREATE OR REPLACE FUNCTION _func_compare( NAME, NAME, NAME[], anyelement, anyelement, TEXT)
RETURNS TEXT AS $$
SELECT CASE WHEN $4 IS NULL
THEN ok( FALSE, $6 ) || _nosuch($1, $2, $3)
ELSE is( $4, $5, $6 )
END;
$$ LANGUAGE SQL;
而且我不知道作者是如何检查函数的有效返回定义的。
您可以从
pg_proc
系统目录中获取函数的定义。如果
prorettype
is 包含特殊类型,则实际返回类型是对应条目为或的record
元素。proallargtypes
proargmodes
t
o
b
此查询应为您提供所有功能
test
及其对象 ID、输入类型和结果类型: