返回首页

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

更新日期:2024年09月11日

指定字段分隔符
示例
示例中所用的表及数据:
DROP TABLE IF EXISTS cust;
CREATE
TABLE
cust(c_id
INT,
c_name
VARCHAR(20),
c_addr
VARCHAR(100));
INSERT INTO cust VALUES (1, 'xiaoming', 'Tianjin');
INSERT INTO cust VALUES (3, 'qiaorui', 'Hebei');
INSERT INTO cust VALUES (4, 'tianfei', 'Anhui');
INSERT INTO cust VALUES (2, 'zhangling', 'Hunan');
导出SQL 语句,指定字段分隔符为“,”:
gbase>
rmt:SELECT
*
FROM
cust
INTO
OUTFILE
'/home/gbase/temp/cust.txt' FIELDS TERMINATED BY ',';
Query OK, 4 rows affected
查看导出文件:
查看导出文件:
$ cat cust.txt
1,xiaoming,Tianjin
3,qiaorui,Hebei
4,tianfei,Anhui
2,zhangling,Hunan
导出SQL 语句,指定字段分隔符为“;”:
gbase>
rmt:SELECT
*
FROM
cust
INTO
OUTFILE
'/home/gbase/temp/cust.txt' FIELDS TERMINATED BY ';';
Query OK, 4 rows affected
查看导出文件:
$ cat cust.txt
1;xiaoming;Tianjin
3;qiaorui;Hebei
4;tianfei;Anhui
2;zhangling;Hunan

GBase 8s 数据库服务器用于检测硬件或操作系统错误所导致的数据库服务器故障或问题。
它通过在其许多关键功能中执行断言来检测问题。断言是一种一致性检查,验证页、结构
或其他实体与将另外假定的页、结构或其他实体相匹配。
当这些检查中有一个检查发现内容不正确时,数据库服务器将报告断言失败并在数据库服
务器消息日志中写入文本以描述失败的检查。数据库服务器还在另外的文件中收集进一步
的诊断信息,该文件可能对 GBase 8s 技术支持人员有用。
这些主题提供了一致性检查措施以及处理不一致的方法的概述。

向表中插入数据
在创建一个表后,表中并没有数据,在使用这个表之前,需要向表中插入数据。本小节
介绍如何使用INSERT 命令插入一行或多行数据,
及从指定表插入数据。
如果有大量
数据
需要批量导入表中,请参考9 导入数据。
背景信息
服务端与客户端使用不同的字符集时,
两者字符集中单个字符的长度也会不同,
客户端
输入的字符串会以服务端字符集的格式进行处理,
所以产生的最终结果可能会与预期不一致。
表3- 3 客户端和服务端设置字符集的输出结果对比
操作过程
服务端和客户端编码一致
服务端和客户端编码不一致
存入和取出过程中没有对字
符串进行操作
输出预期结果
输出预期结果
(输入与显示的
客户端编码必须一致)。
存入取出过程对字符串有做
一定的操作
(如字符串函数操
作)
输出预期结果
根据对字符串具体操作可能
产生非预期结果。
存入过程中对超长字符串有
截断处理
输出预期结果
字符集中字符编码长度是否
一致,
如果不一致可能会产生
非预期的结果。
上述字符串函数操作和自动截断产生的效果会有叠加效果,
例如:
在客户端与服务端字
符集不一致的场景下,如果既有字符串操作,
又有字符串截断,
在字符串被处理完以后的情
况下继续截断,这样也会产生非预期的效果。详细的示例请参见表3-3。
数据库DBCOMPATIBILITY 设为兼容TD 模式,且td_compatible_truncation 参数设置
为on 的情况下,才会对超长字符串进行截断。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
25
执行如下命令建立示例中需要使用的表table1、table2。
postgres=# CREATE TABLE table1(id int, a char(6), b varchar(6),c varchar(6));
postgres=# CREATE TABLE table2(id int, a char(20), b varchar(20),c varchar(20));
表3- 4 客户端和服务端设置字符集的输出结果对比


