返回首页

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

更新日期:2024年09月11日


GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
622
(2 rows)
示例4:
TD 模式下,
coalesce 参数输入int 和varchar 类型,
那么解析成varchar 类型。
A 模
式下会报错。
--在A 模式下,创建A 兼容模式的数据库a_1。
gbase=#CREATE DATABASE a_1 dbcompatibility = 'A';
--切换数据库为a_1。gbase=#\c a_1
--创建表t1。
a_1=# CREATE TABLE t1(a int, b varchar(10));
--查看coalesce 参数输入int 和varchar 类型的查询语句的执行计划。a_1=# EXPLAIN
SELECT coalesce(a, b) FROM t1;
ERROR: COALESCE types integer and character varying cannot be matched LINE 1:
EXPLAIN SELECT coalesce(a, b) FROM t1;
^
CONTEXT: referenced column: coalesce
--删除表。
a_1=# DROP TABLE t1;
--切换数据库为gbase。a_1=# \c gbase
--在TD 模式下,创建TD 兼容模式的数据库td_1。gbase=#CREATE DATABASE td_1
dbcompatibility = 'C';
--切换数据库为td_1。gbase=#\c td_1
--创建表t2。
td_1=# CREATE TABLE t2(a int, b varchar(10));
--查看coalesce 参数输入int 和varchar 类型的查询语句的执行计划。td_1=# EXPLAIN
VERBOSE select coalesce(a, b) from t2;
QUERY PLAN
-----------------------------------------------------------------------------
----------
Data Node Scan (cost=0.00..0.00 rows=0 width=0) Output:
(COALESCE((t2.a)::character varying, t2.b)) Node/s: All dbnodes
Remote query: SELECT COALESCE(a::character varying, b) AS "coalesce" FROM
public.t2 (4 rows)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
623
--删除表。
td_1=# DROP TABLE t2;
--切换数据库为gbase。td_1=# \c gbase
--删除A 和TD 模式的数据库。gbase=#DROP DATABASE a_1; gbase=#DROP DATABASE td_1;
示例5:ORA 模式下,将整个表达式最终的返回值类型定为result1 的数据类型,或者与
result1 同类型范畴的更高精度的数据类型。
--在ORA 模式下,创建ORA 兼容模式的数据库ora_1。
gbase=#CREATE DATABASE ora_1 dbcompatibility = 'A';
--切换数据库为ora_1。gbase=#\c ora_1
--开启Decode 兼容性参数。
set sql_beta_feature='a_style_coerce';
--创建表t1。
ora_1=# CREATE TABLE t1(c_int int, c_float8 float8, c_char char(10), c_text text,
c_date date);
--插入数据。
ora_1=# INSERT INTO t1 VALUES(1, 2, '3', '4', date '12-10-2010');
--result1 类型为char,defresult 类型为text,text 精度更高,返回值的类型由char
更新为text。ora_1=# SELECT decode(1, 2, c_char, c_text) AS result,
pg_typeof(result) FROM t1;
result | pg_typeof
--------+-----------
4
| text (1 row)
--result1 类型为int,属于数值类型范畴,返回值的类型置为numeric。
ora_1=# SELECT decode(1, 2, c_int, c_float8) AS result, pg_typeof(result) FROM
t1; result | pg_typeof
--------+-----------
2 | numeric
(1 row)
--不存在defresult 数据类型向result1 数据类型之间的隐式转换,报错处理。ora_1=#
SELECT decode(1, 2, c_int, c_date) FROM t1;

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
624
ERROR: CASE types integer and timestamp without time zone cannot be matched LINE
1: SELECT decode(1, 2, c_int, c_date) FROM t1;
^
CONTEXT: referenced column: c_date
--关闭Decode 兼容性参数。set sql_beta_feature='none';
--删除表。
ora_1=# DROP TABLE t1;
DROP TABLE
--切换数据库为postgres。ora_1=# \c postgres
--删除ORA 模式的数据库。
gbase=#DROP DATABASE ora_1; DROP DATABASE

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
625
8
全文检索

列中当被修改的页达到多少百分比时不再强制清除页。
在有些环境下,页清除程序可以在超过特定百分比时继续清除。
如果启用 AUTO_LRU_TUNING 环境变量,则这个值根据需要自动地更
新。
lrus
缺省是 8。如果启用 MULTIPROCESSOR 配置参数,则缺省大于 8 或
CPU VP 的数目。
number_lrus 值是一个正整数,指定缓冲池中 LRU(最近最少使用)
队列的数目。
取值范围依赖于操作系统的位大小:
 32-bit 平台:8 - 128
 64-bit 平台:8 - 512
指定 LRU 队列越多,就有越多页清除程序并行工作。然而,设置
lrus 域的值过高,可能导致过度的页清除程序活动。
lrus 域的值与 lru_min_dirty 和 lru_max_dirty 域组合在一起,
控制共享内存缓冲区清空到磁盘的频率。
要了解更多信息,请参阅 BUFFERPOOL 及其对页清除的影响。
max_extend
缺省是 8。
extends 表示数据库服务器可扩展缓冲池的最大次数。extends 的
值时从 0 到段的最大数目,依赖于操作系统和位大小:
 32 bit = 16
 UNIX 64 bit = 24
 Windows 64 bit = 8
只有设置 buffers 和 extendable=1,max_extend 域才有效。
memory
缺省是 auto。
max_size 表示缓冲池大小的最大值。max_size 取值范围是:
 一个表示 32
MB
-
4
TB 的整数。您可指定 KB、MB 或 GB 的
大小单位。如果您不指定单位,则缺省单位是 KB。
 auto = 数据库服务器决定分配给缓冲池的共享内存的最大
