使用动态自定义字段类型字段进行查询

Query with a dynamic custom field type field

自定义字段类型参数应该是动态的我的代码如下所示:

create or replace function somefunc(ip_address varchar, ip_type varchar) 
returns table(fielda varchar, 
    fieldb varchar,  
language plpgsql  
as $$   
begin   
   return query   
    execute format('select fielda, 
    fieldb, 
   
    from
   ips   
    join
   names on id = other_id
    where    
 iprange >>= ip_address::%s', ip_type); 
end;    
$$ 

如您所见,我尝试使用格式,但它认为 ip_address 是一列。

format 应该是 %s(简单字符串)而不是 %I(标识符)

这是一个演示,将字母 a1 和自定义演员表连接起来:

create or replace function somefunc(ip_type varchar) 
returns setof text  
language plpgsql  
as $$   
begin   
   return query   
    execute format('select ''a''||1::%s', ip_type); 
end;    
$$; 

select somefunc('text');
 somefunc
----------
 a1
(1 row)

select somefunc('bool');
 somefunc
----------
 atrue
(1 row)

并在您的原始函数中:

create or replace function somefunc(ip_address varchar, ip_type varchar) 
returns table(fielda varchar, 
    fieldb varchar,  
language plpgsql  
as $$   
begin   
   return query   
    execute format('select fielda, 
    fieldb 
    from
   ips   
    join
   names on id = other_id
    where    
 iprange >>= ip_address::%s', ip_type); 
end;    
$$