问题描述
建表时报错 Too many columns。
建表脚本如下。
创建 SQL 执行脚本。
[root@ob-192-168-2-51]# echo 'create table large_table(id int primary key,' > /tmp/large_table.sql添加 SQL 脚本内容。
[root@ob-192-168-2-51]# for i in `seq 1 4096`;do echo "r$i int,">>/tmp/large_table.sql;done;向 SQL 脚本参数传值。
[root@ob-192-168-2-51]# echo 'r4097 int);'>> /tmp/large_table.sql
MySQL 模式:
在 OBClient 客户端执行 SQL 脚本。
obclient [db_mysql]> \. /tmp/large_table.sql
ERROR 1117 (42000): Too many columns
Oracle 模式:
在 OBClient 客户端执行 SQL 脚本。
obclient [SYS]> \. /tmp/large_table.sql
ORA-00600: internal error code, arguments: -5197, Too many columns
问题原因
OceanBase 表字段个数上限支持 4096 个(不包括主键)。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。
解决方法
减少表字段数量。
创建 SQL 执行脚本。
[root@xxx]# echo 'create table large_table(id int primary key,' > /tmp/large_table1.sql添加 SQL 脚本内容。
[root@xxx]# for i in `seq 1 4095`;do echo "r$i int,">>/tmp/large_table1.sql;done;向 SQL 脚本参数传值。
[root@xxx]# echo 'r4096 int);'>> /tmp/large_table1.sql
MySQL 模式:
在 OBClient 客户端执行 SQL 脚本。
obclient > \. /tmp/large_table1.sql
Query OK, 0 rows affected (4.248 sec)
Oracle 模式:
在 OBClient 客户端执行 SQL 脚本。
obclient > \. /tmp/large_table1.sql
Query OK, 0 rows affected (3.212 sec)
多余的字段专门新建一张表。
obclient > create table large_table2(id int primary key, r4097 int);
Query OK, 0 rows affected (3.202 sec)
应用端修改之前的 DML 代码即可。