国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄 搜索
前言 何為PostgreSQL? PostgreSQL簡(jiǎn)史 格式約定 更多信息 臭蟲匯報(bào)指導(dǎo) I. 教程 章1. 從頭開(kāi)始 1.1. 安裝 1.2. 體系基本概念 1.3. 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù) 1.4. 訪問(wèn)數(shù)據(jù)庫(kù) 章2. SQL語(yǔ)言 2.1. 介紹 2.2. 概念 2.3. 創(chuàng)建新表 2.4. 向表中添加行 2.5. 查詢一個(gè)表 2.6. 表間鏈接 2.7. 聚集函數(shù) 2.8. 更新 2.9. 刪除 章3. 高級(jí)特性 3.1. 介紹 3.2. 視圖 3.3. 外鍵 3.4. 事務(wù) 3.5. 窗口函數(shù) 3.6. 繼承 3.7. 結(jié)論 II. SQL語(yǔ)言 章4. SQL語(yǔ)法 4.1. 詞法結(jié)構(gòu) 4.2. 值表達(dá)式 4.3. 調(diào)用函數(shù) 章5. 數(shù)據(jù)定義 5.1. 表的基本概念 5.2. 缺省值 5.3. 約束 5.4. 系統(tǒng)字段 5.5. 修改表 5.6. 權(quán)限 5.7. 模式 5.8. 繼承 5.9. 分區(qū) 5.10. 其它數(shù)據(jù)庫(kù)對(duì)象 5.11. 依賴性跟蹤 章 6. 數(shù)據(jù)操作 6.1. 插入數(shù)據(jù) 6.2. 更新數(shù)據(jù) 6.3. 刪除數(shù)據(jù) 章7. 查詢 7.1. 概述 7.2. 表表達(dá)式 7.3. 選擇列表 7.4. 組合查詢 7.5. 行排序 7.6. LIMIT和OFFSET 7.7. VALUES列表 7.8. WITH的查詢(公用表表達(dá)式) 章8. 數(shù)據(jù)類型 8.1. 數(shù)值類型 8.2. 貨幣類型 8.3. 字符類型 8.4. 二進(jìn)制數(shù)據(jù)類型 8.5. 日期/時(shí)間類型 8.6. 布爾類型 8.7. 枚舉類型 8.8. 幾何類型 8.9. 網(wǎng)絡(luò)地址類型 8.10. 位串類型 8.11. 文本搜索類型 8.12. UUID類型 8.13. XML類型 8.14. 數(shù)組 8.15. 復(fù)合類型 8.16. 對(duì)象標(biāo)識(shí)符類型 8.17. 偽類型 章 9. 函數(shù)和操作符 9.1. 邏輯操作符 9.2. 比較操作符 9.3. 數(shù)學(xué)函數(shù)和操作符 9.4. 字符串函數(shù)和操作符 9.5. 二進(jìn)制字符串函數(shù)和操作符 9.6. 位串函數(shù)和操作符 9.7. 模式匹配 9.8. 數(shù)據(jù)類型格式化函數(shù) 9.9. 時(shí)間/日期函數(shù)和操作符 9.10. 支持枚舉函數(shù) 9.11. 幾何函數(shù)和操作符 9.12. 網(wǎng)絡(luò)地址函數(shù)和操作符 9.13. 文本檢索函數(shù)和操作符 9.14. XML函數(shù) 9.15. 序列操作函數(shù) 9.16. 條件表達(dá)式 9.17. 數(shù)組函數(shù)和操作符 9.18. 聚合函數(shù) 9.19. 窗口函數(shù) 9.20. 子查詢表達(dá)式 9.21. 行和數(shù)組比較 9.22. 返回集合的函數(shù) 9.23. 系統(tǒng)信息函數(shù) 9.24. 系統(tǒng)管理函數(shù) 9.25. 觸發(fā)器函數(shù) 章10. 類型轉(zhuǎn)換 10.3. 函數(shù) 10.2. 操作符 10.1. 概述 10.4. 值存儲(chǔ) 10.5. UNION 章11. 索引 11.1. 介紹 11.2. 索引類型 11.3. 多字段索引 11.4. 索引和ORDER BY 11.5. 組合多個(gè)索引 11.6. 唯一索引 11.7. 表達(dá)式上的索引 11.8. 部分索引 11.9. 操作類和操作簇 11.10. 檢查索引的使用 章12. Full Text Search 12.1. Introduction 12.2. Tables and Indexes 12.3. Controlling Text Search 12.4. Additional Features 12.5. Parsers 12.6. Dictionaries 12.7. Configuration Example 12.8. Testing and Debugging Text Search 12.9. GiST and GIN Index Types 12.10. psql Support 12.11. Limitations 12.12. Migration from Pre-8.3 Text Search 章13. 并發(fā)控制 13.1. 介紹 13.2. 事務(wù)隔離 13.3. 明確鎖定 13.4. 應(yīng)用層數(shù)據(jù)完整性檢查 13.5. 鎖和索引 章14. 性能提升技巧 14.1. 使用EXPLAIN 14.2. 規(guī)劃器使用的統(tǒng)計(jì)信息 14.3. 用明確的JOIN語(yǔ)句控制規(guī)劃器 14.4. 向數(shù)據(jù)庫(kù)中添加記錄 14.5. 非持久性設(shè)置 III. 服務(wù)器管理 章15. 安裝指導(dǎo) 15.1. 簡(jiǎn)版 15.2. 要求 15.3. 獲取源碼 15.4. 升級(jí) 15.5. 安裝過(guò)程 15.6. 安裝后的設(shè)置 15.7. 支持的平臺(tái) 15.8. 特殊平臺(tái)的要求 章16. Installation from Source Code on Windows 16.1. Building with Visual C++ or the Platform SDK 16.2. Building libpq with Visual C++ or Borland C++ 章17. 服務(wù)器安裝和操作 17.1. PostgreSQL用戶帳戶 17.2. 創(chuàng)建數(shù)據(jù)庫(kù)集群 17.3. 啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器 17.4. 管理內(nèi)核資源 17.5. 關(guān)閉服務(wù) 17.6. 防止服務(wù)器欺騙 17.7. 加密選項(xiàng) 17.8. 用SSL進(jìn)行安全的TCP/IP連接 17.9. Secure TCP/IP Connections with SSH Tunnels 章18. 服務(wù)器配置 18.1. 設(shè)置參數(shù) 18.2. 文件位置 18.3. 連接和認(rèn)證 18.4. 資源消耗 18.5. 預(yù)寫式日志 18.6. 查詢規(guī)劃 18.7. 錯(cuò)誤報(bào)告和日志 18.8. 運(yùn)行時(shí)統(tǒng)計(jì) 18.9. 自動(dòng)清理 18.10. 客戶端連接缺省 18.12. 版本和平臺(tái)兼容性 18.11. 鎖管理 18.13. 預(yù)置選項(xiàng) 18.14. 自定義的選項(xiàng) 18.15. 開(kāi)發(fā)人員選項(xiàng) 18.16. 短選項(xiàng) 章19. 用戶認(rèn)證 19.1. pg_hba.conf 文件 19.2. 用戶名映射 19.3. 認(rèn)證方法 19.4. 用戶認(rèn)證 章20. 數(shù)據(jù)庫(kù)角色和權(quán)限 20.1. 數(shù)據(jù)庫(kù)角色 20.2. 角色屬性 20.3. 權(quán)限 20.4. 角色成員 20.5. 函數(shù)和觸發(fā)器 章21. 管理數(shù)據(jù)庫(kù) 21.1. 概述 21.2. 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù) 21.3. 臨時(shí)庫(kù) 21.4. 數(shù)據(jù)庫(kù)配置 21.5. 刪除數(shù)據(jù)庫(kù) 21.6. 表空間 章22. 本土化 22.1. 區(qū)域支持 22.2. 字符集支持 章23. 日常數(shù)據(jù)庫(kù)維護(hù)工作 23.1. Routine Vacuuming日常清理 23.2. 經(jīng)常重建索引 23.3. 日志文件維護(hù) 章24. 備份和恢復(fù) 24.1. SQL轉(zhuǎn)儲(chǔ) 24.2. 文件系統(tǒng)級(jí)別的備份 24.3. 在線備份以及即時(shí)恢復(fù)(PITR) 24.4. 版本間遷移 章25. 高可用性與負(fù)載均衡,復(fù)制 25.1. 不同解決方案的比較 25.2. 日志傳送備份服務(wù)器 25.3. 失效切換 25.4. 日志傳送的替代方法 25.5. 熱備 章26. 恢復(fù)配置 26.1. 歸檔恢復(fù)設(shè)置 26.2. 恢復(fù)目標(biāo)設(shè)置 26.3. 備服務(wù)器設(shè)置 章27. 監(jiān)控?cái)?shù)據(jù)庫(kù)的活動(dòng) 27.1. 標(biāo)準(zhǔn)Unix工具 27.2. 統(tǒng)計(jì)收集器 27.3. 查看鎖 27.4. 動(dòng)態(tài)跟蹤 章28. 監(jiān)控磁盤使用情況 28.1. 判斷磁盤的使用量 28.2. 磁盤滿導(dǎo)致的失效 章29. 可靠性和預(yù)寫式日志 29.1. 可靠性 29.2. 預(yù)寫式日志(WAL) 29.3. 異步提交 29.4. WAL配置 29.5. WAL內(nèi)部 章30. Regression Tests 30.1. Running the Tests 30.2. Test Evaluation 30.3. Variant Comparison Files 30.4. Test Coverage Examination IV. 客戶端接口 章31. libpq-C庫(kù) 31.1. 數(shù)據(jù)庫(kù)聯(lián)接函數(shù) 31.2. 連接狀態(tài)函數(shù) 31.3. 命令執(zhí)行函數(shù) 31.4. 異步命令處理 31.5. 取消正在處理的查詢 31.6. 捷徑接口 31.7. 異步通知 31.8. 與COPY命令相關(guān)的函數(shù) 31.9. Control Functions 控制函數(shù) 31.10. 其他函數(shù) 31.11. 注意信息處理 31.12. 事件系統(tǒng) 31.13. 環(huán)境變量 31.14. 口令文件 31.15. 連接服務(wù)的文件 31.16. LDAP查找連接參數(shù) 31.17. SSL支持 31.18. 在多線程程序里的行為 31.19. 制作libpq程序 31.20. 例子程序 章32. 大對(duì)象 32.1. 介紹 32.2. 實(shí)現(xiàn)特點(diǎn) 32.3. 客戶端接口 32.4. 服務(wù)器端函數(shù) 32.5. 例子程序 章33. ECPG - Embedded SQL in C 33.1. The Concept 33.2. Connecting to the Database Server 33.3. Closing a Connection 33.4. Running SQL Commands 33.5. Choosing a Connection 33.6. Using Host Variables 33.7. Dynamic SQL 33.8. pgtypes library 33.9. Using Descriptor Areas 33.10. Informix compatibility mode 33.11. Error Handling 33.12. Preprocessor directives 33.13. Processing Embedded SQL Programs 33.14. Library Functions 33.15. Internals 章34. 信息模式 34.1. 關(guān)于這個(gè)模式 34.2. 數(shù)據(jù)類型 34.3. information_schema_catalog_name 34.4. administrable_role_authorizations 34.5. applicable_roles 34.6. attributes 34.7. check_constraint_routine_usage 34.8. check_constraints 34.9. column_domain_usage 34.10. column_privileges 34.11. column_udt_usage 34.12. 字段 34.13. constraint_column_usage 34.14. constraint_table_usage 34.15. data_type_privileges 34.16. domain_constraints 34.18. domains 34.17. domain_udt_usage 34.19. element_types 34.20. enabled_roles 34.21. foreign_data_wrapper_options 34.22. foreign_data_wrappers 34.23. foreign_server_options 34.24. foreign_servers 34.25. key_column_usage 34.26. parameters 34.27. referential_constraints 34.28. role_column_grants 34.29. role_routine_grants 34.30. role_table_grants 34.31. role_usage_grants 34.32. routine_privileges 34.33. routines 34.34. schemata 34.35. sequences 34.36. sql_features 34.37. sql_implementation_info 34.38. sql_languages 34.39. sql_packages 34.40. sql_parts 34.41. sql_sizing 34.42. sql_sizing_profiles 34.43. table_constraints 34.44. table_privileges 34.45. tables 34.46. triggered_update_columns 34.47. 觸發(fā)器 34.48. usage_privileges 34.49. user_mapping_options 34.50. user_mappings 34.51. view_column_usage 34.52. view_routine_usage 34.53. view_table_usage 34.54. 視圖 V. 服務(wù)器端編程 章35. 擴(kuò)展SQL 35.1. 擴(kuò)展性是如何實(shí)現(xiàn)的 35.2. PostgreSQL類型系統(tǒng) 35.3. User-Defined Functions 35.4. Query Language (SQL) Functions 35.5. Function Overloading 35.6. Function Volatility Categories 35.7. Procedural Language Functions 35.8. Internal Functions 35.9. C-Language Functions 35.10. User-Defined Aggregates 35.11. User-Defined Types 35.12. User-Defined Operators 35.13. Operator Optimization Information 35.14. Interfacing Extensions To Indexes 35.15. 用C++擴(kuò)展 章36. 觸發(fā)器 36.1. 觸發(fā)器行為概述 36.3. 用 C 寫觸發(fā)器 36.2. 數(shù)據(jù)改變的可視性 36.4. 一個(gè)完整的例子 章37. 規(guī)則系統(tǒng) 37.1. The Query Tree 37.2. 視圖和規(guī)則系統(tǒng) 37.3. 在INSERT,UPDATE和DELETE上的規(guī)則 37.4. 規(guī)則和權(quán)限 37.5. 規(guī)則和命令狀態(tài) 37.6. 規(guī)則與觸發(fā)器得比較 章38. Procedural Languages 38.1. Installing Procedural Languages 章39. PL/pgSQL - SQL過(guò)程語(yǔ)言 39.1. 概述 39.2. PL/pgSQL的結(jié)構(gòu) 39.3. 聲明 39.4. 表達(dá)式 39.5. 基本語(yǔ)句 39.6. 控制結(jié)構(gòu) 39.7. 游標(biāo) 39.8. 錯(cuò)誤和消息 39.9. 觸發(fā)器過(guò)程 39.10. PL/pgSQL Under the Hood 39.11. 開(kāi)發(fā)PL/pgSQL的一些提示 39.12. 從OraclePL/SQL 進(jìn)行移植 章40. PL/Tcl - Tcl Procedural Language 40.1. Overview 40.2. PL/Tcl Functions and Arguments 40.3. Data Values in PL/Tcl 40.4. Global Data in PL/Tcl 40.5. Database Access from PL/Tcl 40.6. Trigger Procedures in PL/Tcl 40.7. Modules and the unknown command 40.8. Tcl Procedure Names 章41. PL/Perl - Perl Procedural Language 41.1. PL/Perl Functions and Arguments 41.2. Data Values in PL/Perl 41.3. Built-in Functions 41.4. Global Values in PL/Perl 41.6. PL/Perl Triggers 41.5. Trusted and Untrusted PL/Perl 41.7. PL/Perl Under the Hood 章42. PL/Python - Python Procedural Language 42.1. Python 2 vs. Python 3 42.2. PL/Python Functions 42.3. Data Values 42.4. Sharing Data 42.5. Anonymous Code Blocks 42.6. Trigger Functions 42.7. Database Access 42.8. Utility Functions 42.9. Environment Variables 章43. Server Programming Interface 43.1. Interface Functions Spi-spi-connect Spi-spi-finish Spi-spi-push Spi-spi-pop Spi-spi-execute Spi-spi-exec Spi-spi-execute-with-args Spi-spi-prepare Spi-spi-prepare-cursor Spi-spi-prepare-params Spi-spi-getargcount Spi-spi-getargtypeid Spi-spi-is-cursor-plan Spi-spi-execute-plan Spi-spi-execute-plan-with-paramlist Spi-spi-execp Spi-spi-cursor-open Spi-spi-cursor-open-with-args Spi-spi-cursor-open-with-paramlist Spi-spi-cursor-find Spi-spi-cursor-fetch Spi-spi-cursor-move Spi-spi-scroll-cursor-fetch Spi-spi-scroll-cursor-move Spi-spi-cursor-close Spi-spi-saveplan 43.2. Interface Support Functions Spi-spi-fname Spi-spi-fnumber Spi-spi-getvalue Spi-spi-getbinval Spi-spi-gettype Spi-spi-gettypeid Spi-spi-getrelname Spi-spi-getnspname 43.3. Memory Management Spi-spi-palloc Spi-realloc Spi-spi-pfree Spi-spi-copytuple Spi-spi-returntuple Spi-spi-modifytuple Spi-spi-freetuple Spi-spi-freetupletable Spi-spi-freeplan 43.4. Visibility of Data Changes 43.5. Examples VI. 參考手冊(cè) I. SQL命令 Sql-abort Sql-alteraggregate Sql-alterconversion Sql-alterdatabase Sql-alterdefaultprivileges Sql-alterdomain Sql-alterforeigndatawrapper Sql-alterfunction Sql-altergroup Sql-alterindex Sql-alterlanguage Sql-alterlargeobject Sql-alteroperator Sql-alteropclass Sql-alteropfamily Sql-alterrole Sql-alterschema Sql-altersequence Sql-alterserver Sql-altertable Sql-altertablespace Sql-altertsconfig Sql-altertsdictionary Sql-altertsparser Sql-altertstemplate Sql-altertrigger Sql-altertype Sql-alteruser Sql-alterusermapping Sql-alterview Sql-analyze Sql-begin Sql-checkpoint Sql-close Sql-cluster Sql-comment Sql-commit Sql-commit-prepared Sql-copy Sql-createaggregate Sql-createcast Sql-createconstraint Sql-createconversion Sql-createdatabase Sql-createdomain Sql-createforeigndatawrapper Sql-createfunction Sql-creategroup Sql-createindex Sql-createlanguage Sql-createoperator Sql-createopclass Sql-createopfamily Sql-createrole Sql-createrule Sql-createschema Sql-createsequence Sql-createserver Sql-createtable Sql-createtableas Sql-createtablespace Sql-createtsconfig Sql-createtsdictionary Sql-createtsparser Sql-createtstemplate Sql-createtrigger Sql-createtype Sql-createuser Sql-createusermapping Sql-createview Sql-deallocate Sql-declare Sql-delete Sql-discard Sql-do Sql-dropaggregate Sql-dropcast Sql-dropconversion Sql-dropdatabase Sql-dropdomain Sql-dropforeigndatawrapper Sql-dropfunction Sql-dropgroup Sql-dropindex Sql-droplanguage Sql-dropoperator Sql-dropopclass Sql-dropopfamily Sql-drop-owned Sql-droprole Sql-droprule Sql-dropschema Sql-dropsequence Sql-dropserver Sql-droptable Sql-droptablespace Sql-droptsconfig Sql-droptsdictionary Sql-droptsparser Sql-droptstemplate Sql-droptrigger Sql-droptype Sql-dropuser Sql-dropusermapping Sql-dropview Sql-end Sql-execute Sql-explain Sql-fetch Sql-grant Sql-insert Sql-listen Sql-load Sql-lock Sql-move Sql-notify Sql-prepare Sql-prepare-transaction Sql-reassign-owned Sql-reindex Sql-release-savepoint Sql-reset Sql-revoke Sql-rollback Sql-rollback-prepared Sql-rollback-to Sql-savepoint Sql-select Sql-selectinto Sql-set Sql-set-constraints Sql-set-role Sql-set-session-authorization Sql-set-transaction Sql-show Sql-start-transaction Sql-truncate Sql-unlisten Sql-update Sql-vacuum Sql-values II. 客戶端應(yīng)用程序 App-clusterdb App-createdb App-createlang App-createuser App-dropdb App-droplang App-dropuser App-ecpg App-pgconfig App-pgdump App-pg-dumpall App-pgrestore App-psql App-reindexdb App-vacuumdb III. PostgreSQL服務(wù)器應(yīng)用程序 App-initdb App-pgcontroldata App-pg-ctl App-pgresetxlog App-postgres App-postmaster VII. 內(nèi)部 章44. PostgreSQL內(nèi)部概覽 44.1. 查詢路徑 44.2. 連接是如何建立起來(lái)的 44.3. 分析器階段 44.4. ThePostgreSQL規(guī)則系統(tǒng) 44.5. 規(guī)劃器/優(yōu)化器 44.6. 執(zhí)行器 章45. 系統(tǒng)表 45.1. 概述 45.2. pg_aggregate 45.3. pg_am 45.4. pg_amop 45.5. pg_amproc 45.6. pg_attrdef 45.7. pg_attribute 45.8. pg_authid 45.9. pg_auth_members 45.10. pg_cast 45.11. pg_class 45.12. pg_constraint 45.13. pg_conversion 45.14. pg_database 45.15. pg_db_role_setting 45.16. pg_default_acl 45.17. pg_depend 45.18. pg_description 45.19. pg_enum 45.20. pg_foreign_data_wrapper 45.21. pg_foreign_server 45.22. pg_index 45.23. pg_inherits 45.24. pg_language 45.25. pg_largeobject 45.26. pg_largeobject_metadata 45.27. pg_namespace 45.28. pg_opclass 45.29. pg_operator 45.30. pg_opfamily 45.31. pg_pltemplate 45.32. pg_proc 45.33. pg_rewrite 45.34. pg_shdepend 45.35. pg_shdescription 45.36. pg_statistic 45.37. pg_tablespace 45.38. pg_trigger 45.39. pg_ts_config 45.40. pg_ts_config_map 45.41. pg_ts_dict 45.42. pg_ts_parser 45.43. pg_ts_template 45.44. pg_type 45.45. pg_user_mapping 45.46. System Views 45.47. pg_cursors 45.48. pg_group 45.49. pg_indexes 45.50. pg_locks 45.51. pg_prepared_statements 45.52. pg_prepared_xacts 45.53. pg_roles 45.54. pg_rules 45.55. pg_settings 45.56. pg_shadow 45.57. pg_stats 45.58. pg_tables 45.59. pg_timezone_abbrevs 45.60. pg_timezone_names 45.61. pg_user 45.62. pg_user_mappings 45.63. pg_views 章46. Frontend/Backend Protocol 46.1. Overview 46.2. Message Flow 46.3. Streaming Replication Protocol 46.4. Message Data Types 46.5. Message Formats 46.6. Error and Notice Message Fields 46.7. Summary of Changes since Protocol 2.0 47. PostgreSQL Coding Conventions 47.1. Formatting 47.2. Reporting Errors Within the Server 47.3. Error Message Style Guide 章48. Native Language Support 48.1. For the Translator 48.2. For the Programmer 章49. Writing A Procedural Language Handler 章50. Genetic Query Optimizer 50.1. Query Handling as a Complex Optimization Problem 50.2. Genetic Algorithms 50.3. Genetic Query Optimization (GEQO) in PostgreSQL 50.4. Further Reading 章51. 索引訪問(wèn)方法接口定義 51.1. 索引的系統(tǒng)表記錄 51.2. 索引訪問(wèn)方法函數(shù) 51.3. 索引掃描 51.4. 索引鎖的考量 51.5. 索引唯一性檢查 51.6. 索引開(kāi)銷估計(jì)函數(shù) 章52. GiST Indexes 52.1. Introduction 52.2. Extensibility 52.3. Implementation 52.4. Examples 52.5. Crash Recovery 章53. GIN Indexes 53.1. Introduction 53.2. Extensibility 53.3. Implementation 53.4. GIN tips and tricks 53.5. Limitations 53.6. Examples 章54. 數(shù)據(jù)庫(kù)物理存儲(chǔ) 54.1. 數(shù)據(jù)庫(kù)文件布局 54.2. TOAST 54.3. 自由空間映射 54.4. 可見(jiàn)映射 54.5. 數(shù)據(jù)庫(kù)分頁(yè)文件 章55. BKI后端接口 55.1. BKI 文件格式 55.2. BKI命令 55.3. 系統(tǒng)初始化的BKI文件的結(jié)構(gòu) 55.4. 例子 章56. 規(guī)劃器如何使用統(tǒng)計(jì)信息 56.1. 行預(yù)期的例子 VIII. 附錄 A. PostgreSQL錯(cuò)誤代碼 B. 日期/時(shí)間支持 B.1. 日期/時(shí)間輸入解析 B.2. 日期/時(shí)間關(guān)鍵字 B.3. 日期/時(shí)間配置文件 B.4. 日期單位的歷史 C. SQL關(guān)鍵字 D. SQL Conformance D.1. Supported Features D.2. Unsupported Features E. Release Notes Release-0-01 Release-0-02 Release-0-03 Release-1-0 Release-1-01 Release-1-02 Release-1-09 Release-6-0 Release-6-1 Release-6-1-1 Release-6-2 Release-6-2-1 Release-6-3 Release-6-3-1 Release-6-3-2 Release-6-4 Release-6-4-1 Release-6-4-2 Release-6-5 Release-6-5-1 Release-6-5-2 Release-6-5-3 Release-7-0 Release-7-0-1 Release-7-0-2 Release-7-0-3 Release-7-1 Release-7-1-1 Release-7-1-2 Release-7-1-3 Release-7-2 Release-7-2-1 Release-7-2-2 Release-7-2-3 Release-7-2-4 Release-7-2-5 Release-7-2-6 Release-7-2-7 Release-7-2-8 Release-7-3 Release-7-3-1 Release-7-3-10 Release-7-3-11 Release-7-3-12 Release-7-3-13 Release-7-3-14 Release-7-3-15 Release-7-3-16 Release-7-3-17 Release-7-3-18 Release-7-3-19 Release-7-3-2 Release-7-3-20 Release-7-3-21 Release-7-3-3 Release-7-3-4 Release-7-3-5 Release-7-3-6 Release-7-3-7 Release-7-3-8 Release-7-3-9 Release-7-4 Release-7-4-1 Release-7-4-10 Release-7-4-11 Release-7-4-12 Release-7-4-13 Release-7-4-14 Release-7-4-15 Release-7-4-16 Release-7-4-17 Release-7-4-18 Release-7-4-19 Release-7-4-2 Release-7-4-20 Release-7-4-21 Release-7-4-22 Release-7-4-23 Release-7-4-24 Release-7-4-25 Release-7-4-26 Release-7-4-27 Release-7-4-28 Release-7-4-29 Release-7-4-3 Release-7-4-30 Release-7-4-4 Release-7-4-5 Release-7-4-6 Release-7-4-7 Release-7-4-8 Release-7-4-9 Release-8-0 Release-8-0-1 Release-8-0-10 Release-8-0-11 Release-8-0-12 Release-8-0-13 Release-8-0-14 Release-8-0-15 Release-8-0-16 Release-8-0-17 Release-8-0-18 Release-8-0-19 Release-8-0-2 Release-8-0-20 Release-8-0-21 Release-8-0-22 Release-8-0-23 Release-8-0-24 Release-8-0-25 Release-8-0-26 Release-8-0-3 Release-8-0-4 Release-8-0-5 Release-8-0-6 Release-8-0-7 Release-8-0-8 Release-8-0-9 Release-8-1 Release-8-1-1 Release-8-1-10 Release-8-1-11 Release-8-1-12 Release-8-1-13 Release-8-1-14 Release-8-1-15 Release-8-1-16 Release-8-1-17 Release-8-1-18 Release-8-1-19 Release-8-1-2 Release-8-1-20 Release-8-1-21 Release-8-1-22 Release-8-1-23 Release-8-1-3 Release-8-1-4 Release-8-1-5 Release-8-1-6 Release-8-1-7 Release-8-1-8 Release-8-1-9 Release-8-2 Release-8-2-1 Release-8-2-10 Release-8-2-11 Release-8-2-12 Release-8-2-13 Release-8-2-14 Release-8-2-15 Release-8-2-16 Release-8-2-17 Release-8-2-18 Release-8-2-19 Release-8-2-2 Release-8-2-20 Release-8-2-21 Release-8-2-3 Release-8-2-4 Release-8-2-5 Release-8-2-6 Release-8-2-7 Release-8-2-8 Release-8-2-9 Release-8-3 Release-8-3-1 Release-8-3-10 Release-8-3-11 Release-8-3-12 Release-8-3-13 Release-8-3-14 Release-8-3-15 Release-8-3-2 Release-8-3-3 Release-8-3-4 Release-8-3-5 Release-8-3-6 Release-8-3-7 Release-8-3-8 Release-8-3-9 Release-8-4 Release-8-4-1 Release-8-4-2 Release-8-4-3 Release-8-4-4 Release-8-4-5 Release-8-4-6 Release-8-4-7 Release-8-4-8 Release-9-0 Release-9-0-1 Release-9-0-2 Release-9-0-3 Release-9-0-4 F. 額外提供的模塊 F.1. adminpack F.2. auto_explain F.3. btree_gin F.4. btree_gist F.5. chkpass F.6. citext F.7. cube F.8. dblink Contrib-dblink-connect Contrib-dblink-connect-u Contrib-dblink-disconnect Contrib-dblink Contrib-dblink-exec Contrib-dblink-open Contrib-dblink-fetch Contrib-dblink-close Contrib-dblink-get-connections Contrib-dblink-error-message Contrib-dblink-send-query Contrib-dblink-is-busy Contrib-dblink-get-notify Contrib-dblink-get-result Contrib-dblink-cancel-query Contrib-dblink-get-pkey Contrib-dblink-build-sql-insert Contrib-dblink-build-sql-delete Contrib-dblink-build-sql-update F.9. dict_int F.10. dict_xsyn F.11. earthdistance F.12. fuzzystrmatch F.13. hstore F.14. intagg F.15. intarray F.16. isn F.17. lo F.18. ltree F.19. oid2name F.20. pageinspect F.21. passwordcheck F.22. pg_archivecleanup F.23. pgbench F.24. pg_buffercache F.25. pgcrypto F.26. pg_freespacemap F.27. pgrowlocks F.28. pg_standby F.29. pg_stat_statements F.30. pgstattuple F.31. pg_trgm F.32. pg_upgrade F.33. seg F.34. spi F.35. sslinfo F.36. tablefunc F.37. test_parser F.38. tsearch2 F.39. unaccent F.40. uuid-ossp F.41. vacuumlo F.42. xml2 G. 外部項(xiàng)目 G.1. 客戶端接口 G.2. 過(guò)程語(yǔ)言 G.3. 擴(kuò)展 H. The Source Code Repository H.1. Getting The Source Via Git I. 文檔 I.1. DocBook I.2. 工具集 I.3. 制作文檔 I.4. 文檔寫作 I.5. 風(fēng)格指導(dǎo) J. 首字母縮略詞 參考書目 Bookindex Index
文字

