关键字
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语言参考手册》