libpq-c编程接口

postgresql常用操作:

\?: 查看所有帮助 
\l: 查看所有数据库 
\c dataname: 切换数据库 
\dt: 查看所有自己创建的表 
\dt+: 查看所有自己创建的表,显示表的相关内容占的磁盘大小 
\dt(+) tablename: 参看指定表 
\dv: 查看所有自己创建的视图 
\dv+: 查看所有自己创建的视图,显示大小 
\df: 查看所有自己创建的function 
\df+: 查看所有自己创建的function,显示function的内容 
\df(+) func_name: 显示指定的function 
\ef func_name: 编辑function 
\dy:查看触发器 
\dx: 查看添加的PostgreSQL扩展模块 
\du: 查看所有角色 
\dp viewortable: 查看表或视图的权限 
\sf+ 函数名: 查看函数的创建语句
查看建表语句:
pg_dump -U username databasename -W -s -t tablename
-s, --schema-only            只转储模式, 不包括数据
-t, --table=TABLE            只转储指定名称的表


1、连接控制函数:

PQconnectdbParams
开启一个到数据库服务器的新连接。
PGconn *PQconnectdbParams(const char * const *keywords,
                          const char * const *values,
                          int expand_dbname);
这个函数使用从两个以NULL结尾的数组中取得的参数打开一个新的数据库连接。第一个数组keywords被定义为一个字符串数组,每一个元素是一个关键词。
第二个数组values给出了每个关键词的值。和下面的PQsetdbLogin不同,可以在不改变函数签名的情况下扩展参数集合,因此使用这个函数(或者与之相似的非
阻塞的PQconnectStartParams和PQconnectPoll)对于新应用编程要更好。当expand_dbname为非零时,dbname 关键词的值被允许识别为一个连接字符串
被传递的数组可以为空,这样就会使用所有默认参数。也可以只包含一个或几个参数设置。两个参数数组应该在长度上匹配。对于参数数组的处理将会停止于keywords
数组中第一个非-NULL元素。

PQconnectdb
开启一个到数据库服务器的新连接。
PGconn *PQconnectdb(const char *conninfo);
这个函数使用从字符串conninfo中得到的参数开启一个新的数据库连接。
被传递的字符串可以为空,这样将会使用所有的默认参数。也可以包含由空格分隔的一个或多个参数设置,还可以包含一个URI。

PQsetdbLogin
开启一个到数据库服务器的新连接。
PGconn *PQsetdbLogin(const char *pghost,
                     const char *pgport,
                     const char *pgoptions,
                     const char *pgtty,
                     const char *dbName,
                     const char *login,
                     const char *pwd);
这是PQconnectdb的带有固定参数集合的前辈。它具有相同的功能,不过其中缺失的参数将总是采用默认值。对任意一个固定参数写NULL或一个空字符串将会使它采用默认值。

PQsetdb
开启一个到数据库服务器的新连接。
PGconn *PQsetdb(char *pghost,
                char *pgport,
                char *pgoptions,
                char *pgtty,
                char *dbName);
这是一个调用PQsetdbLogin的宏,其中为login和pwd参数使用空指针。提供它是为了向后兼容非常老的程序。

PQconnectStartParams
PQconnectStart
PQconnectPoll
以非阻塞的方式建立一个到数据库服务器的连接。

在连接期间的任意时刻,该连接的状态可以通过调用PQstatus来检查。如果这个调用返回CONNECTION_BAD,那么连接过程已经失败。
如果该调用返回CONNECTION_OK,则该连接已经准备好。如前所述,这些状态同样都可以从PQconnectPoll的返回值检测。在一个异步连接过程中
(也只有在这个过程中)也可能出现其他状态。
注意如果PQconnectStart返回一个非空的指针,你必须在用完它之后调用PQfinish来处理那些结构和任何相关的内存块。即使连接尝试失败或被放弃时也必须完成这些工作。

