PostgreSQL中能否将关键字用作SELECT列表别名?为何name别名报错?
问题原因及解决方案
这是因为在PostgreSQL中,name是一个内置的系统数据类型(主要用于存储数据库对象名称,比如用户名、表名、角色名等),虽然它不属于SQL标准的保留关键字,但PostgreSQL的查询解析器在处理未加引号的name标识符时,会优先将其识别为这个系统类型,而非你定义的列别名,这就导致了SQL语句解析出错,最终创建视图失败。
而你改用application作为别名时,这个名称只是你自定义的表名,不属于PostgreSQL的系统内置类型或保留关键字,解析器能正确识别它是列别名,语句自然就能正常执行了。
解决办法
如果坚持要使用name作为列别名,只需要给别名加上双引号("name"),明确告诉解析器这是一个自定义标识符,而非系统类型:
CREATE OR REPLACE VIEW application_view AS SELECT COALESCE( nullif(full_name,''), nullif(additional_info,''), app_name) "name", id FROM application ORDER BY COALESCE( nullif(full_name,''), nullif(additional_info,''), app_name)
修改后语句即可正常执行,同时满足你用name作为列别名的需求。
内容的提问来源于stack exchange,提问作者Keith John Hutchison
相关产品推荐
相关产品推荐