31.1. 數(shù)據(jù)庫(kù)聯(lián)接函數(shù)

下面的函數(shù)處理與PostgreSQL服務(wù)器服務(wù)器聯(lián)接的事情。 一個(gè)應(yīng)用程序一次可以與多個(gè)服務(wù)器建立聯(lián)接。(這么做的原因之一是訪問(wèn)多于一個(gè)數(shù)據(jù)庫(kù)。 ) 每個(gè)連接都是用一個(gè)從函數(shù)PQconnectdb, PQconnectdbParamsPQsetdbLogin獲得的PGconn對(duì)象表示。 注意,這些函數(shù)總是返回一個(gè)非空的對(duì)象指針,除非存儲(chǔ)器少得連個(gè)PGconn對(duì)象都分配不出來(lái)。 在把查詢發(fā)送給聯(lián)接對(duì)象之前,可以調(diào)用PQstatus函數(shù)來(lái)檢查一下聯(lián)接是否成功。

在Unix上,分叉與開(kāi)放的libpq連接進(jìn)程可能會(huì)導(dǎo)致 不可預(yù)知的結(jié)果,因?yàn)楦负妥舆M(jìn)程共享 相同的插座和操作系統(tǒng)資源。出于這個(gè)原因, 這種用法是不推薦,雖然做的exec 子進(jìn)程加載一個(gè)新的可執(zhí)行文件是安全的。