数量。如果设置,AUTO_TUNE_SERVER_SIZE 配置参数的值
控制缓冲池大小的最大值。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 46 -


next_extend
缺省是 1000。
number_buffers 值是一个大于等于 1000 的整数,指定数据库服务
器用于扩展缓冲池的共享内存缓冲区数目。number_buffers 的最大
值受虚拟共享内存数量的限制。
每四次扩展,number_buffers 值翻倍。
只有设置 buffers 和 extendable=1,next_extend 域才有效。
size
page_size 值指定缓冲区的页大小,
以 KB 为单位。
页大小必须是 2
-
16
KB 且必须是缺省页大小的倍数。
例如,
如果缺省页大小是 2
KB,
则页大小可是 2、4、6、8、10、12、14 或 16。如果缺省页大小是
4 KB,则页大小可是 4、8、12 或 16。缺省值依赖于系统缺省页大
小:
 2 KB 缺省页大小:size=2k
 4 KB 缺省页大小:size=4k
k 是可选的。
start_memory
缺省是 32 MB。
start_size 值表示当数据库服务器启动时缓冲池的初始大小:
 一个表示 32
MB 直到可用共享内存的最大数量的整数。
您可
指定大小单位 KB、MB 或 GB。如果不指定单位,则缺省单
位是 KB。缓冲池的初始大小可以大于 start_size 的值,
因为该大小必须是共享内存段大小的倍数。
 auto = 数据库服务器决定分配给缓冲池的共享内存的初始
数量。
如果您不设置 start_memory 域,则缓冲池的初始大小等于 memory
域的值。
只有设置 memory 域,start_memory 域才有效。
内存格式的缓冲池的大小
如果您使用内存格式,则缺省状态下,缓冲池大小根据需要增长。当平均高速缓存读命中
率低于阈值时,共享内存段添加到缓冲池。您可设置缓冲池的初始大小和大小的最大值,
或允许数据库服务器最优的大小。
如果 extendable 域设置为零,
则缓冲池不增长。
如果设置,
则大小等于 start_memory 域
的值,否则,等于 memory 域的值。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 47 -
当您重启服务器时,缓冲池的大小重置为 start_memory 域的值。
缓冲区格式的缓冲池大小
如果您使用 buffers 格式,则缺省情况下,缓冲池大小不增长。大小等于 buffers 域的
值。
如果您设置 extendable 域为 1,则当平均高速缓存读命中率低于阈值时,共享内存段添
加到缓冲池。您必须在 buffers 域中设置缓冲区的初始数目。您可选择通过设置缓冲区的
数目来扩展缓冲池,以及缓冲池可扩展的最大次数,以及高速缓存命中率。每四次扩展,
添加到缓冲池的缓冲区数目翻倍。
示例:添加一个带 memory 域的 BUFFERPOOL 条目
下列条目创建一个有 10 KB 页大小的缓冲池:
BUFFERPOOL size=10k,start_memory=auto,memory=4gb
缓冲池可扩展到 4 GB。数据库服务器决定缓冲池的初始大小和扩展到缓冲池的大小。
示例:添加一个带有 buffers 域的 BUFFERPOOL 条目
下列条目创建一个有 2 KB 页大小的缓冲池:
BUFFERPOOL
size=2k,extendable=1,buffers=1000,next_buffers=2000,max_extends=8
缓冲池可扩展八次。缓冲池启动时有 1000 个缓冲区。最初三个缓冲池扩展添加 2000 个
缓冲区。第四次到第七次扩展添加 4000 个缓冲区。第八次扩展添加 8000 个缓冲区。
示例:通过添加一个带有不同页大小的 dbspace 来添加一个 BUFFERPOOL 条目
当您用 onspaces 实用程序添加一个带有不同页大小的 dbspace 时,或者当您用
onparams 实用程序添加一个缓冲池时,
在 onconfig 文件中添加一个 BUFFERPOOL 配置参
数条目。下列示例显示一个第三条目:
BUFFERPOOL default,buffers=10000,lrus=8,lru_min_dirty=50.00,lru_max_dirty=60.50
BUFFERPOOL
size=2k,buffers=10000,lrus=8,lru_min_dirty=50,lru_max_dirty=60
BUFFERPOOL size=6k
当您创建一个非缺省页大小的 dbspace 时,如果现有的 BUFFERPOOL 条目存在,则数据库
服务器使用那个条目的页大小。否则,数据库服务器使用来自 BUFFERPOOL 缺省行的值。

GCIStmtPrepare
函数原型:
sword
GCIStmtPrepare(
GCIStmt *stmtp,
GCIError *errhp,
GCIText *stmt,
ub4 stmt_len,
ub4 language,
ub4 mode
);
功能描述:
准备一条SQL 语句,以便随后调用GCIStmtExecute 来执行
参数说明:
stmtp(输入)
用来准备执行的语句句柄
errhp(输入)
错误信息句柄,该接口调用失败时,将错误码和错误信息写入该句柄
stmt(输入)
准备执行的SQL 语句
stmt_len(输入)
准备执行的SQL 语句的长度
language(输入)
保留参数,目前不使用(仅用于和Oracle 保持兼容)
mode(输入)
准备模式,取值如下:
GCI_DEFAULT:缺省模式
GCI_THREADED:多线程模式
返回值:
如果执行成功,则返回GCI_SUCCESS,否则返回GCI_ERROR。
注释:



在调用该函数成功准备一条SQL 以后,可以多次调用GCIStmtExecute 执行这条SQL 语
句。如果在调用该函数执行以后,对SQL 上的参数或结果集进行了绑定操作,那么,只有
在下一次调用该函数以后这些绑定信息才会解除。
SQL 语句的格式既可以是单条的SQL 语句
也可以是多条SQL 组合成的一条语句。