当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/103799.html

相关文章:

  • 视频传输网安全防护体系
  • C# Blazor 学习笔记(1):Blazor基础语法,组件化和生命周期
  • flutter 导出iOS问题2
  • syn报文什么时候会被丢弃?
  • 【C++】开源:Linux端V4L2视频设备库
  • 基于数据驱动的多尺度表示的信号去噪统计方法研究(Matlab代码实现)
  • 【Golang】Golang进阶系列教程--Go 语言 map 如何顺序读取?
  • 伊语IM即时通讯源码/im商城系统/纯源码IM通讯系统安卓+IOS前端纯原生源码
  • C++推理
  • Day10-作业(SpringBootWeb案例)
  • 源码阅读:p-limit
  • 目标检测-击穿黑夜的PE-YOLO
  • 优化性能压力测试的关键策略和技巧
  • VMware Linux 可视化增加磁盘
  • 从 axios 源码学习设计模式
  • 输出不同程序执行的时间
  • HDU 6391 组合数学 + DP
  • StopWatch与ThreadLocal
  • 20. 有效的括号
  • 微信小程序原生写法传递参数
  • JavaWeb+jsp+Tomcat的教务查询系统
  • C# FTP下载 采用Ssh.Net方式
  • 【C++】做一个飞机空战小游戏(三)——模块化程序设计
  • Django使用WebSocket
  • 看完这篇 教你玩转渗透测试靶机Vulnhub——HarryPotter:Nagini
  • IPO要收紧?业内人士未予以完全确认
  • stable difussion Pytorch实现与测试
  • Redis简述
  • Redis 操作List
  • 多个List 合并变成一个List+一个List 根据某个字段相等的另一个字段相加,并排序变成新的List