Note: 在Windows上,有一個(gè)方式可以提高性能,如果一個(gè)單一的數(shù)據(jù)庫(kù)連接重復(fù)的開(kāi)啟和關(guān)閉。 內(nèi)部,libpq為連接啟動(dòng)和關(guān)閉分別調(diào)用WSAStartup()WSACleanup()。 WSAStartup()引用WSACleanup()遞減的技術(shù)來(lái)增量?jī)?nèi)置Windows庫(kù)。 當(dāng)引用的技術(shù)只有一時(shí),調(diào)用WSACleanup()來(lái)釋放所有的資源并寫在所有的DLL。 這個(gè)操作的開(kāi)銷很大,為了避免,一個(gè)應(yīng)用程序可以經(jīng)常調(diào)用WSAStartup(), 這樣當(dāng)最后一個(gè)數(shù)據(jù)庫(kù)連接關(guān)閉時(shí),不會(huì)釋放所有資源。

PQconnectdbParams

與服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器建立一個(gè)新的聯(lián)接。

PGconn *PQconnectdbParams(const char **keywords,const char **values,int expand_dbname);

這個(gè)函數(shù)使用取自兩個(gè)NULL終止數(shù)組的參數(shù)來(lái)開(kāi)啟一個(gè)新的數(shù)據(jù)庫(kù)連接。 首先,被定義為一個(gè)字符串?dāng)?shù)組的keywords中的每個(gè)元素都是一個(gè)關(guān)鍵字。 其次,values為每個(gè)關(guān)鍵字賦值。不同于下面的PQsetdbLogin, 這個(gè)參數(shù)設(shè)置可以無(wú)需修改參數(shù)簽名來(lái)擴(kuò)展,因此,使用這個(gè)函數(shù)(或其非阻塞的變形PQconnectStartParamsPQconnectPoll) 更適合一個(gè)新的應(yīng)用程序編程。

