33.11. 杂项函数

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

PQfreemem

释放libpq分配的内存。

void PQfreemem(void *ptr);

释放libpq分配的内存,尤其是PQescapeByteaConnPQescapeByteaPQunescapeByteaPQnotifies分配的内存。特别重要的是,在微软 Windows 上使用这个函数,而不是free()。这是因为只有 DLL 和应用的当多线程/单线程、发布/调试以及静态/动态标志相同时,才能在一个 DLL 中分配内存并且在应用中释放它。在非微软 Windows 平台上,这个函数与标准库函数free()相同。

PQconninfoFree

释放PQconndefaultsPQconninfoParse分配的数据结构。

void PQconninfoFree(PQconninfoOption *connOptions);

一个简单的PQfreemem不会做这些,因为数组包含对子字符串的引用。

PQencryptPasswordConn

准备一个PostgreSQL口令的加密形式。

char *PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user, const char *algorithm);

这个函数旨在用于那些希望发送类似于ALTER USER joe PASSWORD 'pwd'命令的客户端应用。不在这样一个命令中发送原始的明文密码是一个好习惯,因为它可能被暴露在命令日志、活动显示等等中。相反,在发送之前使用这个函数可以将口令转换为加密的形式。

algorithm指定用于加密口令的加密算法。目前支持的算法是 md5scram-sha-256,(onoff 也被接受为md5的别名,以与旧版服务器版本兼容)。 请注意,在PostgreSQL版本10中引入了对scram-sha-256 的支持,并且在旧版服务器版本中无法正常工作。如果algorithm 是NULL,则此函数将向服务器查询password_encryption 设置的当前值。如果当前事务中止,或者连接忙于执行另一个查询,则可能会阻塞, 并会失败。如果您希望服务器使用默认算法,但希望避免阻塞, 请在调用PQencryptPasswordConn之前亲自查询 password_encryption,并将该值作为algorithm传递。

返回值是malloc分配的一个字符串。 调用者可以假定该字符串中不包含任何需要转义的特殊字符。当使用结束之后, 用PQfreemem释放结果。错误时,返回NULL, 并且一个合适的消息被存储在连接对象中。

PQencryptPassword

准备一个PostgreSQL口令的md5加密形式。

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

PQencryptPasswordPQencryptPasswodConn 的一个较旧的,废弃的版本。区别在于PQencryptPassword 不需要连接对象,并且始终使用md5作为加密算法。

PQmakeEmptyPGresult

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

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

这是libpq内部用于分配并初始化一个空PGresult对象的函数。如果不能分配内存,那么这个函数返回NULL。它也是可以对外使用的,因为一些应用认为它可以用于产生结果对象(特别是带有错误状态的对象)本身。如果conn非空,并且status表示一个错误,那么指定连接的当前错误消息会被复制到PGresult中。如果conn非空,那么连接中的任何已注册事件过程也会被复制到PGresult中(它们不会获得PGEVT_RESULTCREATE调用,但会看到PQfireResultCreateEvents)。注意在该对象上最终应该调用PQclear,正如对libpq本身返回的PGresult对象所作的那样。

PQfireResultCreateEvents

为每一个在PGresult对象中注册的事件过程触发一个PGEVT_RESULTCREATE事件(见第 33.13 节)。成功时返回非 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参数决定还要拷贝些什么。它通常是几个标志的按位 OR。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是 -1,或valueNULL, 该域值会被设置为一个 SQL 空值。value会被复制到结果的私有存储中,因此函数返回后就不再需要了。如果函数失败,返回值是 0。如果函数成功,返回值会是非 0。

PQresultAlloc

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

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

res被清除时,这个函数分配的内存也会被释放掉。如果函数失败,返回值是NULL。结果被保证为按照数据的任意类型充分地对齐,正如malloc所作的。

PQlibVersion

返回所使用的libpq版本。

int PQlibVersion(void);

在运行时,这个函数的结果可以被用来决定在当前已载入的 libpq 版本中特定的功能是否可用。 例如,这个函数可以被用来决定哪些选项可以被用于PQconnectdb

结果是通过将库的主要版本号乘以10000并添加次要版本号形成的。 例如,版本10.1将返回100001,版本11.0将返回110000。如果连接不正确,则返回零。

在主版本10之前,PostgreSQL使用三部分版本号, 前两部分代表主要版本。对于这些版本,PQserverVersion 对每个部分使用两个数字;例如版本9.1.5将返回90105,版本9.2.0将返回90200。

因此,为确定功能兼容性,应用程序应将PQserverVersion 的结果除以100而不是10000,以确定逻辑主要版本号。在所有发行版系列中, 只有最后两位数字在次版本(错误修复版本)之间有所不同。

注意

这个函数出现于PostgreSQL版本 9.1,因此它不能被用来在早期的版本中检测所需的功能,因为调用它将会创建一个对版本 9.1 或更高版本的链接依赖。

