CockroachDB库表存在但查询报relation不存在错误如何解决
问题根因
- CockroachDB 作为 PostgreSQL 超集,完全遵循 PostgreSQL 的标识符大小写规则:未使用双引号包裹的标识符会被自动转换为小写,只有用双引号包裹的标识符才会保留原始大小写。
- 你创建
tabDefaultValue表时使用了双引号保留了驼峰大小写格式,因此数据库中实际存储的表名是区分大小写的tabDefaultValue,而你查询时未给表名加双引号,语句被解析为查找全小写的tabdefaultvalue,因此触发不存在的报错。 \dt仅返回sammy表是因为该命令默认只展示当前会话search_path指定schema下的表,你当前默认schema不是_a66df261120b6c23库的public schema,因此看不到目标表。
解决方案
方案1:直接修改查询语句(无需修改表结构)
查询时用双引号包裹表名,保留原始驼峰大小写即可正常执行:
select * from _a66df261120b6c23."tabDefaultValue";
指定schema的更稳妥写法:
select * from _a66df261120b6c23.public."tabDefaultValue";
方案2:重命名表为全小写(长期使用更方便)
执行重命名语句将表名改为全小写,后续查询无需再加双引号:
alter table _a66df261120b6c23.public."tabDefaultValue" rename to tabdefaultvalue;
重命名完成后,你原本的查询语句select * from _a66df261120b6c23.tabDefaultValue;即可正常运行。
修复\dt看不到目标表的问题
先修改当前会话的默认schema指向目标库的public schema,再执行\dt即可展示所有表:
set search_path to _a66df261120b6c23.public; \dt
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