當(dāng)expand_dbname非0時(shí),dbname關(guān)鍵字值允許被確認(rèn)為 一個(gè)conninfo字符串。

所有傳遞的數(shù)組可以被清空以用于所有的缺省參數(shù),或用于包含一個(gè)或多個(gè)參數(shù)設(shè)置。 它們必須是等長(zhǎng)的。進(jìn)程會(huì)隨著keywords數(shù)組中最后一個(gè)非NULL元素而終止。

目前可識(shí)別的參數(shù)鍵字是:

host

要聯(lián)接的主機(jī)名。如果主機(jī)名以斜杠開(kāi)頭,則它聲明使用 Unix 域套接字通訊而 不是 TCP/IP 通訊;該值就是套接字文件所存儲(chǔ)的目錄。如果沒(méi)有聲明host, 那么缺省時(shí)是與位于/tmp目錄(或者制作PostgreSQL的時(shí)候聲明的套接字目錄) 里面的 Unix-域套接字聯(lián)接。在沒(méi)有域套接字的機(jī)器上, 缺省是與localhost連接。

hostaddr

與之聯(lián)接的主機(jī)的IP地址。這個(gè)應(yīng)該是標(biāo)準(zhǔn)的IPv4地址格式, 比如,172.28.40.9。如果你的機(jī)器支持IPv6,那么你也可以使用IPv6的地址。 如果聲明了一個(gè)非空的字符串,那么使用TCP/IP通訊機(jī)制。

