Mybatis连接Postgres报ERROR: relation "xxx表名" does not exist.解决方法

在mybatis的mapper.xml中写入已经验证后的查询语句时报错如下:

org.postgresql.util.PSQLException: ERROR: relation "xxx_tablename" does not exist

首先,查询语句已经在数据库里查验过了,没有任何问题,数据库中也有这张表,为啥就是一直报这个错误呢?在网上搜了很久,大概的说法如下:
1.pg是需要区分大小写的,这个也对了,没有问题;
2.可能与原本数据库中自带的表冲突了,这个也排除了,表都是自己新建的,并且表名没有冲突;
3.表的键值和其他表存在依赖关系,这个也并没有。
各种说法的帖子都查了,但是并没有卵用。
后来才知道,py库查询时需要在表名前加模式名称,就是这张表属于哪个schema(模式),不然查询时可能找不到表。
到此问题解决,发现相同的错误不一定出于一个原因!

附录:
schema介绍
在数据库中,schema(中文叫模式)是数据库的组织和结构,schemas and schemata都可以作为复数形式。模式中包含了schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。

Schema和DataBase是否等同?
涉及到数据库的模式有很多疑惑,问题经常出现在模式和数据库之间是否有区别,如果有,区别在哪里。

取决于数据库供应商
对schema(模式)产生疑惑的一部分原因是数据库系统倾向于以自己的方式处理模式

(1)MySQL的文档中指出,在物理上,模式与数据库是同义的,所以,模式和数据库是一回事。

(2)但是,Oracle的文档却指出,某些对象可以存储在数据库中,但不能存储在schema中。 因此,模式和数据库不是一回事。

(3)而根据这篇SQL Server技术文章SQLServer technical article,schema是数据库SQL Server内部的一个独立的实体。 所以,他们也不是一回事。

因此,取决于您使用的RDBMS,模式和数据库可能不一样。

你可能感兴趣的:(报错)