我正在替换get_data
我们数据库中的一个遗留函数,它需要一些entity_id
并返回一个引用。
我正在编写一个get_data_new
使用不同数据源的新函数,但输出应该与get_data
相同输入的相同。
我想用 pgtap 验证这一点,并在测试中这样做(使用_expected
和_actual
作为返回游标的名称):
SELECT schema.get_data('_expected', 123);
SELECT schema.get_data_new('_actual', 123);
SELECT results_eq(
'FETCH ALL FROM _actual',
'FETCH ALL FROM _expected',
'get_data_new should return identical results to the legacy version'
);
这对其他函数按预期工作,但查询get_data
恰好返回一些json
列,这意味着比较预期会失败ERROR: could not identify an equality operator for type json
。
我宁愿保留遗留功能不变,因此jsonb
无法重构。我正在想象一种解决方法是在比较之前转换数据,假设使用类似的东西SELECT entity_id, json_column::jsonb FROM (FETCH ALL FROM _actual)
,但这种特定的尝试显然是无效的。
这里建议的方法是什么?编写一个辅助函数将游标中的数据插入到几个临时表中?我希望有一个我还没有发现的更清洁的解决方案。
使用 postgres 11.14,pgtap11