GaussDB(DWS)流式数据入库实践二:C接口

网友投稿 621 2022-05-28

GaussDB(DWS)数据入库方式主要有三种:INSERT/COPY/FDW,三者性能INSERT最差,FDW(gds外表/obs外表)性能最好,但在很多客户场景下都是流式数据,不额外落盘,需要直接入库,这种场景下可以采用copy方式入库,C语言开发应用程序时,ODBC暂不支持copy接口,但libpq支持,示例程序如下:

GaussDB(DWS)流式数据入库实践二:C接口

#include #include #include #include "./include/postgresql/server/libpq-fe.h" int main(int argc, char **argv){ const char *conninfo; PGconn *conn; PGresult *res; const char *buffer = "1,Jack\n2,Rose\n3,Tom"; if (argc > 1){ conninfo = argv[1]; }else{ conninfo = "host=10.185.180.161 port=8000 dbname=postgres user=jack password=Gauss_234"; } conn = PQconnectdb(conninfo); if (PQstatus(conn) != CONNECTION_OK){ fprintf(stderr, "连接数据库失败: %s",PQerrorMessage(conn)); }else{ printf("连接数据库成功!\n"); } res=PQexec(conn,"COPY test FROM STDIN DELIMITER ',';"); if(PQresultStatus(res) != PGRES_COPY_IN){ fprintf(stderr, "copy数据出错1: %s",PQresultErrorMessage(res)); }else{ int len = strlen(buffer); if(PQputCopyData(conn,buffer,len) == 1){ if(PQputCopyEnd(conn,NULL) == 1){ res = PQgetResult(conn); if(PQresultStatus(res) == PGRES_COMMAND_OK){ printf("copy数据成功!\n"); }else{ fprintf(stderr, "copy数据出错2: %s",PQerrorMessage(conn)); } }else{ fprintf(stderr, "copy数据出错3: %s",PQerrorMessage(conn)); } }else{ fprintf(stderr, "copy数据出错4: %s",PQerrorMessage(conn)); } } PQclear(res); PQfinish(conn); return 0; }

EI企业智能 Gauss AP 数据仓库服务 GaussDB(DWS) HUAWEI CONNECT

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C语言 | 判断某年是否只闰年
下一篇:C语言 | 求一个3*3矩阵对角线元素之和
相关文章