我们知道,有一种简单的方法可以将任何记录转换为Postgresql中相应的复合类型,如下所示:
CREATE TYPE test.t_test AS ( mytext text,myint integer ); SELECT ('text',10)::test.t_test; -- will succeed
但是对此的一个不便是 – 如果目标类型被修改(例如添加了一个字段) – 那么演员将会破坏:(
ALTER TYPE test.t_test ADD ATTRIBUTE mychar char(1); SELECT ('text',10)::test.t_test; -- will fail
对于这种情况,CREATE CAST可能会有所帮助,但我无法将类似RECORD的伪类作为参数传递给转换函数.并且类型继承和复合类型默认值(如表)都不起作用.有没有其他方法可以实现兼容性?
当然可以使用显式强制转换函数,如CREATE FUNCTION test.to_t_test(t text,i integer,c char DEFAULT”)RETURNS test.t_test然后再做
SELECT test.to_t_test('text',10) -- OK SELECT test.to_t_test('text',10,'1') -- OK
然后使用默认参数值.但这种方式既不清楚也不舒服.