使用hostaddr取代host可以讓應(yīng)用避免一次主機(jī)名查找, 這一點(diǎn)對(duì)于那些有時(shí)間約束的應(yīng)用來(lái)說(shuō)可能是非常重要的。不過(guò),Kerberos認(rèn)證 系統(tǒng)要求主機(jī)(host)名。因此,應(yīng)用下面的規(guī)則:如果聲明了 不帶hostaddrhost那么就強(qiáng)制進(jìn)行主機(jī)名查找。如果聲明中沒(méi)有host,hostaddr的值 給出遠(yuǎn)端的地址; 如果使用了 Kerberos,將導(dǎo)致一次反向名字查詢。 如果同時(shí)聲明了hosthostaddr,除非使用了Kerberos, 否則將使用hostaddr的值作為遠(yuǎn)端地址;host的值將被忽略, 如果使用了Kerberos,host的值用于 Kerberos 認(rèn)證。 (要注意如果傳遞給libpq的主機(jī)名(host)不是地址hostaddr處的機(jī)器名, 那么認(rèn)證很有可能失敗。) 同樣,在~/.pgpass(參閱Section 31.14)中是 使用host而不是hostaddr來(lái)標(biāo)識(shí)連接。

如果主機(jī)名(host)和主機(jī)地址都沒(méi)有,那么libpq將使用一個(gè)本地 的 Unix 域套接字進(jìn)行通訊; 或者是在沒(méi)有 Unix 域套接字的機(jī)器上, 它將嘗試與localhost連接。

port

主機(jī)服務(wù)器的端口號(hào),或者在Unix域套接字聯(lián)接時(shí)的套接字?jǐn)U展文件名。

dbname

數(shù)據(jù)庫(kù)名。缺省和用戶名相同。

user

