【Mycat操作之创建视图报错】

在使用Mycat操作时遇到创建视图的错误:'op table not in schema----VIEW'。错误源于RouterUtil的getTableName解析失败。提出两种解决方案:修改RouterUtil的routeToDDLNode方法或在Debug模式下执行Change Value操作。通过配置dataNode并确保与rule函数分区大小一致,解决了问题。实验结果显示,当dataNode数量与rule函数分区大小相等时,创建视图成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、出现如下错误

2017-02-27 19:58:41,765 [WARN ][$_NIOREACTOR-2-RW] ServerConnection [id=4, schema=TESTDB, host=127.0.0.1, user=root,txIsolation=3, autocommit=true, schema=TESTDB]create view v_address as select address from t_gaojs err:java.sql.SQLSyntaxErrorException: op table not in schema----VIEW java.sql.SQLSyntaxErrorException: op table not in schema----VIEW

at io.mycat.route.util.RouterUtil.routeToDDLNode(RouterUtil.java:221)

at io.mycat.route.impl.AbstractRouteStrategy.route(AbstractRouteStrategy.java:70)

at io.mycat.route.RouteService.route(RouteService.java:133)

at io.mycat.server.ServerConnection.routeEndExecuteSQL(ServerConnection.java:276)

at io.mycat.server.ServerConnection.execute(ServerConnection.java:222)

at io.mycat.server.ServerQueryHandler.query(ServerQueryHandler.java:136)

很明显是说View在Schema中没有配置,把View当做表名字了,看看我来Debug一番


 

看看如何获取表名字的



 找到错误根源了RouterUtil中的getTableName解析失败,想修改

方案一:RouterUtil中的routeToDDLNode增加Create View分支进行判断

方案二:Debug模式执行Change Value操作



 那就change Value绕过错误,



 

那就配置吧,故意配错dataNode,来尝尝后果

<table name="t_gaojs" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

<table name="V_ADDRESS" dataNode="dn1" rule="auto-sharding-long" />

 

Caused by: io.mycat.config.util.ConfigException: Illegal table conf : table [ V_ADDRESS ] rule function [ rang-long ] partition size : 3 > table datanode size : 1, please make sure table datanode size = function partition size

我也不知道为何此处是3,很明显rang-long我没有配置数字3,有待深究

 那就保持一致,看看能否OK,实验结果是OK的

<table name="t_gaojs" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

<table name="V_ADDRESS" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值