PostgreSQL数据库中,查询时提示表不存在的解决办法

最近遇到一个奇怪的问题,以前从来没有遇到过,在postgres SCHEMA下执行select * from table1语句时,提示表不存在,而实际这个表确是存在的,只不过是在public SCHEMA下。在public SCHEMA下执行这个sql语句是没有问题的。以前这样的情景都是可以正常访问的。最后经过查阅资料,才解决了这个简单的问题。解决之前需要先了解以下两个概念:
表不存在

CHEMA**(模式)

SCHEMA(模式)在PotgreSQL中是一个很重要的概念,一个SCHEMA可以包含表、视图、索引、数据类型、函数和操作符等。相同的对象名称可以被用于不同的模式中而不会出现冲突。在一个SCHEMA中执行的SQL语句中也可以引用其他SCHEMA内的表、数据类型、脚本函数等。

search_path

search_path是PostgreSQL中的一个环境变量,在执行sql时,如果不指定SCHEMA,数据库会根据search_path里的设定,去逐个SCHEMA查找相关的对象(表、函数、视图等),这也就是为什么我们写SQL里,不指定SCHEMA,也是可以正常执行的。执行下面SQL就可以查询这个环境变量:

show search_path

展示search_path
看上图,我终于找到了错误原因,我使用的数据库的用户名从postgres变为了root,所以使用root连接数据库后,只会检索public下的相关数据,导致提示postgres下的表是不存在的。

解决办法

方法1 修改sql

在原来的SQL中,指定表的SCHEMA。如果表多的话,这种工作量可能比较大

方法2 设置环境变量

使用下面代码,修改当前用户的search_path

alter user root set search_path = "$user", postgres,public;

可以根据自己需要,增加需要搜索的SCHEMA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值