Snowflake修改QUOTED_IDENTIFIERS_IGNORE_CASE后无法删除列问题求助
Snowflake开启quoted_identifiers_ignore_case后删除列报错的解决思路
问题根本原因
你遇到的报错是quoted_identifiers_ignore_case参数的生效规则限制导致的:
该参数仅对DQL查询请求做大小写兼容处理,ALTER TABLE类的DDL操作不会遵循该规则,默认会将无引号的标识符转为全大写,和表元数据中实际存储的列名大小写做精确匹配。你可以正常查询但无法删列,说明表创建时quoted_identifiers_ignore_case还未开启,列名实际在元数据中存储的是小写col,DDL语句转成大写COL后匹配不到对应列。
可行解决方法
- 先查询确认列名的实际存储格式,执行如下语句:
select column_name from information_schema.columns where table_schema = '替换为你的表所属schema名称' and table_name = 'TBL';
- 临时方案:删列时用双引号包裹和查询结果完全一致的列名即可,例如实际列名是小写
col,执行:
alter table tbl drop column "col";
- 批量DDL适配方案:如果需要批量执行多段DDL操作,可以临时调整会话级配置,避免每次加引号:
-- 按需调整为和列名实际存储一致的大小写规则 alter session set identifier_case = 'LOWERCASE'; -- 调整后直接执行无引号的删列语句即可正常生效 alter table tbl drop column col; -- 操作完成后可按需改回原有配置 alter session set identifier_case = 'DEFAULT';
- 长期迁移适配方案:后续迁移建表前,确保已经开启
quoted_identifiers_ignore_case参数,该场景下创建的所有表标识符元数据会统一存储为大写,无论是否加双引号,后续DQL、DDL操作都无需额外处理大小写匹配问题。
内容的提问来源于stack exchange,提问作者sc123
相关产品推荐
相关产品推荐

