返回首页

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

更新日期:2024年09月11日

参数说明:设置全文检索的配置信息。
如果设置为不存在的文本搜索配置时将会报错。如果default_text_search_config 对应的
文本搜索配置被删除,需要重新设置default_text_search_config,否则会报设置错误。

其被文本搜索函数使用,这些函数并没有一个明确指定的配置。

当与环境相匹配的配置文件确定时,
gs_initdb 会选择一个与环境相对应的设置来初
始化配置文件。

该参数属于USERSET 类型参数,请参考表GUC 参数设置方式中对应设置方法进
行设置。
取值范围:字符串
说明:
GBase 8c 支持pg_catalog.english、pg_catalog.simple 两种配置。
默认值:pg_catalog.english

sqldetach() 函数从数据库服务器脱离进程。通常,当应用程序分叉一个新的进程来开
始新的执行流时,您调用此函数。

语法
mint sqldetach();

用法

如果在应用程序开启至数据库服务器的连接之后,它创建一个或多个进程,则所有子
进程 从父进程(产生了子进程的应用程序进程)继承数据库服务器连接。然而,数据库服
务器仍假定此连接仅有一个进程。如果一个数据库服务器连接试图同时为父进程和子进程
服务时,可导致问题。例如,如果两个进程都发送消息做某事,则数据库服务器无法知道
哪个消息属于哪个进程。数据库服务器可能未按合理的顺序接收消息,因此可能生成错误
(诸如错误 -408)。

自此情况下,
请从子进程调用 sqldetach() 函数。
sqldetach() 函数将子进程从父进程建
立的连接(子进程继承的)脱离。此行动删除子进程中的所有数据库服务器连接。然后,
子进程可建立自己的至数据库服务器的连接。

请随同 fork() 系统调用使用 sqldetach() 函数。当您以数据库服务器连接创建来自应
用程序进程的子进程时,函数调用排序如下:
调用来自父进程的 fork() 来创建父进程的副本(子进程)。现在,父子同时分享至数
据库服务器的相同的连接。
调用来自子进程的 sqldetach(),来将子进程从数据库服务器脱离。此调用关闭子进程
中的连接。

限制:
您不可在 vfork() 调用之后使用 sqldetach(),
因为直到调用 exec() 函数为止,
vfork() 才执行真正的进程分叉。在父进程使用 exec() 之后,请不要使用 sqldetach();当

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 938 -
exec() 启动子进程时,该子进程不继承父进程建立了的连接。

对 sqldetach() 函数的调用不影响父进程的数据库服务器会话。
因此,
在子进程中执行
sqldetach() 之后,父进程保持任何打开的游标、事务或数据库,且子进程不拥有数据库服
务器会话或数据库服务器连接。

当您从父进程调用 sqlexit() 函数时,
该函数删除父进程中的连接,
但不影响子进程中
的连接。
类似地,
当您从子进程调用 sqlexit() 时,
该函数仅删除子连接;
它不影响父连接。
在 sqlexit() 函数关闭连接之前,它回滚任何打开的事务。

如果您从子进程执行 DISCONNECT 语句,则您从数据库服务器断开该进程的连接,
并终止对应于那些连接的数据库会话。如果任何事务是打开的,则 DISCONNECT 失败。


在子进程应用程序调用 sqldetach() 之前,如果它仅有隐式的连接,则执行下一 SQL
语句,或执行下一 sqlstart() 库函数,会重新建立至缺省的数据库服务器的隐式的连接。如
果该应用程序已建立了一个或多个显式的连接,则在您执行任何其他 SQL 语句之前,必
须发出 CONNECT 语句。

sqldetach 演示程序说明如何使用 sqldetach() 函数。

返回代码
0
sqldetach() 调用成功。
<0
sqldetach() 调用不成功。

示例

demo 目录中的 sqldetach.ec 文件包含此样例程序。
/*
* sqldetach.ec *

This program demonstrates how to detach a child process from a parent process using the
ESQL/C sqldetach() library function.

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 939 -
*/

