选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.0 已于 2015 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

31.10. 杂项函数 #

一如往常,总有一些函数不适合放在任何其他地方。

PQfreemem #

释放libpq分配的内存。

void PQfreemem(void *ptr);

释放 libpq 分配的内存,特别是 PQescapeByteaConnPQescapeByteaPQunescapeByteaPQnotifies 分配的内存。在 Microsoft Windows 上,务必使用此函数,而不是 free()。这是因为只有 DLL 与应用程序使用相同的多线程/单线程、发布/调试和静态/动态标志,才能在 DLL 中分配内存并在应用程序中释放它。在 Microsoft Windows 以外的平台上,此函数与标准库函数 free() 相同。

PQconninfoFree #

释放PQconndefaultsPQconninfoParse分配的数据结构。

void PQconninfoFree(PQconninfoOption *connOptions);

仅调用 PQfreemem 不足以完成此项释放,因为数组还包含指向附属字符串的引用。

PQencryptPassword #

准备一个PostgreSQL密码的加密形式。

char * PQencryptPassword(const char *passwd, const char *user);

这个函数旨在用于那些希望发送类似于ALTER USER joe PASSWORD 'pwd'命令的客户端应用。不在这样一个命令中发送原始的明文密码是一个好习惯,因为它可能被暴露在命令日志、活动显示等等中。相反,在发送之前使用这个函数可以将密码转换为加密的形式。参数是明文密码和该密码所属用户的 SQL 名称。返回值是由malloc分配的字符串,如果内存不足则为NULL。调用者可以假定该字符串不包含任何需要转义的特殊字符。用完之后用PQfreemem释放结果。

PQmakeEmptyPGresult #

用给定的状态,构造一个空PGresult对象。

PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);

这是libpq内部用于分配并初始化一个空PGresult对象的函数。 如果无法分配内存,此函数返回NULL。 将它导出供外部调用,是因为一些应用需要自行生成结果对象,特别是带有错误状态的对象。 如果conn 不为 null,并且status表示错误,指定连接的当前错误消息会被复制到PGresult中。 此外,如果conn 不为 null,连接中注册的所有事件过程也会被复制到PGresult中。 (这些过程不会收到PGEVT_RESULTCREATE调用,但可参见PQfireResultCreateEvents。) 注意,最终应对该对象调用PQclear,就像处理libpq自身返回的PGresult一样。

PQfireResultCreateEvents #

为每一个在PGresult对象中注册的事件过程触发一个PGEVT_RESULTCREATE事件(见第 31.12 节)。成功时返回非 0,如果任何事件过程失败则返回 0。

int PQfireResultCreateEvents(PGconn *conn, PGresult *res);

conn 参数会传递给事件过程,但此函数不会直接使用它。如果事件过程不使用此参数,则可以传入 NULL

已经接收到这个对象的PGEVT_RESULTCREATEPGEVT_RESULTCOPY事件的事件过程不会被再次触发。

此函数与 PQmakeEmptyPGresult 分开的主要原因是,通常适合先创建 PGresult 并填充数据,然后再调用事件过程。

PQcopyResult #

创建 PGresult 对象的副本。副本与源结果没有任何关联,不再需要副本时必须调用 PQclear。函数失败时返回 NULL

PGresult *PQcopyResult(const PGresult *src, int flags);

这不是为了制作一个精确的副本。返回的结果总是放在PGRES_TUPLES_OK状态中,并且不复制源中的任何错误消息。 (但是会复制命令状态字符串。)flags参数确定要复制的其他内容。它是几个标志的按位或。 PG_COPYRES_ATTRS指定复制源结果的属性(列定义)。 PG_COPYRES_TUPLES指定复制源结果的元组。(这也意味着复制属性。) PG_COPYRES_NOTICEHOOKS指定复制源结果的通知钩子。 PG_COPYRES_EVENTS指定复制源结果的事件。(但不复制与源相关的任何实例数据。)

PQsetResultAttrs #

设置PGresult对象的属性。

int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs);

提供的attDescs被复制到结果中。如果attDescs指针为NULLnumAttributes小于1,那么请求将被忽略并且函数成功。如果res已经包含属性,那么函数会失败。如果函数失败,返回值是 0。如果函数成功,返回值是非 0。

PQsetvalue #

设置 PGresult 对象中某个元组的字段值。

int PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len);

该函数会按需自动增长结果的内部元组数组。但是,tup_num参数必须小于或等于PQntuples,这意味着该函数每次只能使元组数组增长一个元组。不过,任何现有元组的任何字段都可以按任意顺序修改。如果field_num处的值已经存在,它将被覆盖。如果len-1valueNULL,字段值将被设置为 SQL 空值。value会被复制到结果的私有存储中,因此在函数返回之后就不再需要它。如果函数失败,返回值为零;如果函数成功,返回值为非零。

PQresultAlloc #

为一个PGresult对象分配附属存储。

void *PQresultAlloc(PGresult *res, size_t nBytes);

使用此函数分配的所有内存都会在清除 res 时释放。函数失败时返回 NULL。与 malloc 一样,返回的内存保证满足任意数据类型的对齐要求。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。