diff --git a/docs/examples/c/tmq.c b/docs/examples/c/tmq.c new file mode 100644 index 0000000000..15ab4fcfc9 --- /dev/null +++ b/docs/examples/c/tmq.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include "taos.h" + +static int running = 1; +const char* topic_name = "topicname"; + +static int32_t msg_process(TAOS_RES* msg) { + char buf[1024]; + int32_t rows = 0; + + const char* topicName = tmq_get_topic_name(msg); + const char* dbName = tmq_get_db_name(msg); + int32_t vgroupId = tmq_get_vgroup_id(msg); + + printf("topic: %s\n", topicName); + printf("db: %s\n", dbName); + printf("vgroup id: %d\n", vgroupId); + + while (1) { + TAOS_ROW row = taos_fetch_row(msg); + if (row == NULL) break; + + TAOS_FIELD* fields = taos_fetch_fields(msg); + int32_t numOfFields = taos_field_count(msg); + // int32_t* length = taos_fetch_lengths(msg); + int32_t precision = taos_result_precision(msg); + rows++; + taos_print_row(buf, row, fields, numOfFields); + printf("precision: %d, row content: %s\n", precision, buf); + } + + return rows; +} + +static int32_t init_env() { + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + TAOS_RES* pRes; + // drop database if exists + printf("create database\n"); + pRes = taos_query(pConn, "drop topic topicname"); + if (taos_errno(pRes) != 0) { + printf("error in drop topicname, reason:%s\n", taos_errstr(pRes)); + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "drop database if exists tmqdb"); + if (taos_errno(pRes) != 0) { + printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes)); + } + taos_free_result(pRes); + + // create database + pRes = taos_query(pConn, "create database tmqdb precision 'ns' WAL_RETENTION_PERIOD 3600"); + if (taos_errno(pRes) != 0) { + printf("error in create tmqdb, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // create super table + printf("create super table\n"); + pRes = taos_query( + pConn, "create table tmqdb.stb (ts timestamp, c1 int, c2 float, c3 varchar(16)) tags(t1 int, t3 varchar(16))"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table stb, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // create sub tables + printf("create sub tables\n"); + pRes = taos_query(pConn, "create table tmqdb.ctb0 using tmqdb.stb tags(0, 'subtable0')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb1 using tmqdb.stb tags(1, 'subtable1')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb1, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb2 using tmqdb.stb tags(2, 'subtable2')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb2, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb3 using tmqdb.stb tags(3, 'subtable3')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb3, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // insert data + printf("insert data into sub tables\n"); + pRes = taos_query(pConn, "insert into tmqdb.ctb0 values(now, 0, 0, 'a0')(now+1s, 0, 0, 'a00')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb1 values(now, 1, 1, 'a1')(now+1s, 11, 11, 'a11')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb2 values(now, 2, 2, 'a1')(now+1s, 22, 22, 'a22')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb3 values(now, 3, 3, 'a1')(now+1s, 33, 33, 'a33')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + taos_close(pConn); + return 0; + +END: + taos_free_result(pRes); + taos_close(pConn); + return -1; +} + +int32_t create_topic() { + printf("create topic\n"); + TAOS_RES* pRes; + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + pRes = taos_query(pConn, "use tmqdb"); + if (taos_errno(pRes) != 0) { + printf("error in use tmqdb, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create topic topicname as select ts, c1, c2, c3, tbname from tmqdb.stb where c1 > 1"); + if (taos_errno(pRes) != 0) { + printf("failed to create topic topicname, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + taos_close(pConn); + return 0; +} + +void tmq_commit_cb_print(tmq_t* tmq, int32_t code, void* param) { + printf("tmq_commit_cb_print() code: %d, tmq: %p, param: %p\n", code, tmq, param); +} + +tmq_t* build_consumer() { + tmq_conf_res_t code; + tmq_t* tmq = NULL; + + tmq_conf_t* conf = tmq_conf_new(); + code = tmq_conf_set(conf, "enable.auto.commit", "true"); + if (TMQ_CONF_OK != code) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "auto.commit.interval.ms", "1000"); + if (TMQ_CONF_OK != code) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "group.id", "cgrpName"); + if (TMQ_CONF_OK != code) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "client.id", "user defined name"); + if (TMQ_CONF_OK != code) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "td.connect.user", "root"); + if (TMQ_CONF_OK != code) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "td.connect.pass", "taosdata"); + if (TMQ_CONF_OK != code) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "auto.offset.reset", "earliest"); + if (TMQ_CONF_OK != code) { + tmq_conf_destroy(conf); + return NULL; + } + + tmq_conf_set_auto_commit_cb(conf, tmq_commit_cb_print, NULL); + tmq = tmq_consumer_new(conf, NULL, 0); + +_end: + tmq_conf_destroy(conf); + return tmq; +} + +tmq_list_t* build_topic_list() { + tmq_list_t* topicList = tmq_list_new(); + int32_t code = tmq_list_append(topicList, topic_name); + if (code) { + tmq_list_destroy(topicList); + return NULL; + } + return topicList; +} + +void basic_consume_loop(tmq_t* tmq) { + int32_t totalRows = 0; + int32_t msgCnt = 0; + int32_t timeout = 5000; + while (running) { + TAOS_RES* tmqmsg = tmq_consumer_poll(tmq, timeout); + if (tmqmsg) { + msgCnt++; + totalRows += msg_process(tmqmsg); + taos_free_result(tmqmsg); + } else { + break; + } + } + + fprintf(stderr, "%d msg consumed, include %d rows\n", msgCnt, totalRows); +} + +void consume_repeatly(tmq_t* tmq) { + int32_t numOfAssignment = 0; + tmq_topic_assignment* pAssign = NULL; + + int32_t code = tmq_get_topic_assignment(tmq, topic_name, &pAssign, &numOfAssignment); + if (code != 0) { + fprintf(stderr, "failed to get assignment, reason:%s", tmq_err2str(code)); + } + + // seek to the earliest offset + for(int32_t i = 0; i < numOfAssignment; ++i) { + tmq_topic_assignment* p = &pAssign[i]; + + code = tmq_offset_seek(tmq, topic_name, p->vgId, p->begin); + if (code != 0) { + fprintf(stderr, "failed to seek to %d, reason:%s", (int)p->begin, tmq_err2str(code)); + } + } + + tmq_free_assignment(pAssign); + + // let's do it again + basic_consume_loop(tmq); +} + +int main(int argc, char* argv[]) { + int32_t code; + + if (init_env() < 0) { + return -1; + } + + if (create_topic() < 0) { + return -1; + } + + tmq_t* tmq = build_consumer(); + if (NULL == tmq) { + fprintf(stderr, "build_consumer() fail!\n"); + return -1; + } + + tmq_list_t* topic_list = build_topic_list(); + if (NULL == topic_list) { + return -1; + } + + if ((code = tmq_subscribe(tmq, topic_list))) { + fprintf(stderr, "Failed to tmq_subscribe(): %s\n", tmq_err2str(code)); + } + + tmq_list_destroy(topic_list); + + basic_consume_loop(tmq); + + consume_repeatly(tmq); + + code = tmq_consumer_close(tmq); + if (code) { + fprintf(stderr, "Failed to close consumer: %s\n", tmq_err2str(code)); + } else { + fprintf(stderr, "Consumer closed\n"); + } + + return 0; +} diff --git a/docs/examples/rust/nativeexample/examples/schemaless.rs b/docs/examples/rust/nativeexample/examples/schemaless.rs index 2da99400d3..298dcd3890 100644 --- a/docs/examples/rust/nativeexample/examples/schemaless.rs +++ b/docs/examples/rust/nativeexample/examples/schemaless.rs @@ -10,7 +10,7 @@ async fn put() -> anyhow::Result<()> { std::env::set_var("RUST_LOG", "taos=debug"); pretty_env_logger::init(); let dsn = - std::env::var("TDENGINE_ClOUD_DSN").unwrap_or("http://localhost:6041".to_string()); + std::env::var("TDENGINE_ClOUD_DSN").unwrap_or("taos://localhost:6030".to_string()); log::debug!("dsn: {:?}", &dsn); let client = TaosBuilder::from_dsn(dsn)?.build().await?; diff --git a/docs/zh/08-develop/01-connect/index.md b/docs/zh/08-develop/01-connect/index.md index 528a30f909..ddf988435d 100644 --- a/docs/zh/08-develop/01-connect/index.md +++ b/docs/zh/08-develop/01-connect/index.md @@ -79,7 +79,7 @@ TDengine 提供了丰富的应用程序开发接口,为了便于用户快速 ## 安装连接器 - + 如果使用 Maven 管理项目,只需在 pom.xml 中加入以下依赖。 @@ -439,9 +439,6 @@ DSN 的详细说明和如何使用详见 [连接功能](../../reference/connecto {{#include docs/examples/csharp/wsConnect/Program.cs:main}} ``` - - - ### 原生连接 @@ -496,16 +493,6 @@ DSN 的详细说明和如何使用详见 [连接功能](../../reference/connecto {{#include docs/examples/go/connect/restexample/main.go}} ``` - - 不支持 - - - 不支持 - - - - - @@ -585,11 +572,6 @@ let taos = pool.get()?; ``` - - 不支持 - - - - + diff --git a/docs/zh/08-develop/04-schemaless.md b/docs/zh/08-develop/04-schemaless.md index f25162a62a..073e36c66e 100644 --- a/docs/zh/08-develop/04-schemaless.md +++ b/docs/zh/08-develop/04-schemaless.md @@ -204,8 +204,6 @@ writer.write(lineDemo, SchemalessProtocolType.LINE, SchemalessTimestampType.NANO {{#include docs/examples/csharp/wssml/Program.cs:main}} ``` - - ### 原生连接 @@ -234,7 +232,12 @@ writer.write(lineDemo, SchemalessProtocolType.LINE, SchemalessTimestampType.NANO ``` -除 DSN 不同,其余同 Websocket 代码示例。 + +```rust +{{#include docs/examples/rust/nativeexample/examples/schemaless.rs}} +``` + + ```csharp @@ -249,30 +252,6 @@ writer.write(lineDemo, SchemalessProtocolType.LINE, SchemalessTimestampType.NANO - -### REST 连接 - - - 不支持 - - - 不支持 - - - 不支持 - - - 不支持 - - - 不支持 - - - - - - - ## 查询写入的数据 运行上节的样例代码,会在 power 数据库中自动建表,我们可以通过 taos shell 或者应用程序来查询数据。下面给出用 taos shell 查询超级表和 meters 表数据的样例。 diff --git a/docs/zh/08-develop/05-stmt.md b/docs/zh/08-develop/05-stmt.md index 6cf8149fc6..d2ee8a3a2d 100644 --- a/docs/zh/08-develop/05-stmt.md +++ b/docs/zh/08-develop/05-stmt.md @@ -60,9 +60,6 @@ import TabItem from "@theme/TabItem"; ```csharp {{#include docs/examples/csharp/wsStmt/Program.cs:main}} ``` - - - @@ -89,7 +86,11 @@ import TabItem from "@theme/TabItem"; ``` -除 DSN 不同,其余同 Websocket 代码示例。 + +```rust +{{#include docs/examples/rust/nativeexample/examples/stmt.rs}} +``` + ```csharp diff --git a/docs/zh/08-develop/07-tmq.md b/docs/zh/08-develop/07-tmq.md index f148dde9b2..fa6770a29f 100644 --- a/docs/zh/08-develop/07-tmq.md +++ b/docs/zh/08-develop/07-tmq.md @@ -145,10 +145,6 @@ Rust 连接器创建消费者的参数为 DSN, 可以设置的参数列表请 ```csharp {{#include docs/examples/csharp/wssubscribe/Program.cs:create_consumer}} ``` - - - - @@ -160,12 +156,10 @@ Rust 连接器创建消费者的参数为 DSN, 可以设置的参数列表请 - ```java {{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ConsumerLoopFull.java:create_consumer}} ``` - @@ -255,16 +249,19 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur ``` - - - ### 原生连接 -同 Websocket 代码样例。 +```java +{{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WsConsumerLoopFull.java:poll_data_code_piece}} +``` + +- `subscribe` 方法的参数含义为:订阅的主题列表(即名称),支持同时订阅多个主题。 +- `poll` 每次调用获取一个消息,一个消息中可能包含多个记录。 +- `ResultBean` 是我们自定义的一个内部类,其字段名和数据类型与列的名称和数据类型一一对应,这样根据 `value.deserializer` 属性对应的反序列化类可以反序列化出 `ResultBean` 类型的对象。 @@ -282,7 +279,12 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur -同 Websocket 示例代码 +消费者可订阅一个或多个 `TOPIC`,一般建议一个消费者只订阅一个 `TOPIC`。 +TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futures/stream/index.html) 类型,可以使用相应 API 对每个消息进行消费,并通过 `.commit` 进行已消费标记。 + +```rust +{{#include docs/examples/rust/restexample/examples/tmq.rs:consume}} +``` @@ -353,18 +355,20 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur {{#include docs/examples/csharp/wssubscribe/Program.cs:seek}} ``` - - - - - ### 原生连接 -同 Websocket 代码样例。 + +```java +{{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WsConsumerLoopFull.java:consumer_seek}} +``` +1. 使用 consumer.poll 方法轮询数据,直到获取到数据为止。 +2. 对于轮询到的第一批数据,打印第一条数据的内容,并获取当前消费者的分区分配信息。 +3. 使用 consumer.seekToBeginning 方法将所有分区的偏移量重置到开始位置,并打印成功重置的消息。 +4. 再次使用 consumer.poll 方法轮询数据,并打印第一条数据的内容。 @@ -382,7 +386,17 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur -同 Websocket 代码样例。 + +```rust +{{#include docs/examples/rust/nativeexample/examples/tmq.rs:seek_offset}} +``` + +1. 通过调用 consumer.assignments() 方法获取消费者当前的分区分配信息,并记录初始分配状态。 +2. 遍历每个分区分配信息,对于每个分区:提取主题(topic)、消费组ID(vgroup_id)、当前偏移量(current)、起始偏移量(begin)和结束偏移量(end)。 +记录这些信息。 +1. 调用 consumer.offset_seek 方法将偏移量设置到起始位置。如果操作失败,记录错误信息和当前分配状态。 +2. 在所有分区的偏移量调整完成后,再次获取并记录消费者的分区分配信息,以确认偏移量调整后的状态。 + @@ -446,10 +460,6 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur ```csharp {{#include docs/examples/csharp/wssubscribe/Program.cs:commit_offset}} ``` - - - - @@ -458,7 +468,9 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur -同 Websocket 代码样例。 +```java +{{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WsConsumerLoopFull.java:commit_code_piece}} +``` @@ -476,7 +488,11 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur -同 Websocket 代码样例。 +```rust +{{#include docs/examples/rust/restexample/examples/subscribe_demo.rs:consumer_commit_manually}} +``` + +可以通过 `consumer.commit` 方法来手工提交消费进度。 @@ -541,19 +557,15 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur {{#include docs/examples/csharp/wssubscribe/Program.cs:close}} ``` - - - - - ### 原生连接 -同 Websocket 代码样例。 - +```java +{{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WsConsumerLoopFull.java:unsubscribe_data_code_piece}} +``` @@ -570,7 +582,11 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur -同 Websocket 代码样例。 +```rust +{{#include docs/examples/rust/restexample/examples/tmq.rs:unsubscribe}} +``` + +**注意**:消费者取消订阅后无法重用,如果想订阅新的 `topic`, 请重新创建消费者。 @@ -638,10 +654,6 @@ TMQ 消息队列是一个 [futures::Stream](https://docs.rs/futures/latest/futur ``` - - - - ### 原生连接 diff --git a/docs/zh/14-reference/05-connector/10-cpp.mdx b/docs/zh/14-reference/05-connector/10-cpp.mdx index a47e3697be..23fd9cc937 100644 --- a/docs/zh/14-reference/05-connector/10-cpp.mdx +++ b/docs/zh/14-reference/05-connector/10-cpp.mdx @@ -57,9 +57,14 @@ TDengine 客户端驱动的安装请参考 [安装指南](../#安装步骤) :::note - 如未特别说明,当 API 的返回值是整数时,_0_ 代表成功,其它是代表失败原因的错误码,当返回值是指针时, _NULL_ 表示失败。 -- 所有的错误码以及对应的原因描述在 `taoserror.h` 文件中。查看错误代码文档 +- 所有的错误码以及对应的原因描述在 `taoserror.h` 文件中。 [错误码文档](../cpp/error-code) ::: +## 错误码 + +在 C 接口的设计中,错误码采用整数类型表示,每个错误码都对应一个特定的错误状态。如未特别说明,当 API 的返回值是整数时,_0_ 代表成功,其它是代表失败原因的错误码,当返回值是指针时, _NULL_ 表示失败。 +所有的错误码以及对应的原因描述在 `taoserror.h` 文件中。 +详细的错误码说明参考:[错误码](../cpp/error-code) ## 示例程序 @@ -303,7 +308,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) - **参数说明**: - taos:[入参] 指向数据库连接的指针,数据库连接是通过 `taos_connect()` 函数建立。 -### 同步查询 API +### 同步查询 本小节介绍 API 均属于同步接口。应用调用后,会阻塞等待响应,直到获得返回结果或错误信息。 @@ -325,7 +330,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) - **接口说明**:按行获取查询结果集中的数据。 - **参数说明**: - res:[入参] 结果集。 - - **返回值**:`非NULL`:成功,`NULL`:失败,可调用函数 taos_errstr(NULL) 获取更详细的错误信息。 + - **返回值**:非 `NULL`:成功,`NULL`:失败,可调用函数 taos_errstr(NULL) 获取更详细的错误信息。 - `int taos_fetch_block(TAOS_RES *res, TAOS_ROW *rows)` - **接口说明**:批量获取查询结果集中的数据。 @@ -356,7 +361,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) - **接口说明**:获取查询结果集每列数据的属性(列的名称、列的数据类型、列的长度),与 `taos_num_fields()` 配合使用,可用来解析 `taos_fetch_row()` 返回的一个元组(一行)的数据。 - **参数说明**: - res:[入参] 结果集。 - - **返回值**:`非NULL`:成功,返回一个指向 TAOS_FIELD 结构体的指针,每个元素代表一列的元数据。`NULL`:失败。 + - **返回值**:非 `NULL`:成功,返回一个指向 TAOS_FIELD 结构体的指针,每个元素代表一列的元数据。`NULL`:失败。 - `void taos_stop_query(TAOS_RES *res)` - **接口说明**:停止当前查询的执行。 @@ -386,7 +391,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) ::: -### 异步查询 API +### 异步查询 TDengine 还提供性能更高的异步 API 处理数据插入、查询操作。在软硬件环境相同的情况下,异步 API 处理数据插入的速度比同步 API 快 2 ~ 4 倍。异步 API 采用非阻塞式的调用方式,在系统真正完成某个具体数据库操作前,立即返回。调用的线程可以去处理其他工作,从而可以提升整个应用的性能。异步 API 在网络延迟严重的情况下,优势尤为突出。 @@ -410,7 +415,7 @@ TDengine 还提供性能更高的异步 API 处理数据插入、查询操作。 TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多线程同时打开多张表,并可以同时对每张打开的表进行查询或者插入操作。需要指出的是,**客户端应用必须确保对同一张表的操作完全串行化**,即对同一个表的插入或查询操作未完成时(未返回时),不能够执行第二个插入或查询操作。 -### 参数绑定 API +### 参数绑定 除了直接调用 `taos_query()` 进行查询,TDengine 也提供了支持参数绑定的 Prepare API,风格与 MySQL 类似,目前也仅支持用问号 `?` 来代表待绑定的参数。 @@ -434,7 +439,7 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - **接口说明**:初始化一个预编译的 SQL 语句对象。 - **参数说明**: - taos:[入参] 指向数据库连接的指针,数据库连接是通过 `taos_connect()` 函数建立。 - - **返回值**:`非NULL`:成功,返回一个指向 TAOS_STMT 结构体的指针,该结构体表示预编译的 SQL 语句对象。`NULL`:失败,详情请调用 taos_stmt_errstr() 函数来获取错误提示。 + - **返回值**:非 `NULL`:成功,返回一个指向 TAOS_STMT 结构体的指针,该结构体表示预编译的 SQL 语句对象。`NULL`:失败,详情请调用 taos_stmt_errstr() 函数来获取错误提示。 - `int taos_stmt_prepare(TAOS_STMT *stmt, const char *sql, unsigned long length)` - **接口说明**:解析一条预编译的 SQL 语句,将解析结果和参数信息绑定到 stmt 上。 @@ -496,7 +501,7 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - `TAOS_RES* taos_stmt_use_result(TAOS_STMT *stmt)` - **接口说明**:获取语句的结果集。结果集的使用方式与非参数化调用时一致,使用完成后,应对此结果集调用 `taos_free_result()` 以释放资源。 - stmt:[入参] 指向一个有效的预编译的 SQL 语句对象指针。 - - **返回值**:`非NULL`:成功,返回一个指向查询结果集的指针。`NULL`:失败,详情请调用 taos_stmt_errstr() 函数来获取错误提示。 + - **返回值**:非 `NULL`:成功,返回一个指向查询结果集的指针。`NULL`:失败,详情请调用 taos_stmt_errstr() 函数来获取错误提示。 - `int taos_stmt_close(TAOS_STMT *stmt)` - **接口说明**:执行完毕,释放所有资源。 @@ -508,7 +513,7 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - stmt:[入参] 指向一个有效的预编译的 SQL 语句对象指针。 - **返回值**:返回一个指向包含错误信息的字符串的指针。 -### 无模式(schemaless)写入 API +### 无模式写入 除了使用 SQL 方式或者使用参数绑定 API 写入数据外,还可以使用 Schemaless 的方式完成写入。Schemaless 可以免于预先创建超级表/数据子表的数据结构,而是可以直接写入数据,TDengine 系统会根据写入的数据内容自动创建和维护所需要的表结构。Schemaless 的使用方式详见 [Schemaless 写入](../../reference/schemaless/) 章节,这里介绍与之配套使用的 C/C++ API。 @@ -632,7 +637,7 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - 带_ttl的接口可以传递ttl参数来控制建表的ttl到期时间。 - 带_reqid的接口可以通过传递reqid参数来追踪整个的调用链。 -### 数据订阅 API +### 数据订阅 - `const char *tmq_err2str(int32_t code)` - **接口说明**:用于将数据订阅的错误码转换为错误信息。 - code:[入参] 数据订阅的错误码。 @@ -640,7 +645,7 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - `tmq_conf_t *tmq_conf_new()` - **接口说明**:创建一个新的 TMQ 配置对象。 - - **返回值**:`非NULL`:成功,返回一个指向 tmq_conf_t 结构体的指针,该结构体用于配置 TMQ 的行为和特性。`NULL`:失败,可调用函数 taos_errstr(NULL) 获取更详细的错误信息。 + - **返回值**:非 `NULL`:成功,返回一个指向 tmq_conf_t 结构体的指针,该结构体用于配置 TMQ 的行为和特性。`NULL`:失败,可调用函数 taos_errstr(NULL) 获取更详细的错误信息。 - `tmq_conf_res_t tmq_conf_set(tmq_conf_t *conf, const char *key, const char *value)` - **接口说明**:设置 TMQ 配置对象中的配置项,用于配置消费参数。 @@ -669,7 +674,7 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - `tmq_list_t *tmq_list_new()` - **接口说明**:用于创建一个 tmq_list_t 结构体,用于存储订阅的 topic。 - - **返回值**:`非NULL`:成功,返回一个指向 tmq_list_t 结构体的指针。`NULL`:失败,可调用函数 taos_errstr(NULL) 获取更详细的错误信息。 + - **返回值**:非 `NULL`:成功,返回一个指向 tmq_list_t 结构体的指针。`NULL`:失败,可调用函数 taos_errstr(NULL) 获取更详细的错误信息。 - `int32_t tmq_list_append(tmq_list_t *list, const char* topic)` - **接口说明**:用于向 tmq_list_t 结构体中添加一个 topic。 @@ -689,14 +694,14 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - `char **tmq_list_to_c_array(const tmq_list_t *list)` - **接口说明**:用于将 tmq_list_t 结构体转换为 C 数组,数组每个元素为字符串指针。 - list:[入参] 指向一个有效的 tmq_list_t 结构体指针,该结构体代表一个 TMQ 列表对象。 - - **返回值**:`非NULL`:成功,返回 c 数组, 每个元素是字符串指针,代表一个 topic 名称。`NULL`:失败,表示输入参数 list 为 NULL 。 + - **返回值**:非 `NULL`:成功,返回 c 数组, 每个元素是字符串指针,代表一个 topic 名称。`NULL`:失败,表示输入参数 list 为 NULL 。 - `tmq_t *tmq_consumer_new(tmq_conf_t *conf, char *errstr, int32_t errstrLen)` - **接口说明**:用于创建一个 tmq_t 结构体,用于消费数据,消费完数据后需调用 tmq_consumer_close 关闭消费者。 - conf:[入参] 指向一个有效的 tmq_conf_t 结构体指针,该结构体代表一个 TMQ 配置对象。 - errstr:[出参] 指向一个有效的字符缓冲区指针,用于接收创建过程中可能产生的错误信息。内存的申请/释放由调用者负责。 - errstrLen:[入参] 指定 errstr 缓冲区的大小(以字节为单位)。 - - **返回值**:`非NULL`:成功,返回一个指向 tmq_t 结构体的指针,该结构体代表一个 TMQ 消费者对象。。`NULL`:失败,错误信息存储在参数 errstr 中 。 + - **返回值**:非 `NULL`:成功,返回一个指向 tmq_t 结构体的指针,该结构体代表一个 TMQ 消费者对象。。`NULL`:失败,错误信息存储在参数 errstr 中 。 - `int32_t tmq_subscribe(tmq_t *tmq, const tmq_list_t *topic_list)` - **接口说明**:用于订阅 topic 列表,消费完数据后,需调用 tmq_subscribe 取消订阅。 @@ -719,7 +724,7 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - **接口说明**:用于轮询消费数据,每一个消费者,只能单线程调用该接口。 - tmq:[入参] 指向一个有效的 tmq_t 结构体指针,该结构体代表一个 TMQ 消费者对象。 - timeout:[入参] 轮询的超时时间,单位为毫秒,负数表示默认超时1秒。 - - **返回值**:`非NULL`:成功,返回一个指向 TAOS_RES 结构体的指针,该结构体包含了接收到的消息。。`NULL`:失败,表示没有数据。TAOS_RES 结果和 taos_query 返回结果一致,可通过查询的各种接口获取 TAOS_RES 里的信息,比如 schema 等。 + - **返回值**:非 `NULL`:成功,返回一个指向 TAOS_RES 结构体的指针,该结构体包含了接收到的消息。。`NULL`:失败,表示没有数据。TAOS_RES 结果和 taos_query 返回结果一致,可通过查询的各种接口获取 TAOS_RES 里的信息,比如 schema 等。 - `int32_t tmq_consumer_close(tmq_t *tmq)` - **接口说明**:用于关闭 tmq_t 结构体。需与 tmq_consumer_new 配合使用。 @@ -835,4 +840,4 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 - `const char *tmq_get_db_name(TAOS_RES *res)` - **接口说明**:从 TMQ 消费者获取的消息结果中获取所属的数据库名称。 - res:[入参] 指向一个有效的 TAOS_RES 结构体指针,该结构体包含了从 TMQ 消费者轮询得到的消息。 - - **返回值**:非NULL`:成功,返回一个 const char * 类型的指针,指向数据库名称字符串。`NULL`:失败,非法的输入参数。 \ No newline at end of file + - **返回值**:非NULL`:成功,返回一个 const char * 类型的指针,指向数据库名称字符串。`NULL`:失败,非法的输入参数。 diff --git a/docs/zh/14-reference/05-connector/14-java.mdx b/docs/zh/14-reference/05-connector/14-java.mdx index 322c2091ac..81b550ed16 100644 --- a/docs/zh/14-reference/05-connector/14-java.mdx +++ b/docs/zh/14-reference/05-connector/14-java.mdx @@ -68,7 +68,7 @@ JDBC 连接器可能报错的错误码包括 4 种: - JDBC driver 本身的报错(错误码在 0x2301 到 0x2350 之间) - 原生连接方法的报错(错误码在 0x2351 到 0x2360 之间) - 数据订阅的报错(错误码在 0x2371 到 0x2380 之间) -- TDengine 其他功能模块的报错。 +- TDengine 其他功能模块的报错,请参考 [错误码](../cpp/error-code) 具体的错误码请参考: @@ -117,7 +117,7 @@ JDBC 连接器可能报错的错误码包括 4 种: - [TDengine Java Connector Error Code](https://github.com/taosdata/taos-connector-jdbc/blob/main/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java) -## TDengine DataType 和 Java DataType +## 数据类型映射 TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对应类型转换如下: diff --git a/docs/zh/14-reference/05-connector/26-rust.mdx b/docs/zh/14-reference/05-connector/26-rust.mdx index ae16af4f2d..9991b638fe 100644 --- a/docs/zh/14-reference/05-connector/26-rust.mdx +++ b/docs/zh/14-reference/05-connector/26-rust.mdx @@ -61,8 +61,9 @@ match conn.exec(sql) { } } ``` +错误信息的错误码可以参考:[错误码](../cpp/error-code) -## TDengine DataType 和 Rust DataType +## 数据类型映射 TDengine 目前支持时间戳、数字、字符、布尔类型,与 Rust 对应类型转换如下: diff --git a/docs/zh/14-reference/05-connector/30-python.mdx b/docs/zh/14-reference/05-connector/30-python.mdx index cbc0436010..c534bf37b1 100644 --- a/docs/zh/14-reference/05-connector/30-python.mdx +++ b/docs/zh/14-reference/05-connector/30-python.mdx @@ -81,7 +81,7 @@ Python Connector 的所有数据库操作如果出现异常,都会直接抛出 {{#include docs/examples/python/handle_exception.py}} ``` -## TDengine DataType 和 Python DataType +## 数据类型映射 TDengine 目前支持时间戳、数字、字符、布尔类型,与 Python 对应类型转换如下: diff --git a/docs/zh/14-reference/05-connector/35-node.mdx b/docs/zh/14-reference/05-connector/35-node.mdx index c963b0c7f7..48eec4c78f 100644 --- a/docs/zh/14-reference/05-connector/35-node.mdx +++ b/docs/zh/14-reference/05-connector/35-node.mdx @@ -50,7 +50,7 @@ Node.js 连接器目前仅支持 Websocket 连接器, 其通过 taosAdapter | 109 | fetch block data parse fail | 获取到的查询数据,解析失败 | | 110 | websocket connection has reached its maximum limit | Websocket 连接达到上限 | -## 类型映射 +## 数据类型映射 下表为 TDengine DataType 和 Node.js DataType 之间的映射关系 diff --git a/docs/zh/14-reference/05-connector/_01-error-code.md b/docs/zh/14-reference/05-connector/_01-error-code.md deleted file mode 100644 index 3111d4bbf8..0000000000 --- a/docs/zh/14-reference/05-connector/_01-error-code.md +++ /dev/null @@ -1,482 +0,0 @@ ---- -sidebar_label: 错误码 -title: TDengine C/C++ 连接器错误码 -description: C/C++ 连接器的错误码列表和详细说明 ---- - -本文中详细列举了在使用 TDengine C/C++ 连接器时客户端可能得到的错误码以及所要采取的相应动作。其它语言的连接器在使用原生连接方式时也会所得到的返回码返回给连接器的调用者。 - - | **Error Code** | **说明** | 如何处理错误 | - | -------------- | ------------------ | ------------ | - | 0 | 请求处理成功 | None | - | -1 | 请求失败,未知原因 | TODO | - | 0x0003 | RPC 认证失败 | TODO | - | 0x0004 | RPC 重定向 |TODO| - | 0x000B | 无法建立连接 |TODO| - | 0x0015 | FQDN 解析失败 |检查各个dnode配置的FQDN是否正确,并且能够从其它节点 ping 到 | - | 0x0017 | 端口已经被占用 | 检查所配置的端口被哪个进程占用,关闭该进程以释放端口;或者更改配置使用另一端口号 | - | 0x0018 | 连接被断开 | 检查 dnode 进程是否还在,如果无异常检查网络情况 | - | 0x0013 | 客户端和服务端的时间未同步 | 检查客户端和服务端的时间设置是否同步| - | 0x0014 | 数据库不可用 |检查数据库是否存在,检查数据库的vgroups的状态 | - | 0x0100 | 该操作不支持 | 参考SQL手册,使用正确的操作 | - | 0x0102 | 无法分配内存,系统内存耗尽 | 检查系统中内存被耗尽的原因,采取措施释放内存。如果内存是被 dnode 耗尽的话重启该进程 | - | 0x0104 | 文件被破坏 | TODO | - | 0x0111 | 操作在进行中 | 等待该操作完成 | - | 0x0115 | 无效的消息 | TODO | - | 0x0116 | 无效的消息长度 | TODO | - | 0x0117 | 无效指针 | TODO | - | 0x0118 | 无效参数 | | - | 0x0119 | 无效配置 | 检查配置参数的值是否在合法值域范围内 | - | 0x011A | 无效选项 | 检查配置中是否有不支持的无效配置项 | - | 0x011B | 无效的JSON 格式 | 修正插入数据中的JSON值| - | 0x011C | 无效版本号 | 检查客户端版本是否匹配,更换正确的客户端 | - | 0x011D | 无效版本信息 | 检查客户端版本是否匹配,更换正确的客户端 | - | 0x011E | 版本不匹配 | TODO | - | 0x011F | 校验和错误 | TODO | - | 0x0120 | 数据压缩失败 | TODO | - | 0x0121 | 消息未处理 | TODO | - | 0x0122 | 配置未找到 | TODO| - | 0x0123 | 重复初始化 | TODO | - | 0x0124 | 无法将重复的key加入hash| TODO | - | 0x0125 | 需要重试 | 重试 | - | 0x0126 | RPC 队列内存耗尽 | TODO | - | 0x0127 | 无效的时间戳 | 修正插入数据 | - | 0x0128 | 消息解码失败 | 检查客户端版本是否匹配和兼容 | - | 0x0129 | 磁盘耗尽 | TODO | - | 0x012A | TODO | TODO | - | 0x0200 | 无效操作 | 检查SQL命令,根据SQL手册使用正确的操作| - | 0x0201 | 无效的查询句柄 | TODO | - | 0x0202 | 无效的客户端/服务端时间组合 | TODO | - | 0x0203 | 无效值 | TODO | - | 0x0204 | 无效的客户端版本 | 检查客户端版本是否匹配,更换为正确的客户端版本 | - | 0x0205 | TODO | TODO | - | 0x0206 | 无效的 FQDN | 检查服务器 fqdn 配置是否正确,是否能够从其它服务器访问到该 fqdn | - | 0x0207 | 用户名长度过长 | 检查用户名长度是否过长 | - | 0x0208 | 密码长度过长 | 检查密码长度是否过长 | - | 0x0209 | 数据库名字长度过长 | 检查数据库名是否过长 | - | 0x020A | 表名长度过长 | 检查表名是否过长 | - | 0x020B | 无效连接 | 检查该连接是否已经断开 | - | 0x020C | 系统内存耗尽 | 检查系统中内存被耗尽的原因,尝试释放出内存 | - | 0x020D | 磁盘空间耗尽 | 检查系统中磁盘耗尽的原因,尝试释放或增加磁盘空间 | - | 0x020E | 查询缓存被清除 |TODO | - | 0x020F | 查询已经被结束 | 尝试优化查询条件再重启查询 | - | 0x0210 | 结果集过大无法存储 | 尝试优化查询条件,缩小结果集,再重启查询 | - | 0x0211 | 数据库不可用 | 查看数据库是否存在,查看数据库的 vgroups 状态 | - | 0x0212 | 操作正在进行中 | 等待操作完成 | - | 0x0213 | 连接被服务端断开 | 查看服务端进程是否发生 crash 等异常终止情况 | - | 0x0214 | 没有写权限 | 只进行读操作或者尝试获取写权限 | - | 0x0215 | 连接被 kill | 重新建立连接 | - | 0x0216 | SQL 语法错误 | 参考 SQL手册,纠正语法错误再重试 | - | 0x0217 | 未指定数据库或者指定的数据库不可用 | 指定数据库,或者检查指定数据库的状态 | - | 0x0218 | 所查询的表不存在 | 确认表名后纠正查询语句 | - | 0x0219 | SQL 语句超长 | 根据 maxSQLLength 缩短SQL语句或者加大maxSQLLength (如果还未配置到上限)| - | 0x021A | 空文件 | TODO | - | 0x021B | Line 协议语法错误 | 纠正插入语句 | - | 0x021C | 元数据未被缓存 | TODO | - | 0x021D | 重复的列名 | 纠正SQL语句中的相应错误 | - | 0x021E | tag 过长 | 纠正过长的 tag | - | 0x021F | 列名过长 | 纠正过长的列名 | - | 0x0220 | 重复的表名**TODO** | TODO| - | 0x0221 | JSON 格式错误 | 纠正错误的 JSON 结构 | - | 0x0222 | JSON 中使用了无效的数据类型 | 纠正 JSON 结构中的错误 | - | 0x0224 | 超出了所支持的值域 | 纠正到值域范围内 | - | 0x0229 | 无效的 tsc 输入 **TODO** | TODO | - | 0x022A | stmt API 使用错误 | 根据参考手册正确使用 | - | 0x022B | stmt 使用时未指定表名 | 指定表名 | - | 0x022C | 不支持 stmt 子名 | 根据参考手册纠正错误用法 | - | 0x022D | 查询被 kill | 优化查询语句,尽量减小计算量和结果集,然后重新启动查询 | - | 0x022E | 在当前配置的查询策略下没有可用的计算节点 | 创建新的 qnode | - | 0x022F | 所指定的表不是超级表 | 确认下该查询场景适用于超级表还是子表/普通表,如果是前者则纠正为超级表名 | - | 0x0303 | 没有权限进行所发起的操作 | 申请权限或调整操作 | - | 0x0304 | 管理节点内部错误 | TODO | - | 0x0305 | 无效连接 | TODO | - | 0x030B | 所要展示的操作其数据已经因为超时而被删除 | 更换想要展示操作或者放弃此次操作 | - | 0x030C | 无效的查询ID| 确认正确的查询ID再重新发起 | - | 0x030D | 无效的流ID| 确认正确的流ID再重新发起| - | 0x030E | 无效的连接ID| 确认正确的连接ID再重新发起| - | 0x0310 | mnode已经在运行 | 无须采取任何动作 | - | 0x0311 | 配置同步失败 | TODO | - | 0x0312 | 无法启动同步 | TODO | - | 0x0313 | 无法创建 mnode 对应的目录 | 确认磁盘上是否有可用空间以及是否有相应的写权限 | - | 0x0314 | 启动组件失败 | TODO | - | 0x0315 | 用户帐号被禁用 | 联系管理员激活该帐号 | - | 0x0320 | 元数据中已经存在所要创建的对象 | 检查所要创建的对象,比如超级表或表,是否已经存在 | - | 0x0321 | 元数据库中非预期的一般性错误 | TODO | - | 0x0322 | 无效的表类型 | TODO | - | 0x0323 | 所要查找的对象不存在 | TODO | - | 0x0325 | 无效的 key 类型 | TODO | - | 0x0326 | 无效的动作类型 | TODO | - | 0x0327 | 无效的状态类型 | TODO | - | 0x0328 | 无效的原始数据版本 | TODO | - | 0x0329 | 无效的原始数据长度 | TODO | - | 0x032A | 无效的原始数据内容 | TODO | - | 0x032B | 无效的 wal 版本 | TODO | - | 0x032C | 对象创建中 | TODO | - | 0x032D | 对象停止中 | TODO | - | 0x0330 | dnode 已经存在 | 无需任何动作,放弃重复创建dnode的操作 | - | 0x0331 | dnode 不存在 | 确认所要查询或者操作的dnode ID 或者 end point 是否正确 | - | 0x0332 | vgroup 不存在 | 确认所要查询或者操作的vgroup ID 是否正确 | - | 0x0333 | 系统拒绝 drop 其角色是 leader 的 mnode | 放弃该操作 | - | 0x0334 | 没有足够的 dnode 创建所指定的 vgroups | 增加 dnode 或者修改现有dnode的配置参数 `supportVgroups` | - | 0x0335 | 集群中各个dnode的配置不一致 | 检查各个dnode的配置参数确保其一致 | - | 0x0338 | 所要查询或操作的vgroup不在所指定的dnode中| 检查vgroup ID 和 dnode ID是否正确 | - | 0x0339 | 所要查询或操作的 vgroup 已经在所指定的dnode中 | 检查 vgroup ID 和 dnode ID是否正确 | - | 0x033B | 集群 ID 不匹配 | TODO | - | 0x0340 | 该帐户已经存在 | 放弃重复创建帐户的操作 | - | 0x0342 | 无效的帐户选项 | 检查创建帐户时的参数选项是否正确 | - | 0x0343 | 帐户授权已经过期 | 联系管理员重新授权 | - | 0x0344 | 无效帐户 | 联系管理员确认帐户 | - | 0x0345 | 操作的帐户过多,无法支持 | 减少同时操作的帐户数 | - | 0x0350 | 用户已经存在 | 放弃重复创建用户的操作 | - | 0x0351 | 无效用户 | 检查并确认正确用户 | - | 0x0352 | 无效的用户名格式 | 查看参考手册修改用户名 | - | 0x0353 | 无效的密码格式 | 查看参考手册修改密码 | - | 0x0354 | 无法从连接中获取用户名 | 检查客户端环境初始化是否使用了正确的用户名 | - | 0x0355 | 一次尝试操作的用户过多 | 查看参考手册减少同时操作的用户数 | - | 0x0356 | 无效的修改操作 | 查看参考手册使用正确的操作 | - | 0x0357 | 认证失败 | 使用正确的用户名和密码 | - | 0x0360 | 要创建的超级表已经存在 | 放弃重复创建的操作或者删除该超级表再重新创建 | - | 0x0362 | 所使用或查询的超级表不存在 | 确认超级表名是否正确,如果正确则需要先创建超级表 | - | 0x0364 | 标签过多 | 查看参考手册减少标签数量 | - | 0x0365 | 列过多 | 查看参考手册减少列数量 | - | 0x0369 | 要添加的标签已经存在 | 修改标签名 | - | 0x036A | 要查询或修改的标签不存在 | 确认标签名是否正确 | - | 0x036B | 要添加的列已经存在 | 修改列名或者放弃该操作 | - | 0x036C | 要查询或修改的列不存在 | 确认列名是否正确 | - | 0x036E | 无效的超级表操作 | 查看参考手册进行正确的操作 | - | 0x036F | 错误的行字节数 | TODO | - | 0x0370 | 无效的函数名 | 确认函数名是否正确 | - | 0x0372 | 无效的函数代码 | 无效的函数编码 | - | 0x0373 | 该函数已经存在 | 修改函数名或者放弃该操作| - | 0x0374 | 所引用的函数不存在 | 确认函数名是否正确 | - | 0x0375 | 无效的 bufSize | 查看参考手册修改 bufSize | - | 0x0378 | 无效的函数注释 | 查看参考手册修改函数注释 | - | 0x0379 | 无效的函数检索消息 | TODO | - | 0x0380 | 未指定数据库或者指定的数据库不可用 | 指定数据库,或者检查所指定的数据库的状态 | - | 0x0381 | 数据库已经存在 | 放弃重复创建,或者修改数据库名 | - | 0x0382 | 无效的数据库参数 | 查看参考手册使用正确的参数 | - | 0x0383 | 无效的数据库名称 | 查看参考手册使用正确的数据库名 | - | 0x0385 | 该帐号下的数据库过多 | 删除旧的数据库再尝试创建新数据库 | - | 0x0388 | 数据库不存在 | 确认数据库名是否正确 | - | 0x0389 | 无效的数据库帐户 | 确认帐户是否正确 | - | 0x038A | 数据库参数未修改 | 查看参考手册确认修改的参数和值是否正确 | - | 0x038B | 索引不存在 |确认索引名称是否正确 | - | 0x039A | 无效的系统表名 | 查看参考手册确认表名是否正确 | - | 0x03A0 | mnode 已经存在 | 放弃该操作 | - | 0x03A1 | mnode 不存在 | 确认要查看或操作的 mnode ID | - | 0x03A2 | qnode 已经存在 | 放弃该操作 | - | 0x03A3 | qnode 不存在 | 确认要查看或操作的 qnode ID 是否正确 | - | 0x03A8 | mnode 的 replica 不能小于1 | 停止 drop mnode | - | 0x03A9 | mnode 的 replica 不能大于3 | 停止 create mnode | - | 0x03B0 | dnode 数量过多 | 停止添加新的 dnode | - | 0x03B1 | dnode 没有足够的可用内存 | 检查所在系统的内存使用情况 ,尝试释放出内存 | - | 0x03B2 | 无效的 dnode 配置 | 查看参考手册纠正配置 | - | 0x03B3 | 无效的 dnode 地址 | 确认 dnode 的 FQDN 和 serverPort参数是否正确 | - | 0x03B4 | 无效的 dnode ID | 确认正确的 dnode ID | - | 0x03B5 | vgroup 的分布未发生变化 | TODO | - | 0x03B6 | 存在状态为 offline 的 dnode | drop 这些 dnode 或者启动相应的 dnode 使其状态为 ready | - | 0x03B7 | 无效的 vgroup 副本 | TODO | - | 0x03C0 | topic 与超级表冲突 | TODO | - | 0x03C1 | 订阅了过多的超级表 | 查看参考手册减少超级表数量 | - | 0x03C2 | 无效的 超级表修改参数 | 查看参考手册进行纠正 | - | 0x03C3 | 超级表参数未被修改 | 查看参考手册确认参数是否正确 | - | 0x03C4 | 该字段被某个主题所使用 | TODO | - | 0x03C5 | 该数据库是单超级表模式 | 修改数据库为多超级表模式或者放弃创建新的超级表 | - | 0x03C6 | 修改超级表使用了无效的 schema 版本 | TODO | - | 0x03C7 | 修改超级表使用了无效的超级表 ID | 确认超级表使用是否正确 | - | 0x03C8 | 该字段被 tsma 所使用 | TODO | - | 0x03D0 | 该事务已经存在 | TODO | - | 0x03D1 | 该事务不存在 | TODO | - | 0x03D2 | 要 kill 的 stage 不存在 | TODO | - | 0x03D3 | 冲突的事务没有完成 | TODO | - | 0x03D4 | 未知的事务错误 | TODO | - | 0x03D5 | 事务提交日志已满 | TODO | - | 0x03DF | 在执行事务时无法建立连接 | 等待事务完成尝试重新建立连接 | - | 0x03E0 | Topic 已经存在 | 修改 topic 名字或者放弃创建重复的 topic | - | 0x03E1 | Topic 不存在 | 确认 Topic 名字是否正确 | - | 0x03E2 | Topic 过多 | 尝试删除不用的 topic 再建立新的,或者放弃此次操作 | - | 0x03E3 | 无效的 Topic | 确认 Topic 是否正确 | - | 0x03E4 | 建立 Topic 的查询子名无效 | 查看参考手册纠正查询子名 | - | 0x03E5 | 建立 Topic 的参数无效 | 查看参考手册使用正确的参数 | - | 0x03E6 | 消费者不存在 | 确认正确的消费者 ID | - | 0x03E7 | 消费者未修改 | TODO | - | 0x03E8 | 订阅不存在 | 确认正确的订阅 ID | - | 0x03E9 | 偏移量不存在 | 纠正偏移量 | - | 0x03EA | 消费者不可用 | TODO | - | 0x03EB | 无法删除已经被订阅的 Topic | 先取消订阅再尝试删除 | - | 0x03EC | Consumer group正在被某些消费者使用 | TODO | - | 0x03F0 | 流已经存在 | 修改流名称或者放弃创建该流 | - | 0x03F1 | 要查询或操作的流不存在 | 确认正确的流 ID | - | 0x03F2 | 无效的流参数 | 查看参考手册纠正错误的参数 | - | 0x0480 | SMA 已经存在 | 修改 SMA 名称或者放弃创建 | - | 0x0481 | SMA 不存在 | 确认正确的 SMA 名称或者 ID | - | 0x0482 | SMA 参数错误 | 查看参考手册纠正参数 | - | 0x0408 | 节点不在线 | TODO | - | 0x0409 | 节点已经部署 | TODO | - | 0x040A | 节点未部署 | TODO | - | 0x0500 | 该动作作在进行中| TODO | - | 0x0501 | 消息未被处理 | TODO | - | 0x0502 | 该动作需要被重新处理 | TODO | - | 0x0503 | 无效的 vgroup ID | 检查确认正确的 vgroups ID | - | 0x0504 | vnode 初始化失败 | TODO | - | 0x0505 | 系统磁盘空间耗尽 | 尝试释放或者增加磁盘空间 | - | 0x0506 | 对磁盘文件没有写权限 | 检查启动 TDengine 的系统帐号的写权限 | - | 0x0507 | 数据文件缺失 | TODO | - | 0x0508 | vnode 没有可用内存 | TODO | - | 0x0509 | vnode 中未预期的一般性错误 | TODO | - | 0x050C | 数据库无空闲内存 | TODO | - | 0x050D | 数据库正在删除中 | TODO | - | 0x050E | 数据库正在更新中 | TODO | - | 0x0510 | 数据库正在关闭中 | TODO | - | 0x0511 | 数据库被暂停操作 | TODO | - | 0x0512 | 数据库写操作被拒绝 | 检查用户权限,申请写操作授权 | - | 0x0513 | 数据库正在同步中 | TODO | - | 0x0514 | 无效的 tsdb 状态 | TODO | - | 0x0520 | 指定的表不存在 | 检查确认正确的表名 | - | 0x0521 | 指定的SMA 不存在 | 检查确认正确的 SMA名称 | - | 0x0522 | Hash 值不匹配 | TODO | - | 0x0523 | 指定的表不存在 | 检查确认正确的表名 | - | 0x0524 | 无效的表动作 | TODO | - | 0x0525 | 列名已经存在 | 修改列名或放弃操作 | - | 0x0526 | 列名不存在 | 确认正确的列名 | - | 0x0527 | 该列已经被订阅 | 先取消订阅再操作或者放弃操作 | - | 0x0528 | 无效的配置文件 | 检查配置文件的路径和访问权限 | - | 0x0529 | 无效的 term 文件 | TODO | - | 0x0600 | 无效的表 ID | 确认表名是否正确 | - | 0x0601 | 无效的表 类型 | TODO | - | 0x0602 | 无效的 schema 版本 | TODO | - | 0x0603 | 表已经存在 | 修改表名或放弃操作 | - | 0x0604 | 配置无效 | 查看参考手册纠正配置 | - | 0x0605 | TSDB 初始化失败 | TODO | - | 0x0606 | 磁盘空间耗尽 | 查看磁盘空间耗尽的原因,尝试释放或增加磁盘空间 | - | 0x0607 | 磁盘文件没有访问权限 | 确认启动集群的系统帐户是否有相应的写权限 | - | 0x0608 | 数据文件被破坏 | TODO | - | 0x0609 | 内存耗尽 | 检查内存被耗尽的原因,尝试释放内存 | - | 0x060A | 标签版本过老 | TODO | - | 0x060B | 时间戳不在允许范围内 | 查看参考手册了解允许写入的时间戳规则 | - | 0x060C | 提交消息被破坏 | TODO | - | 0x060D | 无效操作 | TODO | - | 0x060E | 建表消息无效 | TODO | - | 0x060F | 内存跳表中没有表的数据 | TODO | - | 0x0610 | 文件已经存在 | TODO | - | 0x0611 | 需要重新配置该表 | TODO | - | 0x0612 | 建表的信息无效 | TODO | - | 0x0613 | 磁盘空间耗尽 | 尝试释放或增加磁盘空间 | - | 0x0614 | 消息被破坏 |TODO | - | 0x0615 | 无效的标签值 | 修正标签值 | - | 0x0616 | 未缓存最后一行的原始数据 | 修改数据库的 cacheModel 参数 | - | 0x0618 | 该表不存在 | 检查表名是否正确 | - | 0x0619 | 超级表已经存在 | 修改超级表名再次尝试 | - | 0x061A | 超级表不存在 | 检查超级表名是否正确 | - | 0x061B | 表被重新创建 | TODO | - | 0x061C | TDB 环境打开错误 | N/A | - | 0x0700 | 无效的查询句柄 | N/A | - | 0x0701 | 无效的消息 | TODO | - | 0x0702 | 磁盘空间耗尽 | 尝试释放或增加磁盘空间 | - | 0x0703 | 系统内存耗尽 | 尝试释放内存 | - | 0x0704 | 未知错误 | TODO | - | 0x0705 | 重复的 Join Key | 修正查询语句中的 Join Key | - | 0x0706 | 标签过滤条件过多 | 减小查询语句中的标签过滤条件 | - | 0x0707 | 查询不可用 | TODO | - | 0x0708 | TODO | TODO | - | 0x0709 | TODO | TODO | - | 0x070A | 查询中的时间窗口过多 | 修改查询语句以减小时间窗口的数量 | - | 0x070B | 查询缓冲区达到上限 | TODO | - | 0x070C | 多副本数据不一致 | TODO | - | 0x070D | 系统错误 | TODO | - | 0x070E | 无效的时间范围 | 修正查询语句中的时间范围 | - | 0x070F | 无效输入 | 修正查询语句 | - | 0x0720 | 调度器不存在 | TODO | - | 0x0721 | 任务不存在 | TODO | - | 0x0722 | 任务已经存在 | TODO | - | 0x0723 | 任务上下文不存在 | TODO | - | 0x0724 | 任务被取消 | TODO | - | 0x0725 | 任务被停止 | TODO | - | 0x0726 | 任务正在取消中 | TODO | - | 0x0727 | 任务正在停止中 | TODO | - | 0x0728 | 重复操作 | TODO | - | 0x0729 | 任务消息错误 | TODO | - | 0x072A | 作业已经被释放 | TODO | - | 0x072B | 任务状态错误 | TODO | - | 0x072C | in 和 not in 操作符不支持 JSON 类型 | 修正查询语句 | - | 0x072D | 此处不支持 JSON |修正查询语句 | - | 0x072E | group 和 partition by 不支持 JSON 类型 | - | 0x072F | 查询作业不存在 | TODO | - | 0x0800 | License 已经过期 | 重新激活或获取 License | - | 0x0801 | 受限于 License 无法创建 dnode | 获取新的License | - | 0x0802 | 受限于 License 无法创建帐户 | 获取新的 License | - | 0x0803 | 受限于 License 无法创建表 | 获取新的 License | - | 0x0804 | 受限于 License 无法创建数据库 | 获取新的 License | - | 0x0805 | 受限于 License 无法创建用户 | 获取新的 License | - | 0x0806 | 受限于 License 无法创建连接 | 获取新的 License | - | 0x0807 | 受限于 License 无法创建流 | 获取新的 License | - | 0x0808 | 写入速度受限于 License | 获取新的 License | - | 0x0809 | 存储容量受限于 License | 获取新的 License | - | 0x080A | 查询时间受限于 License | 获取新的 License | - | 0x080B | CPU 核数受限于 License | 获取新的 License | - | 0x080C | 受限于 License 无法创建超级表 | 获取新的 License | - | 0x080D | 受限于 License 无法创建表 | 获取新的 License | - | 0x0A00 | TQ 无效配置 | TODO | - | 0x0A01 | TQ 初始化失败 | TODO | - | 0x0A02 | TQ 磁盘空间耗尽 | 尝试释放或增加磁盘空间 | - | 0x0A03 | TQ 没有写磁盘权限 | 确认启动集群的系统帐号是否具有写磁盘权限 | - | 0x0A04 | TQ 文件被破坏 | TODO | - | 0x0A05 | TQ 内存耗尽 | 尝试释放内存 | - | 0x0A06 | TQ 文件已经存在 | TODO | - | 0x0A07 | TQ 创建目录失败 | TODO | - | 0x0A08 | TQ meta 中不存在该 key | TODO | - | 0x0A09 | meta key在事务中不存在 | TODO | - | 0x0A0A | meta key在事务中重复 | TODO | - | 0x0A0B | 消费组不存在 | 指定正确的消费组 | - | 0x0A0C | 该表的 schema 不存在 | 确认表名是否正确 | - | 0x0A0D | 没有已经提交的 offset | TODO | - | 0x1000 | WAL 未知错误 | TODO | - | 0x1001 | WAL 文件被破坏 | TODO | - | 0x1002 | WAL 大小超出上限 | TODO | - | 0x1003 | WAL 使用了错误的版本号 | TODO | - | 0x1004 | 系统内存耗尽 | 尝试释放内存 | - | 0x1005 | WAL 日志不存在 | TODO | - | 0x2201 | 无效的 mount 配置 | 修正 mount 配置参数 | - | 0x2202 | mount 点过多 | TODO | - | 0x2203 | 重复的 primary mount | TODO | - | 0x2204 | primary mount 缺失 | TODO | - | 0x2205 | no mount at tier: TODO | TODO | - | 0x2206 | 文件已经存在 | 更改文件名或者删除该文件 | - | 0x2207 | 无效的级别 | TODO | - | 0x2208 | 没有可用磁盘 | TODO | - | 0x220F | 系统内存耗尽 | TODO | - | 0x2400 | catalog 内部错误 | TODO | - | 0x2401 | 无效的 catalog 输入参数 | TODO | - | 0x2402 | catalog 不可用 | TODO | - | 0x2403 | catalog 系统错误 | TODO | - | 0x2404 | 数据库被删除 | TODO | - | 0x2405 | catalog 不可用 | TODO | - | 0x2406 | 表元数据和 vgroup 不匹配 | TODO | - | 0x2407 | catalog 不存在 | TODO | - | 0x2550 | 无效的消息顺序 | TODO | - | 0x2501 | 调度器状态错误 | TODO | - | 0x2502 | 调度器内部错误 | TODO | - | 0x2504 | 任务超时 | TODO | - | 0x2505 | 作业正在停止中 | TODO | - | 0x2600 | 语法错误 | 参考 SQL 手册纠正 | - | 0x2601 | 不完整的 SQL 语句 | 参考 SQL 手册纠正 | - | 0x2602 | 无效列名 | 使用正确的列名 | - | 0x2603 | 表不存在 | 使用正确的表名 | - | 0x2604 | 表名定义有二义性 | 参考 SQL 手册纠正 | - | 0x2605 | 无效的值类型 | 参考 SQL 手册纠正 | - | 0x2608 | 此处不能使用聚合查询 | 参考 SQL 手册纠正 | - | 0x2609 | ORDER BY 只能用于查询语句中的结果列 | 参考 SQL 手册纠正 | - | 0x260A | GROUP BY 缺失表达式 (TODO) | 参考 SQL 手册纠正 | - | 0x260B | 不是 SELECT 表达式 | 参考 SQL 手册纠正 | - | 0x260C | 不是单一分组的分组函数 (TODO) | 参考 SQL 手册纠正 | - | 0x260D | 标签数量不匹配 | 参考 SQL 手册纠正 | - | 0x260E | 无效的标签名 | 改用正确的标签名 | - | 0x2610 | 名字或密码过长 | 参考 SQL 手册纠正 | - | 0x2611 | 密码不能为空 | 提供非空密码 | - | 0x2612 | 端口无效 | 端口号必须在 (0,65535) 范围内 | - | 0x2613 | 地址格式错误 | 正确格式是 "fqdn: port" | - | 0x2614 | 该语句不再支持 | 参考 SQL 手册纠正 | - | 0x2615 | 时间窗口过小 | 参考 SQL 手册纠正 | - | 0x2616 | 未指定数据库 | 在表名或超级表名前添加 "." 指定数据库 | - | 0x2617 | 标识符无效 | 参考 SQL 手册纠正 | - | 0x2618 | 该数据库中不存在对应的超级表 | 使用正确的数据库名或者超级表名 | - | 0x2619 | 数据库参数无效 | 参考 SQL 手册纠正 | - | 0x261A | 建表参数无效 | 参考 SQL 手册纠正 | - | 0x2624 | GROUP BY 和 窗口子句不能共用 | 参考 SQL 手册纠正 | - | 0x2627 | 聚合函数不支持嵌套 | 参考 SQL 手册纠正 | - | 0x2628 | 在 integer/bool/varchar 类型的列上只支持 状态窗口 | 参考 SQL 手册纠正 | - | 0x2629 | 标签列上不支持状态窗口 | 参考 SQL 手册纠正 | - | 0x262A | 状态窗口查询不支持超级表 | 参考 SQL 手册纠正 | - | 0x262B | 会话之间的 gap 应该是大于 0 的固定大小的窗口 | 参考 SQL 手册纠正 | - | 0x262C | 只在主键时间戳列上支持会话 | 参考 SQL 手册纠正 | - | 0x262D | 窗口偏移量不能是负值 | 参考 SQL 手册纠正 | - | 0x262E | 当 interval 的单位是 "year" 时 offset 的单位不能是 "month" | 参考 SQL 手册纠正 | - | 0x262F | offset 所指定的时间长度应该小于 interval 所指定的时间长度 | 参考 SQL 手册纠正 | - | 0x2630 | 当 interval 是自然年/月时不能使用 slidig | 参考 SQL 手册纠正 | - | 0x2631 | sliding 所指定的时间长度不能大于 interval 所指定的时间长度 | 参考 SQL 手册纠正 | - | 0x2632 | sliding 不能小于 interval 的 1%% | 参考 SQL 手册纠正 | - | 0x2633 | 当使用 JSON 类型的 tag 时只允许这一个 tag 的存在 | 去除其它 tag | - | 0x2634 | 查询块中包含的结果列的数量不正确 | TODO | - | 0x2635 | 时间戳不正确 | TODO | - | 0x2637 | offset/soffset 不能小于 0 | 纠正 offset/soffset | - | 0x2638 | offset/soffset 只能用于 partition by | 参考 SQL 手册纠正 | - | 0x2639 | 无效的 topic 查询 | TODO | - | 0x263A | 不能批量删除超级表 | 请逐个删除 | - | 0x263B | 查询时间范围未指定起止时间或者时间范围过大 | 参考 SQL 手册纠正 | - | 0x263C | 重复的列表 | 参考 SQL 手册纠正 | - | 0x263D | 标签长度超过上限 | 参考 SQL 手册纠正 | - | 0x263E | 行长度超过上限 | 参考 SQL 手册纠正 | - | 0x263F | 不合法的列数量 | 参考 SQL 手册纠正 | - | 0x2640 | 列数过多 | 参考 SQL 手册纠正 | - | 0x2641 | 首列必须是时间戳 | 参考 SQL 手册纠正 | - | 0x2642 | binary/nchar 类型的列长度无效 | 参考 SQL 手册纠正 | - | 0x2643 | 标签列数量无效 | 参考 SQL 手册纠正 | - | 0x2644 | 无权进行该操作 | 参考 SQL 手册纠正 | - | 0x2645 | 无效的流查询 | 参考 SQL 手册纠正 | - | 0x2646 | 无效的 _c0 或 _rowts 表达式 | 参考 SQL 手册纠正 | - | 0x2647 | 无效的时间线函数 | 参考 SQL 手册纠正 | - | 0x2648 | 无效的密码 | 参考 SQL 手册纠正 | - | 0x2649 | 无效的 alter table 语句 | 参考 SQL 手册纠正 | - | 0x264A | 不能删除时间戳主列 | 参考 SQL 手册纠正 | - | 0x264B | 只有 binary/nchar 类型的列能够修改长度 | 参考 SQL 手册纠正 | - | 0x264C | 无效的 tbname 伪列 | 参考 SQL 手册纠正 | - | 0x264D | 无效的函数名 | 参考 SQL 手册纠正 | - | 0x264E | 注释过长 | 参考 SQL 手册纠正 | - | 0x264F | 有些函数只能用在查询的 SELECT 列表中,且不能与其它非标量函数或列混用 | 参考 SQL 手册纠正 | - | 0x2650 | 不支持窗口查询,因为子查询的结果不包含时间戳列 | 参考 SQL 手册纠正 | - | 0x2651 | 任何列都不能被删除 | 参考 SQL 手册纠正 | - | 0x2652 | 只有 标签列可以是 JSON 类型 | 参考 SQL 手册纠正 | - | 0x2653 | 列或标签的值过长 | 参考 SQL 手册纠正 | - | 0x2655 | DELETE 语句必须有一个确定的时间范围 | 参考 SQL 手册纠正 | - | 0x2656 | REDISTRIBUTE VGROUP 语句只支持 1 到 3 个 vgroup | 参考 SQL 手册纠正 | - | 0x2657 | 不支持 Fill | 参考 SQL 手册纠正 | - | 0x2658 | 无效的窗口伪列 | 参考 SQL 手册纠正 | - | 0x2659 | 不允许做窗口查询: TODO | 参考 SQL 手册纠正 | - | 0x265A | 不允许做流计算: TODO | 参考 SQL 手册纠正 | - | 0x265B | 不允许做 Group By | 参考 SQL 手册纠正 | - | 0x265D | interp 子句错误 | 参考 SQL 手册纠正 | - | 0x265E | 窗口查询中不支持该函数 | 参考 SQL 手册纠正 | - | 0x265F | 只支持单表 | 参考 SQL 手册纠正 | - | 0x2660 | 无效的 SMA 索引 | 参考 SQL 手册纠正 | - | 0x2661 | 无效的 SELECT 表达式 | 参考 SQL 手册纠正 | - | 0x2662 | 获取表的元数据失败 | TODO | - | 0x2663 | 表名/表名不唯一 | 参考 SQL 手册纠正 | - | 0x266F | 解析器内部错误 | TODO | - | 0x2700 | 计划器内部错误 | TODO | - | 0x2701 | TODO | TODO | - | 0x2702 | 不支持 cross join | 参考 SQL 手册纠正 | - | 0x2800 | 函数内部错误 | 参考 SQL 手册纠正 | - | 0x2801 | 函数参数个数错误 | 参考 SQL 手册纠正 | - | 0x2802 | 函数参数类型错误 | 参考 SQL 手册纠正 | - | 0x2803 | 函数参数值错误 | 参考 SQL 手册纠正 | - | 0x2804 | 非内置函数 | 参考 SQL 手册纠正 | - | 0x2901 | UDF 正在停止 | TODO | - | 0x2902 | UDF 管道读取错误 | TODO | - | 0x2903 | UDF 连接错误 | TODO | - | 0x2904 | UDF 管道缺失 | TODO | - | 0x2905 | UDF 加载失败 | TODO | - | 0x2906 | UDF 无效状态 | TODO | - | 0x2907 | UDF 无效输入 | TODO | - | 0x2908 | UDF 没有函数句柄 | TODO | - | 0x2909 | UDF 无效的 bufsize | TODO | - | 0x290A | UDF 无效的输出类型 | TODO | - | 0x3000 | 无效的行协议类型 | 修正数据中的协议类型 | - | 0x3001 | 无效的时间戳精度类型 | 修正时间戳精度类型 | - | 0x3002 | 无效的数据格式 | 修正数据格式 | - | 0x3003 | 无效的无模式数据库配置 | 修改配置 | - | 0x3004 | 写入类型与之前的不同 | 修正写入类型 | - | 0x3100 | TSMA 初始化失败 | TODO | - | 0x3101 | TSMA 已经存在 | 放弃重复建立 TSMA | - | 0x3102 | 元数据中没有 TSMA 索引 | TODO | - | 0x3103 | 无效的 TSMA 环境 | TODO | - | 0x3104 | 无效的 TSMA 状态 | TODO | - | 0x3105 | 无效的 TSMA 指针 | TODO | - | 0x3106 | 无效的 TSMA 参数 | 参考 SQL 手册纠正 | - | 0x3107 | cache 中没有该 TSMA 的索引 | TODO | - | 0x3150 | 无效的 RSMA 索引 | TODO | - | 0x3151 | 无效的 RSMA 状态 | TODO | - | 0x3152 | RSMA 创建 qtaskinfo 失败 | TODO | - | 0x3153 | RSMA 文件被破坏 | TODO | - | 0x3200 | 索引正在重建中 |TODO | - | 0x3201 | 无效的索引文件 | TODO | - | 0x4000 | 无效消息 | TODO | \ No newline at end of file diff --git a/docs/zh/14-reference/05-connector/cpp/error-code.md b/docs/zh/14-reference/05-connector/cpp/error-code.md new file mode 100644 index 0000000000..7d25ba6dd6 --- /dev/null +++ b/docs/zh/14-reference/05-connector/cpp/error-code.md @@ -0,0 +1,11 @@ +--- +sidebar_label: 错误码 +title: TDengine C/C++ 连接器错误码 +description: C/C++ 连接器的错误码列表和详细说明 +--- + +本文中详细列举了在使用 TDengine C/C++ 连接器时客户端可能得到的错误码以及所要采取的相应动作。其它语言的连接器在使用原生连接方式时也会所得到的返回码返回给连接器的调用者。 + +| **Error Code** | **说明** | 如何处理错误 | +| -------------- | ------------ | ------------ | +| 0 | 请求处理成功 | None |