人大金仓V9系统表名字冲突,设置search_path不起作用

MySql迁移人大金仓问题

1.数据及结构迁移后,Navicat能查到表和数据,但是启动程序一直报错table xxx not exists 或者column not exists,

一般都是表名和系统表冲突导致的,Kingbase内置了sys_user,sys_config等表

如果业务表跟它同名的话会冲突,默认是去查系统表了,

Kingbase跟MySQL相比多了一层模式的概念,查询一个表时,如果未指定模式,首先会查询跟账号名称同名的模式,

如果不存在,则根据search_path进行搜索

复制代码
-- 1.未指定模式,先搜索当前用户名相同的模式,如当前账号为test_user,则搜索test_user.sys_user
--   然后根据search_path依次搜索
select * from sys_user

-- 2.直接指定模式查询
select * from 模式.sys_user

2.查看当前search_path

复制代码
show search_path

3.修改数据库的默认search_path

复制代码
-- 修改search_path
ALTER DATABASE 数据库 SET search_path TO "$user", 模式, public, sys, sys_catalog, pg_catalog;

-- 重载当前会话配置
SELECT sys_reload_conf();

-- 断开会话连接后验证
SHOW search_path

4.修改模式后仍然启动报错

一般是由于程序中连接参数指定currentSchema导致的,去除即可

业务程序中不建议指定模式,具体原因如下

当使用?currentSchema=模式名时, 会覆盖search_path的配置,

同时sys_catalog模式是系统的基础模式,存放了数据库的一些元数据,为了保证所有的对象,脚本,视图,存储过程等都能正常运行,

Kingbase的默认策略,当用户指定的模式不包含sys_catalog时,kingbase会默认将sys_catalog添加到搜索的第一位,

所以最终search_path就变成了sys_catalog, 模式名, 我们在数据库层面配置的search_path就不管用了

相关推荐
foolishlee5 分钟前
Neon compute GetPage
数据库
对空六课2 小时前
两个统计平台数据不同:用同一时间窗和事件样本做差异定位
大数据·前端·网络·数据库
wno7047 小时前
postgresSQL压缩版安装与基本命令
数据库·postgresql
聚美智数9 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
瀚高PG实验室9 小时前
瀚高数据库常用系统表查询入门指南(附常用SQL)
数据库·sql·postgresql·瀚高数据库
ben9518chen9 小时前
mysql数据库基本操作
数据库·mysql
2603_9651481110 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
土豆.exe10 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
缓慢更新10 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Web3&Basketball12 小时前
实测Gemini4Argon:ERQA 87%登顶长程任务榜
数据库·python·大模型·多模态·gemini·长上下文·推理优化