main()
{
EXEC SQL BEGIN DECLARE SECTION;
mint pa;
EXEC SQL END DECLARE SECTION;

printf("SQLDETACH Sample ESQL Program running.\n\n");

printf("Beginning execution of parent process.\n\n");
printf("Connecting to default server...\n");
EXEC SQL connect to default;
chk("CONNECT");
printf("\n");

printf("Creating database 'aa'...\n");
EXEC SQL create database aa;
chk("CREATE DATABASE");
printf("\n");

printf("Creating table 'tab1'...\n");
EXEC SQL create table tab1 (a integer);
chk("CREATE TABLE");
printf("\n");

printf("Inserting 4 rows into 'tab1'...\n");
EXEC SQL insert into tab1 values (1);
chk("INSERT #1");
EXEC SQL insert into tab1 values (2);
chk("INSERT #2");
EXEC SQL insert into tab1 values (3);
chk("INSERT #3");

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 940 -
EXEC SQL insert into tab1 values (4);
chk("INSERT #4");
printf("\n");

printf("Selecting rows from 'tab1' table...\n");
EXEC SQL declare c cursor for select * from tab1;
chk("DECLARE");

EXEC SQL open c;
chk("OPEN");

printf("\nForking child process...\n");
fork_child();

printf("\nFetching row from cursor 'c'...\n");
EXEC SQL fetch c into $pa;
chk("Parent FETCH");
if (sqlca.sqlcode == 0)
printf("Value selected from 'c' = %d.\n", pa);
printf("\n");

printf("Cleaning up...\n");
EXEC SQL close database;
chk("CLOSE DATABASE");
EXEC SQL drop database aa;
chk("DROP DATABASE");
EXEC SQL disconnect all;
chk("DISCONNECT");

printf("\nEnding execution of parent process.\n");
printf("\nSQLDETACH Sample Program over.\n\n");
}


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 941 -
fork_child()
{
mint rc, status, pid;

EXEC SQL BEGIN DECLARE SECTION;
mint cnt, ca;
EXEC SQL END DECLARE SECTION;

pid = fork();
if (pid < 0)
printf("can't fork child.\n");

else if (pid == 0)
{
printf("\n*******************************\n");
printf("* Beginning execution of child process.\n");
rc = sqldetach();
printf("* sqldetach() call returns %d.\n", rc);

/* Verify that the child is not longer using the parent's connection and has not inherited the
parent's connection environment.
*/
printf("* Trying to fetch row from cursor 'c'...\n");
EXEC SQL fetch c into $ca;
chk("* Child FETCH");
if (sqlca.sqlcode == 0)
printf("* Value from 'c' = %d.\n", ca);

/* startup a connection for the child, since
* it doesn't have one.
*/
printf("\n* Establish a connection, since child doesn't have one\n");
printf("* Connecting to database 'aa'...\n");

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 942 -
EXEC SQL connect to 'aa';
chk("* CONNECT");
printf("* \n");
printf("* Determining number of rows in 'tab1'...\n");
EXEC SQL select count(*) into $cnt from tab1;
chk("* SELECT");
if (sqlca.sqlcode == 0)
printf("* Number of entries in 'tab1' = %d.\n", cnt);
printf("* \n");

printf("* Disconnecting from 'aa' database...\n");
EXEC SQL disconnect current;
chk("* DISCONNECT");
printf("* \n");
printf("* Ending execution of child process.\n");
printf("*******************************\n");

exit();
}

/* wait for child process to finish */
while ((rc = wait(&status)) != pid && rc != -1);

}

chk(s)
char *s;
{
mint msglen;
char buf1[200], buf2[200];

if (SQLCODE == 0)
{

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 943 -
printf("%s was successful\n", s);
return;
}
printf("\n%s:\n", s);
if (SQLCODE)
{
printf("\tSQLCODE = %6d: ", SQLCODE);
rgetlmsg(SQLCODE, buf1, sizeof(buf1), &msglen);
sprintf(buf2, buf1, sqlca.sqlerrm);
printf(buf2);
if (sqlca.sqlerrd[1])
{
printf("\tISAM Error = %6hd: ", sqlca.sqlerrd[1]);
rgetlmsg(sqlca.sqlerrd[1], buf1, sizeof(buf1), &msglen);
sprintf(buf2, buf1, sqlca.sqlerrm);
printf(buf2);
}
}
}
输出

SQLDETACH Sample ESQL Program running.
Beginning execution of parent process.

Connecting to default server...
CONNECT was successful

Creating database 'aa'...
CREATE DATABASE was successful

Creating table 'tab1'...
CREATE TABLE was successful


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 944 -
Inserting 4 rows into 'tab1'...
INSERT #1 was successful
INSERT #2 was successful
INSERT #3 was successful
INSERT #4 was successful

Selecting rows from 'tab1' table...
DECLARE was successful
OPEN was successful

Forking child process...

**********************************************
* Beginning execution of child process.
* sqldetach() call returns 0.
* Trying to fetch row from cursor 'c'...

* Child FETCH:
SQLCODE = -404: The cursor or statement is not available.

* Establish a connection, since child doesn't have one
* Connecting to database 'aa'...
* CONNECT was successful
*
* Determining number of rows in 'tab1'...
* SELECT was successful
* Number of entries in 'tab1' = 4.
*
* Disconnecting from 'aa' database...
* DISCONNECT was successful
*
* Ending execution of child process.
**********************************************

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 945 -
SQLDETACH Sample ESQL Program running.

Beginning execution of parent process.

Connecting to default server...
CONNECT was successful

Creating database 'aa'...
CREATE DATABASE was successful

Creating table 'tab1'...

CREATE TABLE was successful

Inserting 4 rows into 'tab1'...
INSERT #1 was successful
INSERT #2 was successful
INSERT #3 was successful
INSERT #4 was successful

Selecting rows from 'tab1' table...
DECLARE was successful
OPEN was successful

Forking child process...

Fetching row from cursor 'c'...
Parent FETCH was successful
Value selected from 'c' = 1.

Cleaning up...
CLOSE DATABASE was successful
DROP DATABASE was successful

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 946 -
DISCONNECT was successful

Ending execution of parent process.

SQLDETACH Sample Program over.

取值:[0|1|2]
默认值:0

GBase 8a MPP Cluster 参数手册
文档版本2022-06-07
南大通用数据技术股份有限公司
58
说明:取值0,1,2。
默认取0。
0 表示使用原有方式创建镜像,同时跨VC 同步主备分片。
1 表示先跨VC 同步主分片,再VC 内同步备分片。
2 表示只跨VC 同步主分片,备分片记录FEVENTLOG。
修改方式:
可使用set 语句修改值也可在配置文件中修改值。
适用于session、
global
范围均可。