PQconndefaults
返回默认连接选项。
PQconninfoOption *PQconndefaults(void);
typedef struct
{
    char   *keyword;   /* 该选项的关键词 */
    char   *envvar;    /* 依赖的环境变量名 */
    char   *compiled;  /* 依赖的内建默认值 */
    char   *val;       /* 选项的当前值,或者 NULL */
    char   *label;     /* 连接对话框中域的标签 */
    char   *dispchar;  /* 指示如何在一个连接对话框中显示这个域。值是:
                          ""        显示输入的值
                          "*"       口令域 - 隐藏值
                          "D"       调试选项 - 默认不显示 */
    int     dispsize;  /* 用于对话框的以字符计的域尺寸 */
} PQconninfoOption;
在处理完选项数组后,把它交给PQconninfoFree释放。如果没有这么做, 每次调用PQconndefaults都会导致一小部分内存泄漏

PQconninfo
返回被一个活动连接使用的连接选项。
PQconninfoOption *PQconninfo(PGconn *conn);
返回一个连接选项数组。这可以用来确定用于连接服务器的所有可能的PQconnectdb选项和它们的当前缺省值。返回值指向一个PQconninfoOption结构的数组,
该数组以一个包含空keyword指针的条目结束。上述所有对于PQconndefaults的注解也适用于PQconninfo的结果。


PQconninfoParse
返回从提供的连接字符串中解析到的连接选项。
PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg);
解析一个连接字符串并且将结果选项作为一个数组返回,或者在连接字符串有问题时返回NULL。这个函数可以用来抽取所提供的连接字符串中的PQconnectdb选项。
返回值指向一个PQconninfoOption结构的数组,该数组以一个包含空keyword指针的条目结束。
所有合法选项将出现在结果数组中,但是任何在连接字符串中没有出现的选项的PQconninfoOption的val会被设置为NULL,默认值不会被插入。
在处理完选项数组后,把它交给PQconninfoFree释放。如果没有这么做, 每次调用PQconninfoParse都会导致一小部分内存泄漏。

PQfinish
关闭与服务器的连接。同时释放PGconn对象使用的内存。
void PQfinish(PGconn *conn);

PQreset
重置与服务器的通讯通道。
void PQreset(PGconn *conn);
此函数将关闭与服务器的连接,并且使用所有之前使用过的参数尝试重新建立与同一个服务器的连接。这可能有助于在工作连接丢失后的错误恢复。


PQresetStart
PQresetPoll
以非阻塞方式重置与服务器的通讯通道。

PQpingParams
PQpingParams报告服务器的状态。它接受与PQconnectdbParams相同的连接参数。获得服务器状态不需要提供正确的用户名、口令或数据库名。
不过,如果提供了不正确的值,服务器将记录一次失败的连接尝试。

连接参数详解略
hostaddr=127.0.0.1 port=5432 dbname=uts user=uts 