要聯(lián)接的PostgreSQL用戶名。 缺省是與運(yùn)行該應(yīng)用的用戶操作系統(tǒng)名同名的用戶。

password

如果服務(wù)器要求口令認(rèn)證,所用的口令。

connect_timeout

連接的最大等待時(shí)間,以秒計(jì)(用十進(jìn)制整數(shù)字串書寫)。零或者不聲明表示無(wú)窮。 我們不建議把連接超時(shí)的值設(shè)置得小于2秒。

options

發(fā)送給服務(wù)器的命令行選項(xiàng)。 例如,設(shè)置這-c geqo=off設(shè)置 會(huì)話的價(jià)值geqo參數(shù)為 off。為詳細(xì)討論了可用 選項(xiàng),參閱Chapter 18。

application_name

為application_name配置參數(shù)指定值

fallback_application_name

為application_name配置參數(shù)聲明一個(gè)備用值。 如果連接參數(shù)或PGAPPNAME環(huán)境變量沒(méi)有為application_name賦值,那么就會(huì)使用該值。 在通用的應(yīng)用程序(最好設(shè)置一個(gè)缺省應(yīng)用程序名)中,聲明一個(gè)備用名字時(shí)很有用的,這樣用戶自己可以重寫該名字。

keepalives

控制是否保持客戶端的TCP連接使用。缺省值是1,表示開(kāi)啟,但可以改為0,表示不開(kāi)啟。 通過(guò)一個(gè)Unix域套接字,可以為連接模式忽略該參數(shù)。

keepalives_idle

控制空閑秒數(shù),在這個(gè)秒數(shù)之后,TCP應(yīng)該向服務(wù)器發(fā)送一個(gè)保持活動(dòng)的信息。 系統(tǒng)缺省是0。通過(guò)一個(gè)Unix域套接字,或者如果禁用保持活動(dòng),可以為連接模式忽略該參數(shù)。 只有在Windows,或TCP_KEEPIDLETCP_KEEPALIVE套接字選項(xiàng)可用的操作系統(tǒng) 上才可以使用這個(gè)參數(shù),在其他操作系統(tǒng)上,該參數(shù)無(wú)效。

keepalives_interval

控制空閑秒數(shù),在這個(gè)秒數(shù)之后,一個(gè)服務(wù)器無(wú)法識(shí)別的TCP保持活動(dòng)的信息應(yīng)該被重新翻譯。 系統(tǒng)缺省是0。通過(guò)一個(gè)Unix域套接字,或者如果禁用保持活動(dòng),可以為連接模式忽略該參數(shù)。 只有在Windows,或TCP_KEEPINTVL套接字選項(xiàng)可用的操作系統(tǒng) 上才可以使用這個(gè)參數(shù),在其他操作系統(tǒng)上,該參數(shù)無(wú)效。

keepalives_count

控制那些在客戶端到服務(wù)器端連接被認(rèn)為dead之前會(huì)丟失的TCP保持連接的數(shù)目。 系統(tǒng)缺省是0。通過(guò)一個(gè)Unix域套接字,或者如果禁用保持活動(dòng),可以為連接模式忽略該參數(shù)。 只有在Windows,或TCP_KEEPINTVL套接字選項(xiàng)可用的操作系統(tǒng) 上才可以使用這個(gè)參數(shù),在其他操作系統(tǒng)上,該參數(shù)無(wú)效。

tty

忽略(以前,這個(gè)選項(xiàng)聲明服務(wù)器日志的輸出方向)。

sslmode

這個(gè)選項(xiàng)決定是否需要和服務(wù)器協(xié)商一個(gè)SSL連接, 以及以什么樣的優(yōu)先級(jí)與服務(wù)器進(jìn)行SSL連接。有六種模式可供 選擇:

Table 31-1. sslmode選項(xiàng)

Option Description
disable 只有嘗試非SSL連接
allow 首次嘗試非SSL 連接,如果失敗,嘗試SSL 連接
prefer(缺省) 首次嘗試SSL 連接,如果失敗,嘗試非SSL 連接。
require 僅嘗試一個(gè)SSL連接
verify-ca 只嘗試SSL連接,并通過(guò)可信任的CA驗(yàn)證 服務(wù)器證書。
verify-full 只嘗試SSL連接,通過(guò)可信任的CA驗(yàn)證 服務(wù)器證書是和證書中 該服務(wù)器的主機(jī)名是否匹配。

了解這些選項(xiàng)的詳細(xì)信息請(qǐng)查閱Section 31.17。

sslmode被Unix域套接字溝通忽略 如果不支持SSL編譯PostgreSQL的, 使用選項(xiàng)require,verify-ca,或 verify-full將導(dǎo)致一個(gè)錯(cuò)誤,而 選項(xiàng)??allowprefer會(huì) 接受,但的libpq實(shí)際上不會(huì)嘗試 SSL連接。

requiressl

這個(gè)選項(xiàng)因?yàn)橛辛?tt class="LITERAL">sslmode設(shè)置之后已經(jīng)廢棄了。

