暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

自动创建表空间目录解决了人大金仓数据库KingbaseES创建表空间需要提前创建对应的表空间目录否则会创建失败的问题

原创 数据猿 2024-03-07
759

关键字

KingbaseES、自动创建表空间目录、人大金仓

问题描述

创建表空间,需提前创建对应的表空间目录,否则会创建失败。

问题分析

历史版本中,用户创建表空间,需要提前创建对应的目录,否则创建表空间失败,为了方便用户使用,创建表空间时,若指定的位置不存在,则自动创建对应的表空间目录。

解决方案

1.创建表空间时,若指定的目录不存在,则自动创建。

1)指定的路径需是一个绝对路径。

2)指定的路径不能在data目录下。

3)所指定的路径位置不能有其他表空间。

4)权限:必须为超级用户才能创建表空间。

5)目录属主:创建表空间所指定的目录中已存在的目录需由KingbaseES的操作系统用户拥有。

2.能否自动创建表空间目录受参数auto_createtblspcdir控制,默认开启(on)。若auto_createtblspcdir设置为on,当创建表空间时,若目录不存在,则自动创建,但指定目录中已存在的目录需由KingbaseES的操作系统用户拥有;若auto_createtblspcdir为off时,该目录如果存在(CREATE TABLESPACE 指定的目录不存在则会报错),应该为空并且必须由KingbaseES的操作系统用户拥有。该目录必须用一个绝对路径指定。

3.为解决该问题,用户创建表空间时,若指定的位置不存在,则自动创建对应的表空间目录,特此开发了自动创建表空间目录的特性。

――创建表空间指定的目录存在

\! mkdir -p test/test1/test2/mysp1

create tablespace mysp1 location '/home/zhangjing/dailybuild0904/bin/test/test1/test2/mysp1';

drop tablespace mysp1;

\! rm -rf test

――创建表空间指定的目录存在一部分

\! mkdir -p test/test1

create tablespace mysp1 location '/home/zhangjing/dailybuild0904/bin/test/test1/test2/test3/mysp1';

drop tablespace mysp1;

\! rm -rf test

――创建表空间指定的目录不存在

create tablespace mysp1 location '/home/zhangjing/dailybuild0904/bin/test/test1/test2/test3/test4/test5/test6/test7/mysp1';

――自动创建表空间目录,文件夹名大小写混合,在该表空间中创建数据对象例如表

create tablespace mysp1 location '/home/zhangjing/dailybuild0904/bin/test/test1/test2/TEst3';

create table cc(id int,name varchar(50)) tablespace mysp1;

insert into cc values(1,'xiaozhang'),(2,'xiaozhao'),(3,'xiaohong');

select * from cc;

参考资料

《KingbaseES SQL语言参考手册》

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论