diff --git a/frontend/src/utils/sql.ts b/frontend/src/utils/sql.ts index 6a20d57d..332e6565 100644 --- a/frontend/src/utils/sql.ts +++ b/frontend/src/utils/sql.ts @@ -23,6 +23,8 @@ const needsQuote = (ident: string): boolean => { if (!ident) return false; // 如果包含特殊字符(非字母、数字、下划线)则需要引号 if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(ident)) return true; + // PostgreSQL 会将未加引号的标识符折叠为小写,含大写字母时必须加引号 + if (/[A-Z]/.test(ident)) return true; // 常见 SQL 保留字列表(简化版) const reserved = ['select', 'from', 'where', 'table', 'index', 'user', 'order', 'group', 'by', 'limit', 'offset', 'and', 'or', 'not', 'null', 'true', 'false', 'key', 'primary', 'foreign', 'references', 'default', 'constraint', 'create', 'drop', 'alter', 'insert', 'update', 'delete', 'set', 'values', 'into', 'join', 'left', 'right', 'inner', 'outer', 'on', 'as', 'is', 'in', 'like', 'between', 'case', 'when', 'then', 'else', 'end', 'having', 'distinct', 'all', 'any', 'exists', 'union', 'except', 'intersect']; return reserved.includes(ident.toLowerCase());