You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL函数处理varchar类型城市名时报错求助

问题解决:调用PostgreSQL函数时城市名字符串参数报错

错误根源

你调用函数时写的SELECT public.country_by_city(Abha);里,Abha没有用单引号包裹,PostgreSQL会把它当作列名标识符,而不是字符串常量,所以才会抛出ERROR: column "abha" does not exist的错误。这和UPPER()/INITCAP()无关——因为参数根本没被当成字符串处理。

正确调用方式

必须用单引号把城市名字符串括起来,明确告诉PostgreSQL这是字符串常量:

SELECT public.country_by_city('Abha');

为什么用city_id能正常工作?

当你用city_id作为查询条件时,传入的是数字值(比如SELECT public.country_by_city(123);),数字类型的常量不需要引号,PostgreSQL能直接识别为数值,所以不会触发标识符解析的错误。

额外优化:大小写不敏感匹配

如果想让函数支持忽略大小写的匹配(比如输入abha、ABHA都能找到结果),可以在函数里统一转换大小写:

CREATE OR REPLACE FUNCTION public.country_by_city(city varchar, OUT Country varchar)  
RETURNS varchar  
LANGUAGE SQL AS 
$function$   
    SELECT c.country      
    FROM country c   
    JOIN city c2 ON c2.country_id = c.country_id      
    WHERE UPPER(c2.city) = UPPER($1)
$function$ 
;

调用时依然要记得用单引号包裹字符串参数,比如SELECT public.country_by_city('abha');。

内容的提问来源于stack exchange,提问作者lowercase male

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:57:43