C-API是访问PostgreSQL的最强大的方法,令人惊讶的舒适。
在编译期间,您必须将PostgreSQL包含目录(可以通过找到)添加pg_config --includedir到包含路径。
您必须与PostgreSQL客户端共享库链接(libpq.so在UNIX上,libpq.dll在Windows上)。该库位于PostgreSQL库目录中,可通过找到pg_config --libdir。
注意:由于历史原因,该库被称为libpq.so而不是 libpg.so,这对于初学者来说是一个流行的陷阱。
鉴于以下代码示例位于file中coltype.c,将使用以下命令完成编译和链接
gcc -Wall -I "$(pg_config --includedir)" -L "$(pg_config --libdir)" -o coltypecoltype.c-lpq
使用GNU C编译器(考虑添加-Wl,-rpath,"$(pg_config --libdir)"以添加库搜索路径)或
cl /MT /W4 /I <include directory>coltype.c<path to libpq.lib>
在Windows上使用Microsoft VisualC。
/* necessary for all PostgreSQL client programs, should be first */ #include <libpq-fe.h> #include <stdio.h> #include <string.h> #ifdef TRACE #define TRACEFILE "trace.out" #endif int main(int argc, char **argv) { #ifdef TRACE FILE *trc; #endif PGconn *conn; PGresult *res; int rowcount, colcount, i, j, firstcol; /* parameter type should be guessed by PostgreSQL */ const Oid paramTypes[1] = { 0 }; /* parameter value */ const char * const paramValues[1] = { "pg_database" }; /* * Using an empty connectstring will use default values for everything. * If set, the environment variables PGHOST, PGDATABASE, PGPORT and * PGUSER will be used. */ conn = PQconnectdb(""); /* * This can only happen if there is not enough memory * to allocate the PGconn structure. */ if (conn == NULL) { fprintf(stderr, "Out of memory connecting to PostgreSQL.\n"); return 1; } /* check if the connection attempt worked */ if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "%s\n", PQerrorMessage(conn)); /* * Even if the connection failed, the PGconn structure has been * allocated and must be freed. */ PQfinish(conn); return 1; } #ifdef TRACE if (NULL == (trc = fopen(TRACEFILE, "w"))) { fprintf(stderr, "Error opening trace file \"%s\"!\n", TRACEFILE); PQfinish(conn); return 1; } /* tracing for client-server communication */ PQtrace(conn, trc); #endif /* this program expects the database to return data in UTF-8 */ PQsetClientEncoding(conn, "UTF8"); /* perform a query with parameters */ res = PQexecParams( conn, "SELECT column_name, data_type " "FROM information_schema.columns " "WHERE table_name = $1", 1, /* one parameter */ paramTypes, paramValues, NULL, /* parameter lengths are not required for strings */ NULL, /* all parameters are in text format */ 0 /* result shall be in text format */ ); /* out of memory or sever communication broken */ if (NULL == res) { fprintf(stderr, "%s\n", PQerrorMessage(conn)); PQfinish(conn); #ifdef TRACE fclose(trc); #endif return 1; } /* SQL statement should return results */ if (PGRES_TUPLES_OK != PQresultStatus(res)) { fprintf(stderr, "%s\n", PQerrorMessage(conn)); PQfinish(conn); #ifdef TRACE fclose(trc); #endif return 1; } /* get count of result rows and columns */ rowcount = PQntuples(res); colcount = PQnfields(res); /* print column headings */ firstcol = 1; printf("Description of the table \"pg_database\"\n"); for (j=0; j<colcount; ++j) { if (firstcol) firstcol = 0; else printf(": "); printf(PQfname(res, j)); } printf("\n\n"); /* loop through rosult rows */ for (i=0; i<rowcount; ++i) { /* print all column data */ firstcol = 1; for (j=0; j<colcount; ++j) { if (firstcol) firstcol = 0; else printf(": "); printf(PQgetvalue(res, i, j)); } printf("\n"); } /* this must be done after every statement to avoid memory leaks */ PQclear(res); /* close the database connection and release memory */ PQfinish(conn); #ifdef TRACE fclose(trc); #endif return 0; }
本文向大家介绍postgresql 使用Npgsql提供程序从.NET访问Postgresql,包括了postgresql 使用Npgsql提供程序从.NET访问Postgresql的使用技巧和注意事项,需要的朋友参考一下 示例 Npgsql是Postgresql最受欢迎的.NET提供程序之一,它ADO.NET兼容并且与其他.NET数据库提供程序几乎相同地使用。 典型的查询是通过创建命令,绑定参数
这表明Docker postgresql(正在运行)在该端口不可用。我尝试将添加到我的中,但没有成功。有什么提示吗?
问题内容: 我正在尝试使用访存api来带回一些数据,但是一旦检索到它就无法将其映射到控制台。 我得到的错误是 response.map不是函数 所以我试图解析响应(即var data = JSON.parse),该响应不起作用,并显示错误 有趣的是,当对XMLHttp请求执行相同操作时,需要解析它,因此我也想知道为什么这两种检索数据方法之间的区别。 如果有人能指出正确的方向,我将不胜感激。 问题答
我在干什么? 步骤1-启用邻近API: 为了使用接近API,它必须首先在谷歌开发控制台中启用。使用本教程,我为我的项目启用了对邻近API的支持 步骤2-获取凭据: 根据本教程,我需要得到客户端ID和秘密。这就是我困惑的地方。凭据->添加凭据->OAuth2.0客户端ID->选择Chrome App单选按钮(因为我使用的是Postman)->输入Postman的Chrome Web store UR
我试图直接访问Kubernetes API,而不运行。但是当我使用serviceaccount默认值的令牌时,我得到一个403。即使在为此serviceaccount创建了ClusterRole和ClusterRoleBinding之后,请求也会被拒绝403。 我应用的配置如下所示: (它几乎是来自kubernetes io上的文档,只是使用了ServiceAccount作为主题,并将资源更改为p
我正在尝试使用postman对firebase进行RESTAPI调用。当我的安全规则是允许所有用户,包括未经授权的用户时,我已经设法从firebase读取。 但当我使用这个规则时: 我从邮递员那里得到“错误”:“许可被拒绝”。我为谷歌的web oauth2.0客户端做了请求令牌,并拿回了authorization_code令牌。 我试图在URL和标题中使用令牌,用GET尝试过 请帮忙。提前谢谢