2、连接状态函数
PQdb
返回该连接的数据库名。
char *PQdb(const PGconn *conn);
PQuser
返回该连接的用户名。
char *PQuser(const PGconn *conn);
PQpass
返回该连接的口令。
char *PQpass(const PGconn *conn);
PQhost
返回该连接的服务器主机名。
char *PQhost(const PGconn *conn);
PQport
返回该连接的端口。
char *PQport(const PGconn *conn);
PQtty
返回该连接的调试TTY(这已被废弃,因为服务器不再关心TTY设置,但这个函数保持了向后兼容)。
char *PQtty(const PGconn *conn);
PQoptions
返回被传递给连接请求的命令行选项。
char *PQoptions(const PGconn *conn);
PQstatus
返回该连接的状态。
ConnStatusType PQstatus(const PGconn *conn);
该状态可以是一系列值之一。不过,其中只有两个在一个异步连接过程之外可见:CONNECTION_OK和CONNECTION_BAD。一个到数据库的完好连接的状态为CONNECTION_OK。
一个失败的连接尝试则由状态CONNECTION_BAD表示。通常,一个 OK 状态将一直保持到PQfinish,但是一次通信失败可能导致该状态过早地改变为CONNECTION_BAD。
在那种情况下,该应用可以通过调用PQreset尝试恢复。
PQtransactionStatus
返回服务器的当前事务内状态。
PGTransactionStatusType PQtransactionStatus(const PGconn *conn);
该状态可能是PQTRANS_IDLE(当前空闲)、 PQTRANS_ACTIVE(一个命令运行中)、 PQTRANS_INTRANS(空闲,处于一个合法的事务块中) 或者PQTRANS_INERROR
(空闲,处于一个失败的事务块中)。 如果该连接损坏,将会报告PQTRANS_UNKNOWN。 只有当一个查询已经被发送给服务器并且还没有完成时,才会报告PQTRANS_ACTIVE。
PQparameterStatus
查找服务器的一个当前参数设置。
const char *PQparameterStatus(const PGconn *conn, const char *paramName);
某一参数值会被服务器在连接开始或值改变时自动报告。PQparameterStatus可以被用来询问这些设置。它为已知的参数返回当前值,为未知的参数返回NULL。
PQprotocolVersion
询问所使用的前端/后端协议。
int PQprotocolVersion(const PGconn *conn);
PQserverVersion
返回一个表示后端版本的整数。
int PQserverVersion(const PGconn *conn);
PQerrorMessage
返回连接上的一个操作最近产生的错误消息。
char *PQerrorMessage(const PGconn *conn);几乎所有的libpq在失败时都会为PQerrorMessage设置一个消息。注意按照libpq习惯,
一个非空PQerrorMessage结果由多行构成,并且将包括一个尾部新行。调用者不应该直接释放结果。当相关的PGconn句柄被传递给PQfinish时,
它将被释放。在PGconn结构上的多个操作之间,不能指望结果字符串会保持不变。

3、命令执行函数
PQexec
提交一个命令给服务器并且等待结果。
PGresult *PQexec(PGconn *conn, const char *command);
返回一个PGresult指针或者可能是一个空指针。除了内存不足的情况或者由于严重错误无法将命令发送给服务器之外,一般都会返回一个非空指针。
PQresultStatus函数应当被调用来检查返回值是否代表错误(包括空指针的值,它会返回PGRES_FATAL_ERROR)。用PQerrorMessage可得到关于那些错误的详细信息。
PQexecParams
提交一个命令给服务器并且等待结果,它可以在 SQL 命令文本之外独立地传递参数。
PGresult *PQexecParams(PGconn *conn,
                       const char *command,
                       int nParams,
                       const Oid *paramTypes,
                       const char * const *paramValues,
                       const int *paramLengths,
                       const int *paramFormats,
                       int resultFormat);
PQexecParams与PQexec相似,但是提供了额外的功能:参数值可以与命令字符串分开指定,并且可以以文本或二进制格式请求查询结果。
PQexecParams相对于PQexec的主要优点是参数值可以从命令串中分离,因此避免了冗长的书写、容易发生错误的引用以及转义。
PQprepare
提交一个请求用给定参数创建一个预备语句并且等待完成。
PGresult *PQprepare(PGconn *conn,
                    const char *stmtName,
                    const char *query,
                    int nParams,
                    const Oid *paramTypes);
PQprepare创建一个后面会由PQexecPrepared执行的预备语句。这种特性允许将被反复执行的命令只被解析和规划一次,而不是在每次被执行时都解析和规划。
PQexecPrepared
发送一个请求来用给定参数执行一个预备语句,并且等待结果。
PGresult *PQexecPrepared(PGconn *conn,
                         const char *stmtName,
                         int nParams,
                         const char * const *paramValues,
                         const int *paramLengths,
                         const int *paramFormats,
                         int resultFormat);
PGresult结构封装了由服务器返回的结果。libpq应用程序员应该小心地维护PGresult的抽象。使用下面的存储器函数来得到PGresult的内容。避免直接引用PGresult结构的域,因为它们可能在未来更改。
PQresultStatus
返回该命令的结果状态。
ExecStatusType PQresultStatus(const PGresult *res);
PQresStatus
将PQresultStatus返回的枚举转换成描述状态编码的字符串常量。调用者不应该释放结果。
char *PQresStatus(ExecStatusType status);
PQresultErrorMessage
返回与该命令相关的错误消息,如果有错误则会返回一个空字符串。
char *PQresultErrorMessage(const PGresult *res);
紧跟着一个PQexec或PQgetResult调用,PQerrorMessage(在连接上)将返回与PQresultErrorMessage相同的字符串(在结果上)。
不过,一个PGresult将保持它的错误消息直到被销毁,而连接的错误消息将在后续操作被执行时被更改。当你想要知道与一个特定PGresult相关的状态,
使用PQresultErrorMessage。而当你想要知道连接上最后一个操作的状态,使用PQerrorMessage。

