> 技术文档 > 数据库迁移到人大金仓数据库后,查询sys_user表报错的解决方法(考虑原因是优先查询系统的用户表冲突了)

数据库迁移到人大金仓数据库后,查询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(); #让上诉命令生效