数据库迁移到人大金仓数据库后,查询sys_user表报错的解决方法(考虑原因是优先查询系统的用户表冲突了)
人大金仓系统的用户表也叫 sys_user,与应用程序的用户表同名了。报错的SQL是因为查询了人大金仓系统的用户表,所以报错字段不存在。主要就是和系统表冲突了!
解决方法一:设置查询顺序,先查询指定模式中的 sys_user表。(如下)
在数据库中设置 search_path,保证查询sys_user表时,系统模式优先级最低。
alter database 数据库名 set search_path=\"$user\",模式名,public,sys,sys_catalog;select sys_reload_conf(); //让上述生效
示例说明:
假设你有一个名为 testdb
的数据库,并且有一个自定义模式 my_schema
,那么可以使用以下语句设置搜索路径:
ALTER DATABASE testdb SET search_path=\"$user\",my_schema,public,sys,sys_catalog;select sys_reload_conf();
此语句会让数据库 testdb
在查找对象时,先在当前用户同名的模式中查找,接着在 my_schema
模式中查找,然后是 public
模式,最后在系统模式 sys
和 sys_catalog
中查找。
解决方法二:直接设置普通用户忽略系统表。system登录数据库,执行:
alter system set search_path = \"$USER\", PUBLIC,SYS_CATALOG;select sys_reload_conf(); #让上诉命令生效