I. 教程
II. SQL 语言
III. 服务器管理
- 章14. 安装指导
- 章15. 在 Windows 上安装客户端
- 章16. 操作系统环境
- 章17. 服务器配置
- 章18. 数据库角色和权限
- 章19. 管理数据库
- 章21. 区域
- 章20. 用户认证
- 章22. 日常数据库维护工作
- 章23. 备份与恢复
- 章24. 高可用性与负载均衡
- 章25. 监控数据库的活动
- 章26. 监控磁盘使用情况
- 章27. 可靠性和预写式日志
- 章28. 回归测试
IV. 客户端接口
- Chapter 28. libpq - C 库
- 章29.
- Chapter 30. ecpg - 在 C 里嵌入 SQL
- Chapter 31. 信息模式
- 31.2. 数据类型
- 31.3. informationschemacatalog_name
- 31.4. applicable_roles
- 31.5. check_constraints
- 31.6. columndomainusage
- 31.7. column_privileges
- 31.8. columnudtusage
- 31.9. columns
- 31.10. constraintcolumnusage
- 31.11. constrainttableusage
- 31.12. datatypeprivileges
- 31.13. domain_constraints
- 31.14. domainudtusage
- 31.15. domains
- 31.16. element_types
- 31.17. enabled_roles
- 31.18. keycolumnusage
- 31.20. referential_constraints
- 31.21. rolecolumngrants
- 31.22. roleroutinegrants
- 31.23. roletablegrants
- 31.24. roleusagegrants
- 31.25. routine_privileges
- 31.26. routines
- 31.27. schemata
- 31.28. sql_features
- 31.29. sqlimplementationinfo
- 31.30. sql_languages
- 31.31. sql_packages
- 31.32. sql_sizing
- 31.33. sqlsizingprofiles
- 31.34. table_constraints
- 31.35. table_privileges
- 31.36. tables
- 31.37. triggers
- 31.38. usage_privileges
- 31.39. viewcolumnusage
- 31.40. viewtableusage
- 31.41. views
V. 服务器端编程
- 章33. 扩展 SQL
- 章34. 触发器
- 章35. 规则系统
- 章36. 过程语言
- 章37. PL/pgSQL - SQL 过程语言
- 章38. PL/Tcl - Tcl 过程语言
- 章39. PL/Perl - Perl 过程语言
- 章40. PL/Python - Python 过程语言
- 章41. 服务器编程接口
VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DOMAIN
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER ROLE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT PREPARED
- COMMIT
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE CONSTRAINT TRIGGER
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE OPERATOR CLASS
- CREATE OPERATOR
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DROP OWNED
- DROP AGGREGATE
- DROP CAST
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP OPERATOR CLASS
- DROP OPERATOR
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP TABLE
- DROP TABLESPACE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE TRANSACTION
- PREPARE
- REASSIGN OWNED
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- II. PostgreSQL 客户端应用程序
- III. PostgreSQL 服务器应用程序
VII. 内部
- 章42. PostgreSQL 内部概貌
- 章43. 系统表
- 43.1. 概述
- 43.2. pg_aggregate
- 43.3. pg_am
- 43.4. pg_amop
- 43.5. pg_amproc
- 43.6. pg_attrdef
- 43.7. pg_attribute
- 43.8. pg_authid
- 43.9. pgauthmembers
- 43.10. pg_autovacuum
- 43.11. pg_cast
- 43.12. pg_class
- 43.13. pg_constraint
- 43.14. pg_conversion
- 43.15. pg_database
- 43.16. pg_depend
- 43.17. pg_description
- 43.18. pg_index
- 43.19. pg_inherits
- 43.20. pg_language
- 43.21. pg_largeobject
- 43.22. pg_listener
- 43.23. pg_namespace
- 43.24. pg_opclass
- 43.25. pg_operator
- 43.26. pg_pltemplate
- 43.27. pg_proc
- 43.28. pg_rewrite
- 43.29. pg_shdepend
- 43.30. pg_shdescription
- 43.31. pg_statistic
- 43.32. pg_tablespace
- 43.33. pg_trigger
- 43.34. pg_type
- 43.35. 系统视图
- 43.36. pg_cursors
- 43.37. pg_group
- 43.38. pg_indexes
- 43.39. pg_locks
- 43.40. pgpreparedstatements
- 43.41. pgpreparedxacts
- 43.42. pg_roles
- 43.43. pg_rules
- 43.44. pg_settings
- 43.45. pg_shadow
- 43.46. pg_stats
- 43.47. pg_tables
- 43.48. pgtimezoneabbrevs
- 43.49. pgtimezonenames
- 43.50. pg_user
- 43.51. pg_views
- 章44. 前/后端协议
- 章45. PostgreSQL 编码约定
- 章46. 本地语言支持
- 章47. 书写一个过程语言处理器
- 章48. 基因查询优化器
- 章49. 索引访问方法接口定义
- 章50. GiST 索引
- 章51. GIN 索引
- 章52. 数据库物理存储
- 章53. BKI 后端接口
- 章54. 规划器如何使用统计信息
VIII. 附录
28.2. 连接状态函数
这些函数可以用于询问现存数据库连接对象的状态。
Tip:libpq应用程序员应该仔细维护
PGconn
结构。使用下面的访问函数来获取PGconn
的内容。避免直接引用PGconn
结构里的字段,因为这些字段在今后可能被改变。(从 PostgreSQL 版本 6.4 开始, 类型struct
PGconn
后面的定义甚至都没有放在libpq-fe.h
里。如果你有一些直接访问PGconn
数据域的旧代码,你可以通过包含libpq-int.h
来访问它们,但我们鼓励你赶快修改那些代码。)
下面的函数返回连接建立时的参数。这些参数在 PGconn
对象的生命期期间是固定的。
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
PQoptions
返回连接请求中传递的命令行选项。char *PQoptions(const PGconn *conn);
下面的函数返回那些在对 PGconn
对象进行操作的过程中可能变化的状态数据。
PQstatus
返回连接的状态。
ConnStatusType PQstatus(const PGconn *conn);
这个状态可以是一系列值之一。不过,我们在一个异步连接过程外面只能看到其中的两个:
CONNECTION_OK
或CONNECTION_BAD
。一个与数据库的成功的连接返回状态CONNECTION_OK
。一次失败的企图用状态CONNECTION_BAD
标识。通常,一个 OK 状态将保持到PQfinish
,但是一个通讯失败可能会导致状态过早地改变为CONNECTION_BAD
。这时应用可以试着调用PQreset
来恢复。参阅
PQconnectStart
和PQconnectPoll
条目看看可能出现的其他的状态码。PQtransactionStatus
返回当前服务器的事务内状态。
PGTransactionStatusType PQtransactionStatus(const PGconn *conn);
状态可以是
<PQTRANS_IDLE
(当前空闲),PQTRANS_ACTIVE
(正在处理一个命令),PQTRANS_INTRANS
(空闲,在一个合法的事务块内),或者PQTRANS_INERROR
(空闲,在一个失败的事务块内)。如果连接有问题,则返回PQTRANS_UNKNOWN
。只有在一个查询发送给了服务器并且还没有完成的时候才返回PQTRANS_ACTIVE
。Caution 如果使用一个支持
autocommit
参数,并且设置为关闭的 PostgreSQL 7.3 版本的服务器,那么PQtransactionStatus
将给出不正确的结果。服务器端的 autocommit (自动提交)特性已经废弃了,在将来的版本的服务器中不再存在。PQparameterStatus
查找服务器的一个当前参数设置。
const char *PQparameterStatus(const PGconn *conn, const char *paramName);
有些参数在建立连接或者它们的值改变的时候会由服务器自动报告。
PQparameterStatus
可以用于查询这些设置。如果它认识这些参数,那么它返回当前值,否则返回NULL
。当前版本报告的参数有
server_version
,server_encoding
,client_encoding
,session_authorization
,DateStyle
,TimeZone
,integer_datetimes
和standard_conforming_strings
。(版本 8.0 之前没有报告server_encoding
,TimeZone
和integer_datetimes
。standard_conforming_strings
在版本 8.1 之前没有报告。)请注意server_version
,server_encoding
和integer_datetimes
不能在启动后修改。协议版本 3.0 之前的服务器不会报告参数设置,但是 libpq 里包含一些逻辑用于获取
server_version
和client_encoding
的数值。我们鼓励应用里面使用PQparameterStatus
,而不是使用特殊的代码来检测这些值。(不过要注意,在 3.0 之前的连接协议里,启动后通过SET
改变了client_encoding
将不会被PQparameterStatus
反映出来。)对于server_version
,又见PQserverVersion
,它返回数值形式,更容易进行比较。如果没有为
standard_conforming_strings
报告数值,应用可以假设它是false
,也就是说,在字串文本里,把反斜扛当作逃逸。同样,如果出现了这个参数,就可以当作一个标志,表示接受逃逸字串(E'...'
)的语法。尽管返回的指针声明为
const
,它实际上指向一个和PGconn
结构关联的可变的存储区。因此假设这个指针跨查询保持有效是不明智的。PQprotocolVersion
查询所使用的前/后端协议。
int PQprotocolVersion(const PGconn *conn);
应用可能希望使用这个函数来判断某种特性是否被支持。目前,可能的数值是 2(2.0 版本的协议),3(3.0 版本的协议),或者零(连接错误)。在连接启动完成之后,这个数值将不会改变,但是在连接重置的过程中,理论上是可能改变的。3.0 协议通常将用于与 PostgreSQL 7.4 或者更新版本的服务器通讯;7.4 以前的版本只支持 2.0 版本的协议。(1.0 版本的协议已经过时了,不再被 libpq 支持。)
PQserverVersion
Returns an integer representing the backend version.
int PQserverVersion(const PGconn *conn);
应用可以使用这个函数判断它们连接的数据库服务器的版本。数字是通过把主、次、以及发布版本好转换成两位十进制数并且把它们连接在一起组成的。比如,版本 7.4.2将转换为 70402,而 8.1 将转换为 80100(不显示前导的零)。如果连接失败,则返回零。
PQerrorMessage
返回连接中操作产生的最近的错误信息。
char *PQerrorMessage(const PGconn *conn);
几乎所有libpq函数在失败时都会为
PQerrorMessage
设置一个信息。注意libpq的传统是,一个非空的PQerrorMessage
将在结尾包含一个新行。调用者不应该直接释放结果。结果的释放是在将PGconn
句柄传递给PQfinish
的时候自动进行的。我们不能假设在不同的PGconn
结构操作中,结果字串都是一样的。PQsocket
获取与服务器连接的套接字的文件描述符编号。一个有效的描述符应该是大于或等于 0;结果为 -1 表示当前没有与服务器的连接打开。(在正常的操作中,这个结果不会改变,但是可能在启动或者重置的过程中变化。)
int PQsocket(const PGconn *conn);
PQbackendPID
返回处理此连接的服务器服务器的进程号ID(PID)。
int PQbackendPID(const PGconn *conn);
这个服务器PID 在调试和对比
NOTIFY
信息 (包含发出通知的服务器进程的 PID )时很有用。注意该PID 属于运行数据库服务器的主机的进程,而不是本地主机!PQgetssl
返回连接使用的 SSL 结构,或者如果没有使用 SSL 的话返回 NULL。
SSL *PQgetssl(const PGconn *conn);
这个结构可以用于核实加密级别,检查服务器认证等信息。参考OpenSSL 文档获取关于这个结构的更多信息。
为了获取这个函数的正确原形,你必须定义
USE_SSL
。这样做会自动包含来自OpenSSL的ssl.h
。
Prev | Home | Next |
libpq - C 库 | Up | 命令执行函数 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论