返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

CREATE TABLE 语句建表时指定全文索引列
语法格式
在用户创建表时,可以同时创建全文索引,
需要使用FULLTEXT 关键字进行创建。
CREATE TABLE table_name (
column defination… ,
fulltext [index] index_name (column_name)
[INDEX_DATA_PATH='path']);
表5- 34 参数说明

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
913
参数名称


table_name
表名。
index_name
索引名(索引名表级唯一,索引名将不区分大小写)。
column_name
索引列列名,支持CHAR、VARCHAR 或TEXT 类型。
INDEX_DATA_PATH
可选项,设置索引数据路径标志。如不填写,则索引数据保存





$GBASE_BASE/userdata/gbase/dbname/metadata/tbname_n*.GED
下: *.FTD、*.fti
path
索引数据存放路径,此路径应为实际已存在的路径。
注意
执行用户需要对path 指定的存放索引数据的目录具有读写权限。
示例
示例1:不指定索引数据存放路径时,存放在默认路径中。
gbase> DROP TABLE IF EXISTS sms;
Query OK, 0 rows affected
gbase> CREATE TABLE sms (MB_No char(11),MB_Text varchar(1000)
DEFAULT NULL, FULLTEXT idx_t (MB_Text));
Query OK, 0 rows affected
示例2:为索引数据指定存放路径。步骤如下(以使用gbase 用户登录数据库为
例)。
步骤1:
gbase 用户对存放索引数据的目录有读写权限,
可以使用root 用户执行如
下命令为gbase 用户赋权:
# chown gbase:gbase /home
步骤2:在每个节点上都要创建存放索引数据的文件夹。
# su - gbase
$ mkdir -p /home/fti
步骤3:将索引数据存放在/home/fti/路径下。
gbase> CREATE TABLE text1 (col1 varchar(100), FULLTEXT INDEX
fti_col1 (col1) INDEX_DATA_PATH='/home/fti/');
Query OK, 0 rows affected

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
914
示例3:指定的索引数据路径不存在,系统报告错误信息。
gbase> CREATE TABLE text1 (col1 varchar(100), FULLTEXT INDEX
fti_col1 (col1) INDEX_DATA_PATH='/index/dat/');
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Empty or invalid
index path

PG_DATABASE 系统表存储关于可用数据库的信息。
名称
类型
描述
oid
oid
行标识符(隐含属性,必须明确选择)。
datname
name
数据库名称。
datdba
oid
数据库所有人,通常为其创建者。
encoding
integer
数据库的字符编码方式。
datcollate
name
数据库使用的排序顺序。
datctype
name
数据库使用的字符分类。
datistemplate
Boolean
是否允许作为模板数据库。
datallowconn
Boolean
如果为假,则没有用户可以连接到这个数据库。这
个字段用于保护template0 数据库不被更改。
datconnlimit
integer
该数据库上允许的最大并发连接数,
-1 表示无限制。
datlastsysoid
oid
数据库里最后一个系统OID 。
datfrozenxid
xid32
用于跟踪该数据库是否需要为了防止事务ID 重叠
而进行清理。当前版本该字段已经废弃使用,为保
持前向兼容,保留此字段,新增datfrozenxid64 用
于记录此信息。
dattablespace
oid
数据库的缺省表空间。
datcompatibility
name
数据库兼容模式,当前支持四种兼容模式:A、B、
C、PG,分别表示兼容O、MY、TD 和POSTGRE
S。
datacl
aclitem[]
访问权限。
datfrozenxid64
xid
用于跟踪该数据库是否需要为了防止事务ID 重叠
而进行清理。
datminmxid
xid
该数据库中中所有在这个之前的多事务ID 已经被
一个事务ID 替换。这用于跟踪该数据库是否需要

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
780
名称
类型
描述
为了防止事务ID 重叠或者允许收缩pg_clog 而进行
清理。它是此数据库中所有表的pg_class.relminmxi
d 中的最小值。

本节中的例子会使用一个带有BLOB 列的表,
使用下面的语句生成file 表。
file_id:表主键,file_name:存储的文件名,file_size:存储文件的大小,
file:存储文件内容。
CREATE TABLE file (
file_id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
file_name VARCHAR(64) NOT NULL,
file_size MEDIUMINT UNSIGNED NOT NULL,
file MEDIUMBLOB NOT NULL );
下面的代码使用FileStream 对象打开一个文件,
把文件内容读到一个字节
数组中,并且把它插入到file 表中。
C# 示例:
using System;
using System.IO;
using GBase.Data.GBaseClient;

namespace UsingGBase
{
class Program



GBase 8a 程序员手册ADO.NET 篇
南大通用数据技术股份有限公司

- 35 -
{
static void Main(string[] args)
{
GBaseConnection conn = new GBaseConnection();
GBaseCommand cmd = new GBaseCommand();

string SQL;
int FileSize;
byte[] rawData;
FileStream fs;
string strFileName = @"c:\newfile.png";
conn.ConnectionString =
"server=192.168.5.41;database=test;user
id=root;password=1;pooling=false";

try
{
fs
=
new
FileStream(@"c:\test.bmp",
FileMode.Open,
FileAccess.Read);
FileSize = (int)fs.Length;

rawData = new byte[FileSize];
fs.Read(rawData, 0, FileSize);
fs.Close();

conn.Open();
SQL = "INSERT INTO file VALUES(NULL, @FileName,
@FileSize, @File)";

cmd.Connection = conn;
cmd.CommandText = SQL;
cmd.Parameters.AddWithValue("@FileName",
strFileName);
cmd.Parameters.AddWithValue("@FileSize",
FileSize);
cmd.Parameters.AddWithValue("@File", rawData);


GBase 8a 程序员手册ADO.NET 篇


- 36 -

南大通用数据技术股份有限公司
cmd.ExecuteNonQuery();

Console.WriteLine("File Inserted into database
successfully!");

conn.Close();
}
catch (GBaseException ex)
{
Console.WriteLine("Error " + ex.Number + " has
occurred: " + ex.Message);
}
}
}
}
注意:
创建表完成后,
需要确定GBase 数据库系统变量max_allowed_packet
的值,该变量决定能发送给GBase 服务器的数据包(比如一行)大小。修改
max_allowed_packet 时需注意BLOB 数据在网络上传输时需要一些时间,
应尽量
把该值设为与实际需要相符,并在必要时设置更大值。
要将一个文件写到数据库需要将文件转换为一个字节数组,然后将该字节
数组作为一个INSERT 语句的参数,通过GBase ADO.NET 将值写入到表中。