如果設(shè)為1,則要求與服務(wù)器進(jìn)行SSL聯(lián)接 (等效于sslmode。 如果服務(wù)器不支持SSL,那么libpq 將馬上拒絕聯(lián)接。設(shè)置為0(缺?。┡c服務(wù)器進(jìn)行協(xié)商連接類型(等效于 sslmode)。這個(gè)選項(xiàng)只有 在編譯PostgreSQL時(shí)打開(kāi)了SSL支持才有效。

sslcert

此參數(shù)指定的客戶端SSL 證書文件名,替換默認(rèn) ~/.postgresql/postgresql.crt。 如果沒(méi)有一個(gè)SSL連接,則忽略此參數(shù)。

sslkey

這個(gè)參數(shù)聲明用于客戶端認(rèn)證的密鑰的位置。要么聲明一個(gè)文件名用于代替缺省的~/.postgresql/postgresql.key, 要么從外部"engine"獲得并聲明的一個(gè)關(guān)鍵字("engine"OpenSSL可加載模塊)。 一個(gè)外部引擎聲明得是由一個(gè)冒號(hào)分隔的引擎名稱和一個(gè)特定引擎的密鑰標(biāo)識(shí)符組成。 如果不是SLL連接模式,那么忽略該參數(shù)。

sslrootcert

此參數(shù)指定的文件包含SSL的名稱 證書頒發(fā)機(jī)構(gòu)(CA)證書(S)。 如果該文件存在,服務(wù)器的證書 由這些機(jī)構(gòu)簽署確認(rèn)。 默認(rèn)是~/.postgresql/root.crt。

sslcrl

這個(gè)參數(shù)聲明的是CRL的文件名。如果存在,那么在這個(gè)文件中的聲明列表在嘗試認(rèn)證服務(wù)器端認(rèn)證時(shí)會(huì)使用。 缺省是~/.postgresql/root.crl。

krbsrvname

當(dāng)認(rèn)證帶有Kerberos 5或GSSAPI是使用的Kerberos服務(wù)名。 它必須匹配在Kerberos認(rèn)證成功的服務(wù)器配置參數(shù)中聲明的服務(wù)名。 (參閱Section 19.3.5和Section 19.3.3)。

gsslib

用于GSSAPI認(rèn)證的GSS庫(kù)。只用于Windows操作系統(tǒng)。 設(shè)置gssapi強(qiáng)制libpq使用GSSAPI庫(kù)以代替缺省的SSPI來(lái)認(rèn)證。

service

用于額外參數(shù)的服務(wù)名。它在pg_service.conf里面聲明一個(gè)服務(wù)名, 這個(gè)配置文件保 存額外的連接參數(shù)。這樣就允許應(yīng)用應(yīng)用只聲明一個(gè)服務(wù)名,而連接參數(shù)就可以在一 個(gè)地方維護(hù)了。參閱安裝目錄中的Section 31.15獲取如何設(shè)置這個(gè)文 件的信息。

如果有任何沒(méi)有聲明的參數(shù),那么將檢查對(duì)應(yīng)的環(huán)境變量 (參閱Section 31.13小節(jié))。 如果環(huán)境變量也沒(méi)有設(shè)置,那么使用編譯時(shí)的指明的內(nèi)置缺省。

如果expand_dbname非0,同時(shí)dbname中包含 一個(gè)=標(biāo)記,它會(huì)看做是一個(gè)conninfo字符串, 以相同的方式傳遞到PQconnectdb中。之前的關(guān)鍵字會(huì)被conninfo 中的關(guān)鍵字代替。

通常情況下,關(guān)鍵字會(huì)從索引序列中的數(shù)組的開(kāi)始進(jìn)程處理。這樣的話,如果關(guān)鍵字重復(fù)了,那么在這之前的最后一個(gè) 處理結(jié)果會(huì)被保留。因此,通過(guò)仔細(xì)防放置dbname關(guān)鍵字, 可以決定哪些方式可以通過(guò)conninfo字符串來(lái)覆蓋,哪些不可以。

PQconnectdb

與服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器建立一個(gè)新的聯(lián)接。

PGconn *PQconnectdb(const char *conninfo);

此函數(shù)打開(kāi)一個(gè)新的數(shù)據(jù)庫(kù)連接, 從字符串conninfo使用所采取的參數(shù)。

可以清空傳遞的字符串以使用所有的缺省參數(shù),或包含一個(gè)或多個(gè)通過(guò)空格分開(kāi)的參數(shù)設(shè)置。 每個(gè)參數(shù)設(shè)置是以keyword = value出現(xiàn)的。 等號(hào)兩邊的空格可以有,也可以沒(méi)有。在寫一個(gè)空值,或value中包含空格,可以在其兩邊使用單引號(hào),如keyword = 'a value'。 在value中的單引號(hào)和反斜杠必須使用一個(gè)反斜杠來(lái)逃逸,如\',\\。

目前公認(rèn)的參數(shù)關(guān)鍵詞是與上述相同。

PQsetdbLogin

Makes a new connection to the database server.

PGconn *PQsetdbLogin(const char *pghost,
                     const char *pgport,
                     const char *pgoptions,
                     const char *pgtty,
                     const char *dbName,
                     const char *login,
                     const char *pwd);

這個(gè)函數(shù)是PQconnectdb前身, 它有固定個(gè)數(shù)的參數(shù)。它有相同的功能, 只是在調(diào)用中那些它缺少的參數(shù)總是用缺省值。如果么給任意的固定參數(shù)設(shè)置缺省值, 那么寫一個(gè)NULL或者一個(gè)空字串給它們。

如果的dbName包含=符號(hào),它 作為的conninfo字符串完全相同的方式 如果它已通過(guò)PQconnectdb,其余 上述參數(shù)然后被應(yīng)用。

PQsetdb

與服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器建立一個(gè)新的聯(lián)接。

PGconn *PQsetdb(char *pghost,
                char *pgport,
                char *pgoptions,
                char *pgtty,
                char *dbName);

這是一個(gè)調(diào)用PQsetdbLogin的宏, 只是loginpwd參數(shù)null代替。 提供這個(gè)函數(shù)是為了與非常老版本的程序兼容

PQconnectStartParams
PQconnectStart
PQconnectPoll

與數(shù)據(jù)庫(kù)服務(wù)器建立一次非阻塞的聯(lián)接。

PGconn *PQconnectStartParams(const char **keywords,const char **values,int expand_dbname);


PGconn *PQconnectStart(const char *conninfo);


PostgresPollingStatusType PQconnectPoll(PGconn *conn);

這3個(gè)函數(shù)用于打開(kāi)一個(gè)與數(shù)據(jù)庫(kù)服務(wù)器之間的非阻塞的聯(lián)接: 你的應(yīng)用的執(zhí)行線索在執(zhí)行它的時(shí)候不會(huì)因遠(yuǎn)端的I/O而阻塞。 這個(gè)方法的要點(diǎn)是等待I/O結(jié)束可以發(fā)生在應(yīng)用的主循環(huán)里, 而不是在PQconnectdbParamsPQconnectdb里, 這樣應(yīng)用可以把這件事與其它操作并發(fā)起來(lái)一起執(zhí)行。

通過(guò)PQconnectStartParams,數(shù)據(jù)庫(kù)連接使用來(lái)自keywordsvalues數(shù)組的參數(shù),并且通過(guò)expand_dbname控制,如在PQconnectdbParams 中的描述。

數(shù)據(jù)庫(kù)聯(lián)接是用從conninfo字符串里取得的參數(shù)傳遞給 PQconnectStart進(jìn)行的。 這個(gè)字符串的格式與上面PQconnectdb里描述的一樣

PQconnectStartParams, PQconnectStartPQconnectPoll 都不會(huì)阻塞,只要有一些限制。

  • 必須正確提供hostaddrhost參數(shù)以確保不會(huì)發(fā)生正向或者反向的名字查找。 參閱上面PQconnectdbParams里的這些參數(shù)的文檔獲取細(xì)節(jié)。

  • 如果你調(diào)用了PQtrace,確保你跟蹤進(jìn)入的流對(duì)象不會(huì)阻塞。

  • 你必須在調(diào)用PQconnectPoll之前確保socket處于正確的狀態(tài), 象下面描述的那樣。

注意:PQconnectStartParams是類似于PQconnectStart如下所示。

要開(kāi)始一次非阻塞連接請(qǐng)求,調(diào)用 conn = PQconnectStart("connection_info_string")。 如果conn是空,表明libpq無(wú)法分配一個(gè)新的PGconn結(jié)構(gòu)。 否則,返回一個(gè)有效的PGconn指針 (盡管還不一定代表一個(gè)與數(shù)據(jù)庫(kù)有效聯(lián)接)。PQconnectStart一返回,調(diào)用 status = PQstatus(conn)。 如果status等于CONNECTION_BADPQconnectStart失敗。

如果PQconnectStart成功了,下一個(gè)階段是輪詢libpq,這樣它就可以繼續(xù)連接序列動(dòng)作。 使用PQsocket(conn)獲取數(shù)據(jù)庫(kù)鏈接下層的套接字描述符。象這樣循環(huán): 如果PQconnectPoll(conn)的最后一個(gè)返回是PGRES_POLLING_READING,那么就等到套接 字準(zhǔn)備好被讀取了的時(shí)候(就像系統(tǒng)函數(shù)select()poll(),或者類似的系統(tǒng)調(diào)用聲明的那樣)。 然后再次調(diào)用PQconnectPoll(conn)。同樣,如果PQconnectPoll(conn)最后返 回PGRES_POLLING_WRITING,那么就等到套接字準(zhǔn)備好可以寫了,然后再次調(diào)用PQconnectPoll(conn)。 如果你還沒(méi)調(diào)用PQconnectPoll,比如,剛剛調(diào)用完PQconnectStart,那么按照它剛 返回PGRES_POLLING_WRITING的原則行動(dòng)。繼續(xù)這個(gè)循環(huán)直到PQconnectPoll(conn)返 回PGRES_POLLING_FAILED,表明連接失敗,或者PGRES_POLLING_OK,表明連接成功建立。

在聯(lián)接的任意時(shí)刻,我們都可以通過(guò)調(diào)用PQstatus來(lái)檢查聯(lián)接的狀態(tài)。 如果這是CONNECTION_BAD,那么聯(lián)接過(guò)程失??;如果是CONNECTION_OK,那么聯(lián)接已經(jīng)做好。 這兩種狀態(tài)同樣也可以從上面的PQconnectPoll的返回值里檢測(cè)到。其他狀態(tài)可能(也只能) 在一次異步聯(lián)接過(guò)程中發(fā)生。這些標(biāo)識(shí)聯(lián)接過(guò)程的當(dāng)前狀態(tài),因而可能對(duì)給用戶提供反饋有幫助。 這些狀態(tài)可能包括:

CONNECTION_STARTED

等待進(jìn)行聯(lián)接。

CONNECTION_MADE

聯(lián)接成功;等待發(fā)送

CONNECTION_AWAITING_RESPONSE

等待來(lái)自服務(wù)器的響應(yīng)。

CONNECTION_AUTH_OK

已收到認(rèn)證;等待聯(lián)接啟動(dòng)繼續(xù)進(jìn)行。

CONNECTION_SSL_STARTUP

協(xié)商SSL加密。

CONNECTION_SETENV

協(xié)商環(huán)境驅(qū)動(dòng)的參數(shù)設(shè)置。

注意,盡管這些常量將保持下去(為了維持兼容性),應(yīng)用決不應(yīng)該依賴于這些常 量以某種特定順序出現(xiàn),或者是根本不應(yīng)依賴于這些常量,或者是不應(yīng)該依賴于這些 狀態(tài)總是某個(gè)文檔聲明的值。一個(gè)應(yīng)用可能象象下面這樣:

switch(PQstatus(conn))
{
        case CONNECTION_STARTED:
            feedback = "Connecting...";
            break;

        case CONNECTION_MADE:
            feedback = "Connected to server...";
            break;
.
.
.
        default:
            feedback = "Connecting...";
}

在使用PQconnectPoll的時(shí)候,連接參數(shù)connect_timeout將被忽略; 判斷是否超時(shí)是應(yīng)用的責(zé)任。否則,后面跟著一個(gè)PQconnectPoll循環(huán)的 PQconnectStart等效于PQconnectdb。

要注意如果PQconnectStart返回一個(gè)非空的指針,你必須在使用完它(指針)之后調(diào)用 PQfinish, 以處理那些結(jié)構(gòu)和所有相關(guān)的存儲(chǔ)塊,甚至連接失敗時(shí)也要這樣處理。

PQconndefaults

返回缺省的聯(lián)接選項(xiàng)。

PQconninfoOption *PQconndefaults(void);

typedef struct
{
    char   *keyword;   /* The keyword of the option */
    char   *envvar;    /* Fallback environment variable name */
    char   *compiled;  /* Fallback compiled in default value */
    char   *val;       /* Option's current value,or NULL */
    char   *label;     /* Label for field in connect dialog */
    char   *dispchar;  /* Indicates how to display this field
                          in a connect dialog. Values are:
                          ""        Display entered value as is
                          "*"       Password field - hide value
                          "D"       Debug option - don't show by default */
    int     dispsize;  /* Field size in characters for dialog */
} PQconninfoOption;

返回一個(gè)連接選項(xiàng)數(shù)組。可以用于獲取所有可能的PQconnectdb選項(xiàng)和它們的當(dāng)前缺省值。 返回值指向一個(gè)PQconninfoOption結(jié)構(gòu)的數(shù)組,該數(shù)組以一個(gè)有NULLkeyword指針的條目結(jié)束。 如果無(wú)法分配內(nèi)存,則返回空指針。注意缺省值(val域)將依賴于環(huán)境變量和其他環(huán)境。 調(diào)用者必須把連接選項(xiàng)當(dāng)作只讀對(duì)待。

在處理完選項(xiàng)數(shù)組后,把數(shù)組交給PPQconninfoFree釋放。如果沒(méi)有這么做, 每次調(diào)用PQconndefaults都會(huì)有一小部分內(nèi)存泄漏。

PQconninfoParse

返回解析提供的連接字符串的連接選項(xiàng)。

PQconninfoOption *PQconninfoParse(const char *conninfo,char **errmsg);

解析一個(gè)連接字符串,并返回結(jié)果選項(xiàng)為一個(gè)數(shù)組,或這,如果連接字符串有問(wèn)題,那么返回一個(gè)NULL。 這個(gè)可以用于決定在提供的連接字符串中的PQconnectdb選項(xiàng)。 返回值指向一個(gè)PQconninfoOption結(jié)構(gòu)的數(shù)組,這個(gè)結(jié)構(gòu)一個(gè)帶有空keyword指針 的條目結(jié)束。

需要注意的是,只有明確在字符串中聲明的選項(xiàng)可以在結(jié)果數(shù)組中的設(shè)置中有參數(shù)值;沒(méi)有缺省的話是插入。

如果errmsgNULL,那么成功的時(shí)候,*errmsg被設(shè)置為NULL, 否則設(shè)置為malloc的錯(cuò)誤字符串以說(shuō)明錯(cuò)誤。 (也可以將*errmsg設(shè)置為NULL,即使返回一個(gè)NULL;這表示內(nèi)存溢出)。

在處理完選項(xiàng)數(shù)組之后,通過(guò)將其傳遞給PQconninfoFree來(lái)進(jìn)行釋放。 如果沒(méi)有這么做,那么每個(gè)PQconninfoParse的請(qǐng)求時(shí)會(huì)有一些內(nèi)存溢出。 反過(guò)來(lái),如果發(fā)生錯(cuò)誤并且errmsgNULL,通過(guò)PQfreemem 來(lái)釋放錯(cuò)誤字符串。

PQfinish

關(guān)閉與服務(wù)器的連接。同時(shí)釋放被PGconn對(duì)象使用的存儲(chǔ)器。

void PQfinish(PGconn *conn);

注意,即使與服務(wù)器的連接嘗試失?。捎?code class="FUNCTION">PQstatus判斷),應(yīng)用也要 調(diào)用PQfinish釋放被PGconn對(duì)象使用的存儲(chǔ)器。 不應(yīng)該在調(diào)用PQfinish后再使用PGconn 指針。

PQreset

重置與服務(wù)器的通訊端口。

void PQreset(PGconn *conn);

此函數(shù)將關(guān)閉與服務(wù)器的連接并且試圖與同一個(gè)服務(wù)器重建新的連接, 使用所有前面使用過(guò)的參數(shù)。這在失去工作連接后進(jìn)行故障恢復(fù)時(shí)很有用。

PQresetStart
PQresetPoll

以非阻塞模式重置與服務(wù)器的通訊端口。

int PQresetStart(PGconn *conn);

PostgresPollingStatusType PQresetPoll(PGconn *conn);

此函數(shù)將關(guān)閉與服務(wù)器的連接并且試圖與同一個(gè)服務(wù)器重建新的連接,使用所有前面使用過(guò)的參數(shù)。 這在失去工作連接后進(jìn)行故障恢復(fù)時(shí)很有用。它們和上面的PQreset的區(qū)別是它們工作在非阻塞模式。 這些函數(shù)的使用有與上面PQconnectStartParamsPQconnectStartPQconnectPoll一樣的限制。

要發(fā)起一次連接重置,調(diào)用PQresetStart。如果它返回0,那么重置失敗。 如果返回1,用與使用PQresetPoll建立連接的同樣的方法使用PQconnectPoll重置連接。

上一篇: 下一篇: