title: Use Lowercase Identifiers for Compatibility
impact: MEDIUM
impactDescription: Avoid case-sensitivity bugs with tools, ORMs, and AI assistants
tags: naming, identifiers, case-sensitivity, schema, conventions
使用小写标识符以保证兼容性
PostgreSQL 会将不带引号的标识符折叠为小写。带引号的大小写混合标识符需要永远加引号,并会与可能无法识别它们的工具、ORM 和 AI 助手产生问题。
错误做法(大小写混合的标识符):
-- 带引号的标识符保留大小写,但处处都需要引号CREATETABLE"Users"("userId"bigintPRIMARYKEY,"firstName"text,"lastName"text);-- 必须始终加引号,否则查询失败SELECT"firstName"FROM"Users"WHERE"userId"=1;-- 这样会失败——不加引号时 Users 变成 usersSELECTfirstNameFROMUsers;-- 错误:关系 "users" 不存在正确做法(小写蛇形命名):
-- 不带引号的小写标识符可移植且对工具友好CREATETABLEusers(user_idbigintPRIMARYKEY,first_nametext,last_nametext);-- 无需引号即可工作,所有工具都能识别SELECTfirst_nameFROMusersWHEREuser_id=1;大小写混合标识符的常见来源:
-- ORM 常常生成带引号的驼峰命名——请配置它们使用蛇形命名-- 从其他数据库迁移时可能保留原始大小写-- 某些 GUI 工具默认给标识符加引号——请禁用它-- 如果已被大小写混合命名困住,可以创建视图作为兼容层CREATEVIEWusersASSELECT"userId"ASuser_id,"firstName"ASfirst_nameFROM"Users";参考:标识符和关键字