PQresultErrorMessage用来描述出错信息比PQresStatus有用。


PQclear
Frees the storage associated with a 释放与一个PGresult相关的存储。每一个命令结果不再需要时应该用PQclear释放。
void PQclear(PGresult *res);

这些函数被用来从一个代表成功查询结果(也就是状态为PGRES_TUPLES_OK或者PGRES_SINGLE_TUPLE)的PGresult对象中抽取信息。
PQntuples
返回查询结果中的行(元组)数。因为它返回一个整数结果,在 32 位操作系统上大型的结果集可能使返回值溢出。
int PQntuples(const PGresult *res);
PQnfields
返回查询结果中每一行的列(域)数。
int PQnfields(const PGresult *res);
PQfname
返回与给定列号相关联的列名。列号从 0 开始。调用者不应该直接释放该结果。它将在相关的PGresult句柄被传递给PQclear之后被释放。
char *PQfname(const PGresult *res,
              int column_number);
如果列号超出范围,将返回NULL。
PQfnumber
返回与给定列名相关联的列号。
int PQfnumber(const PGresult *res,
              const char *column_name);
PQgetvalue
返回一个PGresult的一行的单一域值。行和列号从 0 开始。调用者不应该直接释放该结果。它将在相关的PGresult句柄被传递给PQclear之后被释放。
char *PQgetvalue(const PGresult *res,
                 int row_number,
                 int column_number);
PQgetisnull
测试一个域是否为空值。行号和列号从 0 开始。
int PQgetisnull(const PGresult *res,
                int row_number,
                int column_number);
PQgetlength
返回一个域值的真实长度,以字节计。行号和列号从 0 开始。
int PQgetlength(const PGresult *res,
                int row_number,
                int column_number);

4、异步命令处理
PQexec函数对于在普通的同步应用中提交命令是足以胜任的。但是对于异步不太胜任,PQexec会等待命令完成,PQexec只能返回一个PGresult结构。
如果提交的命令串包含多个SQL命令, 除了最后一个PGresult之外都会被PQexec丢弃。


5、COPY命令相关的函数
整个处理是应用首先通过PQexec或者一个等效的函数发出 SQL COPY命令。对这个命令的响应(如果命令无误)将是一个状态代码是PGRES_COPY_OUT或 
者PGRES_COPY_IN(取决于指定的拷贝方向)的PGresult对象。应用然后就应该使用这一节的函数接收或者传送数据行。在数据传输结束之后,另外一个PGresult
对象会被返回以表明传输的成功或者失败。它的状态将是:PGRES_COMMAND_OK表示成功,PGRES_FATAL_ERROR表示发生了一些问题。此时我们可以通过PQexec发出
进一步的 SQL 命令(在COPY操作的处理过程中,不能用同一个连接执行其它 SQL 命令)。

6、控制函数
PQclientEncoding
返回客户端编码。
int PQclientEncoding(const PGconn *conn);
请注意,它返回的是编码 ID,而不是一个符号串字符串,如EUC_JP。 如果不成功,它会返回 -1。要把一个编码 ID 转换为为一个编码名称,可以用:
char *pg_encoding_to_char(int encoding_id);

事件处理、环境变量、口令文件、连接服务文件、连接参数的LDAP查找、SSL支持、在线程化程序中的行为、大对象、
ECPG-C中的嵌入式SQL(与 PostgreSQL 服务器使用普通的前端/后端协议通信。)、信息模式

7、例子程序
https://doxygen.postgresql.org/testlibpq_8c.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值