服务
端字
符集
客户
端字
符集
是否
启用
自动
截断
示例
结果
说明
1
SQL
_
ASC
II
UTF
8

postgres=#
INSERT
INTO table1
VALUES(1,reverse('1
2 3AA
78'),reverse('123A

78'),reverse('123A
A78'));
id |a|b|c
--+--+--+--
1 | 87| 87| 87
字符串在服务端
翻转后,
并进行截
断,
由于服务端和
客户端的字符集
不一致,字符A
在客户端由多个
字节表示,
结果产
生异常。
2
SQL
_
ASC
II
UTF
8

postgres=#
INSERT
INTO table1
VALUES(2,reverse('1
2 3A
78'),reverse('123
A78'),reverse('123
A78'));
id |a|b|c
--+--+--+--
2
|873|873|873
字符串翻转后,

进行了自动截断,
所以产生了非预
期的效果。
3
SQL
_
ASC
II
UTF
8

postgres=# INSERT
INTO table1
VALUES(3,'87A
123','87A123','87
A123');
id | a | b| c
--+--+--+---
3 | 87A1 | 87
A1 | 87A1
字符串类型的字
段长度是客户端
字符编码长度的
整数倍,
所以截断
后产生结果正常。
4
SQL
_
ASC
II
UTF
8

postgres=#
INSERT
INTO table2
VALUES(1,reverse('1
2 3AA
78'),reverse('123A

78'),reverse('123A
A78'));
postgres=# INSERT
id |a|b|c
---+-+--+--
1 |87|321| 87
321 | 87 321
2 | 87321|
87321| 87321
与示例1 类似,

字节字符翻转之
后不再表示原来
的字符。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
26
INTO table2
VALUES(2,reverse('1
2 3A
78'),reverse('123
A78'),reverse('123
A78'));
操作步骤
向表中插入数据前,意味着表已创建成功。创建表的步骤请参考3.6 创建和管理表。
步骤1 向表customer_t1 中插入一行:数据值是按照这些字段在表中出现的顺序列出的,并
且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
postgres=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name)
VALUES (3769, 'hello', 'Grace');
如果用户已经知道表中字段的顺序,
也可无需列出表中的字段。
例如以下命令上面的命
令效果相同。
postgres=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace');
如果用户不知道所有字段的数值,
可以忽略其中的一些。
没有数值的字段将被填充为字
段的缺省值。例如:
postgres=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769,
'Grace');
postgres=# INSERT INTO customer_t1 VALUES (3769, 'hello');
用户也可以对独立的字段或者整个行明确缺省值:
postgres=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name)
VALUES (3769, 'hello', DEFAULT);
postgres=# INSERT INTO customer_t1 DEFAULT VALUES;
步骤2 如果需要在表中插入多行,请使用以下命令:
postgres=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name)
VALUES (6885, 'maps', 'Joes'), (4321, 'tpcds', 'Lily'), (9527, 'world', 'James');
如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。
但是建议使用此命令可以提升效率。
步骤3 如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1 的备份
表customer_t2,现在需要将表customer_t1 中的数据插入到表customer_t2 中,则可以执行
如下命令。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
27
postgres=# CREATE TABLE customer_t2 (
c_customer_sk
integer,
c_customer_id
char(5),
c_first_name
char(6),
c_last_name
char(8)
);
postgres=# INSERT INTO customer_t2 SELECT * FROM customer_t1;
从指定表插入数据到当前表时,
若指定表与当前表对应的字段数据类型之间不存在隐式
转换,则这两种数据类型必须相同。
步骤4 删除备份表。
postgres=# DROP TABLE customer_t2 CASCADE;
在删除表的时候,若当前需删除的表与其他表有依赖关系,
需先删除关联的表,然后再
删除当前表。