本文转自PostgreSQL中文社区,原文链接:33.11. 杂项函数

PostgreSQL 10.1 手册_部分 IV. 客户端接口_第 33 章 libpq - C 库_33.11. 杂项函数相关推荐

  1. PostgreSQL 10.1 手册_部分 IV. 客户端接口_第 33 章 libpq - C 库_33.13. 事件系统

    33.13. 事件系统 33.13.1. 事件类型33.13.2. 事件回调函数33.13.3. 事件支持函数33.13.4. 事件实例 libpq的事件系统被设计为通知已注册的事件处理器它感兴趣的l ...

  2. PostgreSQL 10.1 手册_部分 IV. 客户端接口_第 34 章 大对象_34.2. 实现特性

    34.2. 实现特性 大对象的实现将大对象分解成很多"数据块"并且将这些数据块存储在数据库的行中.一个B-tree索引用来保证在进行随机访问读写时能够根据数据块号快速地搜索到正确的 ...

  3. PostgreSQL 10.1 手册_部分 II. SQL 语言

    部分 II. SQL 语言 这部份描述在PostgreSQL中SQL语言的使用.我们从描述SQL的一般语法开始,然后解释如何创建保存数据的结构.如何填充数据库以及如何查询它.中间的部分列出了在SQL命 ...

  4. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 20 章 客户端认证

    第 20 章 客户端认证 目录 20.1. pg_hba.conf文件20.2. 用户名映射20.3. 认证方法 20.3.1. 信任认证20.3.2. 口令认证20.3.3. GSSAPI 认证20 ...

  5. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.4. 字符串函数和操作符...

    9.4. 字符串函数和操作符 9.4.1. format 本节描述了用于检查和操作字符串值的函数和操作符.在这个环境中的串包括所有类型character.character varying和text的 ...

  6. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 16 章 从源代码安装_16.5. 安装后设置...

    16.5. 安装后设置 16.5.1. 共享库16.5.2. 环境变量 16.5.1. 共享库 在一些有共享库的系统里,你需要告诉你的系统如何找到新安装的共享库.那些并不是必须做这个工作的系统包括 F ...

  7. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 14 章 性能提示_14.1. 使用EXPLAIN

    14.1. 使用EXPLAIN 14.1.1. EXPLAIN基础 14.1.2. EXPLAIN ANALYZE 14.1.3. 警告 PostgreSQL为每个收到查询产生一个查询计划. 选择正确 ...

  8. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.11. 客户端连接默认值...

    19.11. 客户端连接默认值 19.11.1. 语句行为 19.11.2. 区域和格式化 19.11.3. 共享库预载入 19.11.4. 其他默认值 19.11.1. 语句行为 search_pa ...

  9. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.10. 位串类型

    8.10. 位串类型 位串就是一串 1 和 0 的串.它们可以用于存储和可视化位掩码.我们有两种类型的 SQL 位类型:bit(n)和bit varying(n),其中 n是一个正整数. bit类型的 ...

最新文章

  1. 视频+课件| PointDSC:基于特征匹配的点云配准方法(CVPR2021)
  2. 如何精确评估开发时间的 4 个小套路?
  3. 微信8年,你从中学到了什么?
  4. JedisPool无法获得资源问题
  5. c语言实战1200例 pdf6,C语言程序设计6.6.2.pdf
  6. 简单排序--选择排序
  7. 一 python编程基础
  8. plsql提示列快捷键_20种VSCode快捷键清单,助你更快编码
  9. reinterpret_cast 最小demo
  10. Cmdkey 凭证管理器工具
  11. .NET MVC4 本地正常 部署 服务器错误
  12. 汉诺塔c++_C语言,递归解决汉诺塔问题
  13. 制作微软引导盘实现装系统0失败uefi启动MediaCreationTool
  14. python波形分析_[转载]频谱分析:基于python画出时域频域波形
  15. linux编译 __stdcall,Linux下的stdcall 约定格式
  16. java中的character_什么是Java Character类?Character类的常用方法详解
  17. git reset 3种方式
  18. 开放式耳机新巅峰!南卡OE Pro兼备澎湃音质、舒适佩戴、创新设计
  19. Unity----VR摄像机(浅谈)
  20. 关于汽油必须知道的11件事 可能是最全的油品全解

热门文章

  1. 进程、线程相关知识点整理
  2. 用soapUI测试webservice
  3. 一个SPS + K2 + InfoPath + Mobile + Exchange的工作流程演示系统
  4. Flash与.NET的通信(三):LoadVars对象的应用
  5. shell中的expect命令
  6. C语言工厂方法模式,工厂函数模式 (C语言实现)
  7. linux飞行模式自动开机,解决 win10飞行模式 无限自动开关 无法关闭
  8. appSettings 配置mysql_app.config数据库配置字符串的三种取法
  9. centos radius mysql_centos6.5下安装freeradius2.2.9+mysql
  10. oracle单表存储记录,oracle从各个表获得数据保存到另一个表