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

directory search
前言 何為PostgreSQL? PostgreSQL簡(jiǎn)史 格式約定 更多信息 臭蟲(chóng)匯報(bào)指導(dǎo) I. 教程 章1. 從頭開(kāi)始 1.1. 安裝 1.2. 體系基本概念 1.3. 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù) 1.4. 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù) 章2. SQL語(yǔ)言 2.1. 介紹 2.2. 概念 2.3. 創(chuàng)建新表 2.4. 向表中添加行 2.5. 查詢(xún)一個(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. 依賴(lài)性跟蹤 章 6. 數(shù)據(jù)操作 6.1. 插入數(shù)據(jù) 6.2. 更新數(shù)據(jù) 6.3. 刪除數(shù)據(jù) 章7. 查詢(xún) 7.1. 概述 7.2. 表表達(dá)式 7.3. 選擇列表 7.4. 組合查詢(xún) 7.5. 行排序 7.6. LIMIT和OFFSET 7.7. VALUES列表 7.8. WITH的查詢(xún)(公用表表達(dá)式) 章8. 數(shù)據(jù)類(lèi)型 8.1. 數(shù)值類(lèi)型 8.2. 貨幣類(lèi)型 8.3. 字符類(lèi)型 8.4. 二進(jìn)制數(shù)據(jù)類(lèi)型 8.5. 日期/時(shí)間類(lèi)型 8.6. 布爾類(lèi)型 8.7. 枚舉類(lèi)型 8.8. 幾何類(lèi)型 8.9. 網(wǎng)絡(luò)地址類(lèi)型 8.10. 位串類(lèi)型 8.11. 文本搜索類(lèi)型 8.12. UUID類(lèi)型 8.13. XML類(lèi)型 8.14. 數(shù)組 8.15. 復(fù)合類(lèi)型 8.16. 對(duì)象標(biāo)識(shí)符類(lèi)型 8.17. 偽類(lèi)型 章 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ù)類(lèi)型格式化函數(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. 子查詢(xún)表達(dá)式 9.21. 行和數(shù)組比較 9.22. 返回集合的函數(shù) 9.23. 系統(tǒng)信息函數(shù) 9.24. 系統(tǒng)管理函數(shù) 9.25. 觸發(fā)器函數(shù) 章10. 類(lèi)型轉(zhuǎn)換 10.3. 函數(shù) 10.2. 操作符 10.1. 概述 10.4. 值存儲(chǔ) 10.5. UNION 章11. 索引 11.1. 介紹 11.2. 索引類(lèi)型 11.3. 多字段索引 11.4. 索引和ORDER BY 11.5. 組合多個(gè)索引 11.6. 唯一索引 11.7. 表達(dá)式上的索引 11.8. 部分索引 11.9. 操作類(lèi)和操作簇 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用戶(hù)帳戶(hù) 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ù)寫(xiě)式日志 18.6. 查詢(xún)規(guī)劃 18.7. 錯(cuò)誤報(bào)告和日志 18.8. 運(yùn)行時(shí)統(tǒng)計(jì) 18.9. 自動(dòng)清理 18.10. 客戶(hù)端連接缺省 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. 用戶(hù)認(rèn)證 19.1. pg_hba.conf 文件 19.2. 用戶(hù)名映射 19.3. 認(rèn)證方法 19.4. 用戶(hù)認(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. 在線(xiàn)備份以及即時(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)控磁盤(pán)使用情況 28.1. 判斷磁盤(pán)的使用量 28.2. 磁盤(pán)滿(mǎn)導(dǎo)致的失效 章29. 可靠性和預(yù)寫(xiě)式日志 29.1. 可靠性 29.2. 預(yù)寫(xiě)式日志(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. 客戶(hù)端接口 章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. 取消正在處理的查詢(xún) 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. 在多線(xiàn)程程序里的行為 31.19. 制作libpq程序 31.20. 例子程序 章32. 大對(duì)象 32.1. 介紹 32.2. 實(shí)現(xiàn)特點(diǎn) 32.3. 客戶(hù)端接口 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ù)類(lèi)型 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類(lèi)型系統(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 寫(xiě)觸發(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. 客戶(hù)端應(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. 查詢(xún)路徑 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. 索引訪(fǎng)問(wèn)方法接口定義 51.1. 索引的系統(tǒng)表記錄 51.2. 索引訪(fǎng)問(wèn)方法函數(shù) 51.3. 索引掃描 51.4. 索引鎖的考量 51.5. 索引唯一性檢查 51.6. 索引開(kāi)銷(xiāo)估計(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. 客戶(hù)端接口 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. 文檔寫(xiě)作 I.5. 風(fēng)格指導(dǎo) J. 首字母縮略詞 參考書(shū)目 Bookindex Index
characters

CREATE TABLE

Name

CREATE TABLE?--?定義一個(gè)新表

Synopsis

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( [
  { column_name data_type [ DEFAULT default_expr ] [ column_constraint [ ... ] ]
    | table_constraint
    | LIKE parent_table [ like_option ... ] }
    [, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace ]

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name
    OF type_name [ (
  { column_name WITH OPTIONS [ DEFAULT default_expr ] [ column_constraint [ ... ] ]
    | table_constraint }
    [, ... ]
) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace ]

這里的column_constraint是:

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  CHECK ( expression ) |
  UNIQUE index_parameters |
  PRIMARY KEY index_parameters |
  REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
    [ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

table_constraint是:

[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) |
  UNIQUE ( column_name [, ... ] ) index_parameters |
  PRIMARY KEY ( column_name [, ... ] ) index_parameters |
  EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) index_parameters [ WHERE ( predicate ) ] |
  FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
    [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

like_option是:

{ INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | ALL }

index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:

[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace ]

exclude_element in an EXCLUDE constraint is:

{ column | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]

描述

CREATE TABLE在當(dāng)前數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)新的空白表。 該表將由發(fā)出此命令的用戶(hù)所擁有。

如果給出了模式名(比如CREATE TABLE myschema.mytable ...), 那么在指定的模式中創(chuàng)建表,否則在當(dāng)前模式中創(chuàng)建。臨時(shí)表存在于一個(gè)特殊的模式里, 因此創(chuàng)建臨時(shí)表的時(shí)候不能指定模式名。表名字必需在同一模式中的其它表、序列、索引、 視圖名字中唯一。

CREATE TABLE還自動(dòng)創(chuàng)建一個(gè)與該表的行對(duì)應(yīng)的復(fù)合數(shù)據(jù)類(lèi)型。因此, 表不能和同模式中的現(xiàn)有數(shù)據(jù)類(lèi)型同名。

可選的約束子句聲明約束,新行或者更新的行必須滿(mǎn)足這些約束才能成功插入或更新。 約束是一個(gè)SQL對(duì)象,它以多種方式協(xié)助在表上定義有效數(shù)值的集合。

定義約束有兩種方法:表約束和列約束。列約束是作為一個(gè)列定義的一部分定義的。 而表約束并不和某個(gè)列綁在一起,它可以作用于多個(gè)列上。每個(gè)列約束也可以寫(xiě)成表約束; 如果某個(gè)約束只影響一個(gè)列,那么列約束只是符號(hào)上的簡(jiǎn)潔方式而已。

參數(shù)

TEMPORARY or TEMP

創(chuàng)建為臨時(shí)表。臨時(shí)表在會(huì)話(huà)結(jié)束或(可選)當(dāng)前事務(wù)的結(jié)尾(參閱下面的ON COMMIT)自動(dòng)刪除。 除非用模式修飾的名字引用,否則現(xiàn)有的同名永久表在臨時(shí)表存在期間,在本會(huì)話(huà)過(guò)程中是不可見(jiàn)的。 任何在臨時(shí)表上創(chuàng)建的索引也都會(huì)被自動(dòng)刪除。

autovacuum daemon不能訪(fǎng)問(wèn)并且因此不能 清理或分析臨時(shí)表。為此,適當(dāng)?shù)那謇砗头治霾僮鲬?yīng)該通過(guò)會(huì)話(huà)SQL命令來(lái)執(zhí)行。 例如,若一個(gè)臨時(shí)表將要在復(fù)雜查詢(xún)中使用,那么添加后在臨時(shí)表中運(yùn)行ANALYZE 是明智的。

可以選擇在TEMPORARYTEMP前面放上 GLOBALLOCAL。 不過(guò)這對(duì)PostgreSQL來(lái)說(shuō)沒(méi)有任何區(qū)別,可以參閱 兼容性。

table_name

要?jiǎng)?chuàng)建的表的名字(可以用模式修飾)

OF type_name

Creates a typed table, which takes its structure from the specified composite type (name optionally schema-qualified). A typed table is tied to its type; for example the table will be dropped if the type is dropped (with DROP TYPE ... CASCADE). 創(chuàng)建一個(gè)typed table,可以從指定的復(fù)合類(lèi)型 中獲取其結(jié)構(gòu)(名稱(chēng)可以有模式修飾)。一個(gè)類(lèi)型化的表與其類(lèi)型相關(guān); 例如表會(huì)在類(lèi)型刪除時(shí)被刪除(有DROP TYPE ... CASCADE0)。

When a typed table is created, then the data types of the columns are determined by the underlying composite type and are not specified by the CREATE TABLE command. But the CREATE TABLE command can add defaults and constraints to the table and can specify storage parameters. 當(dāng)一個(gè)typed表創(chuàng)建后,列的數(shù)據(jù)類(lèi)型由根本的組成類(lèi)型決定而且 不是由CREATE TABLE命令聲明的。但是 CREATE TABLE命令可以添加默認(rèn)值和約束到 表中,并能聲明存儲(chǔ)參數(shù)。

column_name

在新表中要?jiǎng)?chuàng)建的字段名字

data_type

該字段的數(shù)據(jù)類(lèi)型。它可以包括數(shù)組說(shuō)明符。 有關(guān)PostgreSQL支持的數(shù)據(jù)類(lèi)型的更多信息, 請(qǐng)參考Chapter 8。

DEFAULT default_expr

DEFAULT子句給字段指定缺省值。該數(shù)值可以是任何不含 變量的表達(dá)式(不允許使用子查詢(xún)和對(duì)本表中的其它字段的交叉引用)。 缺省表達(dá)式的數(shù)據(jù)類(lèi)型必須和字段類(lèi)型匹配。

缺省表達(dá)式將被用于任何未聲明該字段數(shù)值的插入操作。如果沒(méi)有 指定缺省值則缺省值為NULL 。

INHERITS ( parent_table [, ... ] )

可選的INHERITS子句聲明一系列的表,這個(gè)新表自動(dòng)從 這一系列表中繼承所有字段。

使用INHERITS將在子表和其父表之間創(chuàng)建一個(gè)永久的關(guān)系, 對(duì)父表結(jié)構(gòu)的修改通常也會(huì)傳播到子表。缺省時(shí),掃描父表的時(shí)候也會(huì) 掃描子表。

如果在多個(gè)父表中存在同名字段,那么就會(huì)報(bào)告一個(gè)錯(cuò)誤, 除非這些字段的數(shù)據(jù)類(lèi)型在每個(gè)父表里都是匹配的。如果沒(méi)有沖突, 那么重復(fù)的字段在新表中融合成一個(gè)字段。如果列出的新表字段名和繼承字段同名, 那么它的數(shù)據(jù)類(lèi)型也必須和繼承字段匹配,并且這些字段定義會(huì)融合成一個(gè)。 如果新表為該字段明確聲明了缺省值,那么此缺省值將覆蓋任何繼承字段的缺省值。 否則,該字段的所有父字段缺省值都必須相同,否則就會(huì)報(bào)錯(cuò)。

CHECK約束基本上以與列相同的方式合并。若多重父表和/或新表 定義包括同名的CHECK約束,那么這些約束必須都有相同的檢查 表達(dá)式,或者將要報(bào)告的錯(cuò)誤。有相同名稱(chēng)和表達(dá)式的約束將會(huì)合并到一個(gè)副 本中。注意:在新表中的一個(gè)未命名的CHECK約束將不會(huì)被合并, 因?yàn)橐粋€(gè)唯一的名稱(chēng)總會(huì)被為此選擇。

STORAGE設(shè)置也可以從父表中被復(fù)制。

LIKE parent_table [ like_option ... ]

LIKE子句聲明一個(gè)表, 新表自動(dòng)從這個(gè)表里面繼承所有字段名及其數(shù)據(jù)類(lèi)型和非空約束。

INHERITS不同,新表與原來(lái)的表之間在創(chuàng)建動(dòng)作完畢之后是完全無(wú)關(guān)的。 在源表做的任何修改都不會(huì)傳播到新表中, 并且也不可能在掃描源表的時(shí)候包含新表的數(shù)據(jù)。

字段缺省表達(dá)式只有在聲明了INCLUDING DEFAULTS之后才會(huì)包含進(jìn)來(lái)。 缺省是不包含缺省表達(dá)式的,結(jié)果是新表中所有字段的缺省值都是NULL 。

非空約束將總是復(fù)制到新表中,CHECK約束則僅在指定了INCLUDING CONSTRAINTS的時(shí)候才復(fù)制, 而其他類(lèi)型的約束則永遠(yuǎn)也不會(huì)被復(fù)制。此規(guī)則同時(shí)適用于表約束和列約束。

初始表上的任何索引都不能在新表上創(chuàng)建,除非INCLUDING INDEXES 子句被聲明了。

INCLUDING STORAGE被聲明,復(fù)制的列定義的 STORAGE設(shè)置將會(huì)被復(fù)制。默認(rèn)響應(yīng)是排除 STORAGE設(shè)置,導(dǎo)致新表中的復(fù)制列有特定類(lèi)型的默認(rèn)設(shè)置。 要獲取更多關(guān)于STORAGE設(shè)置的細(xì)膩,請(qǐng)參閱 Section 54.2。

INCLUDING COMMENTS被聲明,復(fù)制列的注釋、 約束以及索引將會(huì)僅僅被復(fù)制。默認(rèn)響應(yīng)是排除注釋?zhuān)瑢?dǎo)致新表中的 復(fù)制列和約束沒(méi)有注釋。

INCLUDING ALLINCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING NDEXES INCLUDING STORAGE INCLUDING COMMENTS的縮寫(xiě)形式.

也要注意:不同于INHERITS,LIKE 復(fù)制的列和索引不會(huì)與相近命名的列和約束合并。若相同的名稱(chēng)被明確 指定或者在另一個(gè)LIKE子句中,則會(huì)報(bào)錯(cuò)。

INHERITS不同, 列和被LIKE復(fù)制的約束并不使用相同的名字進(jìn)行融合。 如果明確的指定了相同的名字或者在另外一個(gè) LIKE子句中,那么將會(huì)報(bào)錯(cuò)。

CONSTRAINT constraint_name

可選的列約束或表約束的名字。如果約束本身是非法的,那么其名字將會(huì)出現(xiàn)在錯(cuò)誤信息中, 因此像col must be positive這樣的名字可以表達(dá)有用的約束信息。 如果約束名中含有空格則必須用雙引號(hào)界定。如果沒(méi)有指定約束名, 那么系統(tǒng)將會(huì)自動(dòng)生成一個(gè)名字。

NOT NULL

字段不允許包含NULL值

NULL

字段允許包含NULL值,這是缺省。

這個(gè)子句的存在只是為和那些非標(biāo)準(zhǔn)SQL數(shù)據(jù)庫(kù)兼容。不建議在新應(yīng)用中使用它。

CHECK ( expression )

CHECK子句聲明一個(gè)產(chǎn)生布爾結(jié)果的表達(dá)式,新的或者更新的 行為了成功必須滿(mǎn)足插入或者更新操作。評(píng)估為T(mén)RUE或者UNKNOWN的表達(dá)式 成功。插入或者更新操作的任何行應(yīng)該產(chǎn)生一個(gè)錯(cuò)誤異常提出的FALSE結(jié)果 并且插入和更新吧改變數(shù)據(jù)庫(kù)。一個(gè)聲明為列約束的檢查約束應(yīng)該參照 列值唯一,盡管出現(xiàn)在一個(gè)表約束中的表達(dá)式可以參照多重表。

當(dāng)前,CHECK表達(dá)式既不包括子查詢(xún),也不涉及變量 而不是當(dāng)前行的列值。

UNIQUE (column constraint)
UNIQUE ( column_name [, ... ] ) (table constraint)

UNIQUE約束表示表里的一個(gè)或多個(gè)字段的組合必須在全表范圍內(nèi)唯一。 唯一約束的行為和列約束一樣,只不過(guò)多了跨多行的能力。

對(duì)于唯一約束而言,NULL被認(rèn)為是互不相等的。

每個(gè)唯一約束都必須給其使用的字段集合賦予一個(gè)與其它唯一約束 都不同的名字,并且也不能和主鍵約束的名字相同,否則就被認(rèn)為 是同樣的約束寫(xiě)了兩次。

PRIMARY KEY (column constraint)
PRIMARY KEY ( column_name [, ... ] ) (table constraint)

主鍵約束表明表中的一個(gè)或者一些字段只能包含唯一(不重復(fù))的非NULL值。 從技術(shù)上講,PRIMARY KEY只是UNIQUENOT NULL的組合, 不過(guò)把一套字段標(biāo)識(shí)為主鍵同時(shí)也體現(xiàn)了模式設(shè)計(jì)的元數(shù)據(jù), 因?yàn)橹麈I意味著可以拿這套字段用做行的唯一標(biāo)識(shí)。

一個(gè)表只能聲明一個(gè)主鍵,不管是作為字段約束還是表約束。

主鍵約束使用的字段集合應(yīng)該與其它唯一約束都不同。

EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) index_parameters [ WHERE ( predicate ) ]

EXCLUDE子句定義一個(gè)排斥約束,這保證了若任意兩行在 指定列或者使用指定操作符的表達(dá)式比較時(shí),并非全部比較都會(huì)返回 TRUE。若所有指定操作符都測(cè)試相等性,這就等價(jià)于 UNIQUE約束,盡管一個(gè)普通的唯一性約束會(huì)更快一些。 然而,排除約束可以聲明比簡(jiǎn)單的相等更常規(guī)的約束。例如,您可以 通過(guò)&&操作符聲明一個(gè)約束使得表中的任意兩 行都沒(méi)有重疊的內(nèi)容(參閱Section 8.8)。

排除約束通過(guò)使用索引來(lái)執(zhí)行,因此每個(gè)聲明的操作符必須與恰當(dāng)?shù)? 操作符類(lèi)聯(lián)系(參閱Section 11.9)獲取索引 訪(fǎng)問(wèn)方法index_method。操作符必須是可交換的。 每個(gè)exclude_element 可以選擇制定一個(gè)操作符類(lèi)和/或排序選項(xiàng);這在 CREATE INDEX中有全面的描述。

訪(fǎng)問(wèn)方法必須支持amgettuple(參閱Chapter 51); 目前這意味著GIN不能被使用。盡管是允許的,但使用有排斥約束 的B-tree或hash索引的幾乎沒(méi)有任何意義,因?yàn)檫@能做的一個(gè)普通唯一性約束就 可以做的很好了。所以訪(fǎng)問(wèn)方法總會(huì)是GiST。

predicate允許您在表的一個(gè)子集中聲明一個(gè) 排除約束;這在內(nèi)部創(chuàng)建了一個(gè)部分索引。請(qǐng)注意:為此必須用圓括號(hào)括起來(lái)。

REFERENCES reftable [ ( refcolumn ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] (column constraint)
FOREIGN KEY ( column [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] (table constraint)

這些子句聲明一個(gè)外鍵約束,外鍵約束要求新表中一列或多列組成的組 應(yīng)該只包含/匹配被參考的表中對(duì)應(yīng)字段中的值。如果省略refcolumn,則使用 reftable的主鍵。 被參考字段必須是被參考表中的非延期唯一字段或者主鍵。 請(qǐng)注意,不能在臨時(shí)表和永久表之間定義外鍵約束。

向參考字段插入的數(shù)值將使用給出的匹配類(lèi)型與被參考表中被參考列的 數(shù)值進(jìn)行匹配。有三種匹配類(lèi)型:MATCH FULL,MATCH PARTIALMATCH SIMPLE(缺省)。MATCH FULL不允許一個(gè)多字段 外鍵的字段為NULL ,除非所有外鍵字段都為NULL。 MATCH SIMPLE允許某些外鍵字段為NULL而外鍵的其它部 分不是NULL。MATCH PARTIAL目前尚未實(shí)現(xiàn)。

另外,當(dāng)被參考字段中的數(shù)據(jù)改變的時(shí)候,那么將對(duì)本表的字段中的數(shù)據(jù)執(zhí)行某種操作。 ON DELETE子句聲明當(dāng)被參考表中的被參考行被刪除的時(shí)候要執(zhí)行的操作。類(lèi)似的, ON UPDATE子句聲明被參考表中被參考字段更新為新值的時(shí)候要執(zhí)行的動(dòng)作。 如果該行被更新,但被參考的字段實(shí)際上沒(méi)有變化,那么就不會(huì)有任何動(dòng)作。 除了NO ACTION檢查之外的其他參考動(dòng)作都不能推遲,即使該約束聲明為可推遲也是如此。 下面是每個(gè)子句的可能動(dòng)作:

NO ACTION

生成一個(gè)錯(cuò)誤,表明刪除或更新將產(chǎn)生一個(gè)違反外鍵約束的動(dòng)作。 如果該約束是可推遲的,并且如果還存在任何引用行, 那么這個(gè)錯(cuò)誤將在檢查約束的時(shí)候生成。這是缺省動(dòng)作。

RESTRICT

生成一個(gè)表明刪除或更新將導(dǎo)致違反外鍵約束的錯(cuò)誤。 和NO ACTION一樣,只是動(dòng)作不可推遲。

CASCADE

刪除任何引用了被刪除行的行,或者分別把引用行的字段值更新 為被參考字段的新數(shù)值。

SET NULL

把引用行設(shè)置為NULL。

SET DEFAULT

把引用字段設(shè)置為它們的缺省值。

如果被參考字段經(jīng)常更新,那么給外鍵字段增加一個(gè)索引可能是合適的, 這樣與外鍵字段相關(guān)聯(lián)的引用動(dòng)作可以更有效地執(zhí)行。

DEFERRABLE
NOT DEFERRABLE

這兩個(gè)關(guān)鍵字設(shè)置該約束是否可推遲。一個(gè)不可推遲的約束將在每條命令之后馬上檢查。 可推遲約束可以推遲到事務(wù)結(jié)尾使用SET CONSTRAINTS命令檢查。 缺省是NOT DEFERRABLE。 目前只有UNIQUE,PRIMARY KEYEXCLUDEREFERENCES(外鍵)約束接受這個(gè)子句。 NOT NULLCHECK約束類(lèi)型都是不可推遲的。

INITIALLY IMMEDIATE
INITIALLY DEFERRED

如果約束是可推遲的,那么這個(gè)子句聲明檢查約束的缺省時(shí)間。 如果約束是INITIALLY IMMEDIATE(缺省),那么每條語(yǔ)句之后就立即檢查它。 如果約束是INITIALLY DEFERRED,那么只有在事務(wù)結(jié)尾才檢查它。 約束檢查的時(shí)間可以用SET CONSTRAINTS 命令修改。

WITH ( storage_parameter [= value] [, ... ] )

這個(gè)子句為表或指定一個(gè)可選的存儲(chǔ)參數(shù),參見(jiàn)存儲(chǔ)參數(shù)獲取更多信息。 用于表的WITH子句還可以包含OIDS=TRUE或單獨(dú)的OIDS來(lái)指定給新表中的每一行都分配一個(gè)OID(對(duì)象標(biāo)識(shí)符), 或者OIDS=FALSE表示不分配OID 。 如果沒(méi)有指定OIDS默認(rèn)行為取決于default_with_oids配置參數(shù)。 如果新表是從有OID的表繼承而來(lái), 那么即使明確指定OIDS=FALSE也將強(qiáng)制按照OIDS=TRUE 執(zhí)行。

如果明確或隱含的指定了OIDS=FALSE,新表將不會(huì)存儲(chǔ)OID,也不會(huì)為行分配OID。 這將減小OID的開(kāi)銷(xiāo)并因此延緩了32-bit OID計(jì)數(shù)器的循環(huán)。 因?yàn)橐坏┯?jì)數(shù)器發(fā)生循環(huán)之后OID將不能被視為唯一,這將大大降低OID的實(shí)用性。 另外,排除了OID的表也為每條記錄減小了4字節(jié)的存儲(chǔ)空間,從而可以稍微提升 一些性能。

可以使用ALTER TABLE從已有的表中刪除OID列。

WITH OIDS
WITHOUT OIDS

這些是被廢棄的、分別等價(jià)于WITH (OIDS)WITH (OIDS=FALSE)的語(yǔ)法。 WITH ( ... ) syntax;見(jiàn)上文。

ON COMMIT

使用ON COMMIT控制臨時(shí)表在事務(wù)塊結(jié)尾的行為。 這三個(gè)選項(xiàng)是:

PRESERVE ROWS

在事務(wù)結(jié)尾不采取任何特別的動(dòng)作,這是缺省。

DELETE ROWS

刪除臨時(shí)表中的所有行。本質(zhì)上是在每次提交事務(wù)后自動(dòng)執(zhí)行一個(gè)TRUNCATE命令。

DROP

刪除臨時(shí)表

TABLESPACE tablespace

tablespace是要?jiǎng)?chuàng)建新表的 表空間的名稱(chēng),若未聲明,則按照default_tablespace, 或者若表是臨時(shí)的則按照temp_tablespaces。

指定新表將要在tablespace 表空間內(nèi)創(chuàng)建。如果沒(méi)有聲明, 將查詢(xún)default_tablespace ,如果表為空,那么將使用 temp_tablespaces。

USING INDEX TABLESPACE tablespace

該子句允許選擇表空間的,在表空間中索引與UNIQUE, PRIMARY KEY,或者即將創(chuàng)建的EXCLUDE約束相關(guān)。若不聲明, 則按照default_tablespace,或者若表是臨時(shí)的就按照 temp_tablespaces。

這個(gè)子句允許選擇與一個(gè)UNIQUE,PRIMARY KEY約束相關(guān)的索引創(chuàng)建時(shí)所在的表空間?;蛘?tt class="LITERAL">EXCLUDE限制將被創(chuàng)建。 如果沒(méi)有聲明,將查詢(xún)default_tablespace, 如果表為空,那么將使用temp_tablespaces。

存儲(chǔ)參數(shù)

WITH子句可以為表聲明storage parameters,并且為與 UNIQUE,PRIMARY KEY,或者EXCLUDE 相關(guān)的索引。索引的存儲(chǔ)參數(shù)記錄在CREATE INDEX中。表目前可 用的存儲(chǔ)參數(shù)在下面列出。對(duì)于每個(gè)擦安琥,除非指出,有一個(gè)有同名前綴 toast.的額外參數(shù),這可以用于控制表的二級(jí)TOAST 表的性能,若有(參閱Section 54.2獲取更多關(guān)于TOAST的信息)。 請(qǐng)注意:TOAST表繼承來(lái)自其父表的autovacuum_*值,若沒(méi)有設(shè)置 toast.autovacuum_*設(shè)置。

fillfactor (integer)

一個(gè)表的填充因子(fillfactor)是一個(gè)介于10和100之間的百分?jǐn)?shù)。100(完全填充)是默認(rèn)值。 如果指定了較小的填充因子,INSERT操作僅按照填充因子指定的百分率填充表頁(yè)。 每個(gè)頁(yè)上的剩余空間將用于在該頁(yè)上更新行, 這就使得UPDATE有機(jī)會(huì)在同一頁(yè)上放置同一條記錄的新版本, 這比把新版本放置在其它頁(yè)上更有效。對(duì)于一個(gè)從不更新的表將填充因子設(shè)為100是最佳選擇, 但是對(duì)于頻繁更新的表,較小的填充因子則更加有效。此參數(shù)不能為T(mén)OAST表。

autovacuum_enabled, toast.autovacuum_enabled (boolean)

開(kāi)啟或者關(guān)閉在指定表上的autovacuum守護(hù)進(jìn)程。若為真,autovacuum守護(hù)進(jìn)程 將會(huì)開(kāi)始一個(gè)在特定表上的VACUUM操作,當(dāng)更新或者刪除元組的數(shù)量 超過(guò)關(guān)系中現(xiàn)有元組的估計(jì)數(shù)目的autovacuum_vacuum_thresholdautovacuum_vacuum_scale_factor倍。類(lèi)似的,當(dāng)插入、更新或者 刪除的元組超過(guò)關(guān)系中現(xiàn)有元組的估計(jì)數(shù)目autovacuum_analyze_thresholdautovacuum_analyze_scale_factor倍,則初始化一個(gè) ANALYZE操作。若錯(cuò)誤,該表將不會(huì)被自動(dòng)清理,除了阻止 事務(wù)Id環(huán)繞式處理。參閱Section 23.1.4 獲取更多關(guān)于阻止環(huán)繞式處理的信息。觀察會(huì)發(fā)現(xiàn)該變量從autovacuum設(shè)置中繼承其值。

autovacuum_vacuum_threshold, toast.autovacuum_vacuum_threshold (integer)

初始換一個(gè)特定表上的VACUUM操作符之前, 更新或者刪除元組的最小值。

autovacuum_vacuum_scale_factor, toast.autovacuum_vacuum_scale_factor (float4)

添加到autovacuum_vacuum_thresholdreltuples乘法器。

autovacuum_analyze_threshold (integer)

ANALYZE operation on a particular table. 在特定表中初始化一個(gè)ANALYZE操作之前,插入、更新 或者刪除元組的最小值。

autovacuum_analyze_scale_factor (float4)

reltuples的乘法器要添加到 autovacuum_analyze_threshold。

autovacuum_vacuum_cost_delay, toast.autovacuum_vacuum_cost_delay (integer)

Custom autovacuum_vacuum_cost_delay parameter.

autovacuum_vacuum_cost_limit, toast.autovacuum_vacuum_cost_limit (integer)

Custom autovacuum_vacuum_cost_limit parameter.

autovacuum_freeze_min_age, toast.autovacuum_freeze_min_age (integer)

自定義vacuum_freeze_min_age參數(shù)。 請(qǐng)注意autovacuum將會(huì)忽略嘗試將一個(gè)每個(gè)表的 autovacuum_freeze_min_age設(shè)置的大于系統(tǒng)范圍的 autovacuum_freeze_max_age設(shè)置的一半。

autovacuum_freeze_max_age, toast.autovacuum_freeze_max_age (integer)

自定義autovacuum_freeze_max_age參數(shù), 請(qǐng)注意:autovacuum將會(huì)忽略企圖將每表 autovacuum_freeze_max_age設(shè)置得大于系統(tǒng)范圍的設(shè)置 (它只能設(shè)置的更?。?。請(qǐng)注意:當(dāng)您能把autovacuum_freeze_max_age 設(shè)置的非常小時(shí),或者甚至為0,這通常是不明智的,盡管這回強(qiáng)制頻繁的 自動(dòng)清理。

autovacuum_freeze_table_age, toast.autovacuum_freeze_table_age (integer)

自定義vacuum_freeze_table_age參數(shù)。

注意

不建議在新應(yīng)用中使用OID,可能情況下, 更好的選擇是使用一個(gè)SERIAL或者其它序列發(fā)生器做表的主鍵。 如果一個(gè)應(yīng)用使用了OID標(biāo)識(shí)表中的特定行,那么建議在該表的oid字段上創(chuàng)建一個(gè)唯一約束, 以確保該表的OID即使在計(jì)數(shù)器循環(huán)之后也是唯一的。 如果你需要一個(gè)整個(gè)數(shù)據(jù)庫(kù)范圍的唯一標(biāo)識(shí),那么就要避免假設(shè)OID是跨表唯一的, 你可以用tableoid和行OID的組合來(lái)實(shí)現(xiàn)這個(gè)目的。

Tip: 對(duì)那些沒(méi)有主鍵的表,不建議使用OIDS=FALSE,因?yàn)槿绻葲](méi)有OID又沒(méi)有唯一數(shù)據(jù)字段, 那么就很難標(biāo)識(shí)特定的行。

PostgreSQL自動(dòng)為每個(gè)唯一約束和主鍵約束創(chuàng)建一個(gè)索引以確保其唯一性。 因此,不必為主鍵字段明確的創(chuàng)建索引。 參閱 CREATE INDEX獲取更多信息。

唯一約束和主鍵在目前的實(shí)現(xiàn)里是不能繼承的。如果把繼承和唯一約束組合在一起會(huì)導(dǎo)致無(wú)法運(yùn)轉(zhuǎn)。

一個(gè)表不能超過(guò)1600個(gè)字段。實(shí)際的限制比這個(gè)更低,因?yàn)檫€有元組長(zhǎng)度限制。

例子

創(chuàng)建filmsdistributors表:

CREATE TABLE films (
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,
    title       varchar(40) NOT NULL,
    did         integer NOT NULL,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute
);

CREATE TABLE distributors (
     did    integer PRIMARY KEY DEFAULT nextval('serial'),
     name   varchar(40) NOT NULL CHECK (name <> '')
);

創(chuàng)建一個(gè)帶有2維數(shù)組的表:

CREATE TABLE array_int (
    vector  int[][]
);

為表films定義一個(gè)唯一表約束。唯一表約束可以在表的一個(gè)或多個(gè)字段上定義:

CREATE TABLE films (
    code        char(5),
    title       varchar(40),
    did         integer,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute,
    CONSTRAINT production UNIQUE(date_prod)
);

定義一個(gè)檢查列約束:

CREATE TABLE distributors (
    did     integer CHECK (did > 100),
    name    varchar(40)
);

定義一個(gè)檢查表約束:

CREATE TABLE distributors (
    did     integer,
    name    varchar(40)
    CONSTRAINT con1 CHECK (did > 100 AND name <> '')
);

為表films定義一個(gè)主鍵表約束。

CREATE TABLE films (
    code        char(5),
    title       varchar(40),
    did         integer,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute,
    CONSTRAINT code_title PRIMARY KEY(code,title)
);

為表distributors定義一個(gè)主鍵約束。 下面兩個(gè)例子是等效的,第一個(gè)例子使用了表約束語(yǔ)法,第二個(gè)使用了列約束語(yǔ)法。

CREATE TABLE distributors (
    did     integer,
    name    varchar(40),
    PRIMARY KEY(did)
);

CREATE TABLE distributors (
    did     integer PRIMARY KEY,
    name    varchar(40)
);

下面這個(gè)例子給字段name賦予了一個(gè)文本常量缺省值, 并且將字段did的缺省值安排為通過(guò)選擇序列對(duì)象的下一個(gè)值生成。 modtime的缺省值將是該行插入的時(shí)間戳。

CREATE TABLE distributors (
    name      varchar(40) DEFAULT 'Luso Films',
    did       integer DEFAULT nextval('distributors_serial'),
    modtime   timestamp DEFAULT current_timestamp
);

在表distributors上定義兩個(gè)NOT NULL列約束, 其中之一明確給出了名字:

CREATE TABLE distributors (
    did     integer CONSTRAINT no_null NOT NULL,
    name    varchar(40) NOT NULL
);

name字段定義一個(gè)唯一約束:

CREATE TABLE distributors (
    did     integer,
    name    varchar(40) UNIQUE
);

上面的和下面這樣作為一個(gè)表約束聲明是一樣的:

CREATE TABLE distributors (
    did     integer,
    name    varchar(40),
    UNIQUE(name)
);

創(chuàng)建同樣的表,并為表以及唯一索引指定70%率:

CREATE TABLE distributors (
    did     integer,
    name    varchar(40),
    UNIQUE(name) WITH (fillfactor=70)
)
WITH (fillfactor=70);

創(chuàng)建有排斥約束的表circles,排斥約束可以阻止 任意兩個(gè)范圍重合:

CREATE TABLE circles (
    c circle,
    EXCLUDE USING gist (c WITH &&)
);

在表空間diskvol1里創(chuàng)建cinemas表:

CREATE TABLE cinemas (
        id serial,
        name text,
        location text
) TABLESPACE diskvol1;

創(chuàng)建一個(gè)復(fù)合類(lèi)型和一個(gè)類(lèi)型化表:

CREATE TYPE employee_type AS (name text, salary numeric);

CREATE TABLE employees OF employee_type (
    PRIMARY KEY (name),
    salary WITH OPTIONS DEFAULT 1000
);

兼容性

CREATE TABLE遵循SQL標(biāo)準(zhǔn), 一些例外情況在下面列出。

臨時(shí)表

盡管CREATE TEMPORARY TABLE的語(yǔ)法和SQL標(biāo)準(zhǔn)的類(lèi)似, 但是效果是不同的。在標(biāo)準(zhǔn)里,臨時(shí)表只是定義一次并且從空內(nèi)容開(kāi)始自動(dòng)存在于任何需要它們的會(huì)話(huà)中。 PostgreSQL要求每個(gè)會(huì)話(huà)為它們使用的每個(gè)臨時(shí)表發(fā)出它們自己的 CREATE TEMPORARY TABLE 命令。 這樣就允許不同的會(huì)話(huà)將相同的臨時(shí)表名字用于不同的目的, 而標(biāo)準(zhǔn)的實(shí)現(xiàn)方法則把一個(gè)臨時(shí)表名字約束為具有相同的表結(jié)構(gòu)。

標(biāo)準(zhǔn)定義的臨時(shí)表的行為被廣泛地忽略了。PostgreSQL在這方面上的行為類(lèi)似于許多其它SQL數(shù)據(jù)庫(kù)系統(tǒng)。

標(biāo)準(zhǔn)中的全局和局部臨時(shí)表之間的區(qū)別在PostgreSQL里不存在, 因?yàn)檫@種區(qū)別取決于模塊的概念,而PostgreSQL沒(méi)有這個(gè)概念。 出于兼容考慮,PostgreSQL將接受臨時(shí)表聲明中的GLOBALLOCAL關(guān)鍵字, 但是他們沒(méi)有任何作用。

臨時(shí)表的ON COMMIT子句也類(lèi)似于SQL標(biāo)準(zhǔn),但是有些區(qū)別。 如果忽略了ON COMMIT子句,SQL標(biāo)準(zhǔn)聲明缺省的行為是ON COMMIT DELETE ROWS。 但是PostgreSQL里的缺省行為是ON COMMIT PRESERVE ROWS。 在SQL標(biāo)準(zhǔn)里不存在ON COMMIT DROP選項(xiàng)。

非遞延惟一性約束

當(dāng)一個(gè)UNIQUE或者PRIMARY KEY約束未延期, PostgreSQL每當(dāng)已插入或者更改列時(shí)就會(huì) 檢查唯一性。SQL標(biāo)準(zhǔn)要求僅在語(yǔ)句末強(qiáng)制唯一性;但這有時(shí)會(huì)有變化,例如 一個(gè)單獨(dú)的命令更新多個(gè)關(guān)鍵值的情況。要獲得遵循標(biāo)準(zhǔn)的行為,須聲明 約束為DEFERRABLE但不延期(例如:INITIALLY IMMEDIATE)。請(qǐng)注意,這明顯慢于直接唯一性檢查。

列檢查約束

SQL標(biāo)準(zhǔn)說(shuō)CHECK列約束只能引用他們作用的字段; 只有CHECK表約束才能引用多個(gè)字段。 PostgreSQL并不強(qiáng)制這個(gè)限制;它把字段和表約束看作相同的東西。

EXCLUDE Constraint

EXCLUDE約束類(lèi)型是一個(gè) PostgreSQL擴(kuò)展。

NULL "約束"

NULL"約束"(實(shí)際上不是約束)是PostgreSQL對(duì)SQL標(biāo)準(zhǔn)的擴(kuò)展, 包括它是為了和其它一些數(shù)據(jù)庫(kù)系統(tǒng)兼容以及為了和NOT NULL約束對(duì)稱(chēng)。因?yàn)樗侨魏巫侄蔚娜笔?,所以它的出現(xiàn) 是沒(méi)有意義的。

繼承

通過(guò)INHERITS子句的多重繼承是PostgreSQL語(yǔ)言的擴(kuò)展。 SQL:1999及以后的標(biāo)準(zhǔn)使用不同的語(yǔ)法和語(yǔ)義定義了單繼承。SQL:1999風(fēng)格的繼承還沒(méi)有在 PostgreSQL中實(shí)現(xiàn)。

零字段表

PostgreSQL允許創(chuàng)建沒(méi)有字段的表(比如CREATE TABLE foo();)。這是對(duì)SQL標(biāo)準(zhǔn)的擴(kuò)展, 標(biāo)準(zhǔn)不允許存在零字段表。零字段表本身沒(méi)什么用, 但是禁止他們會(huì)給ALTER TABLE DROP COLUMN帶來(lái)很奇怪的情況,所以, 這個(gè)時(shí)候忽視標(biāo)準(zhǔn)的限制概念非常清楚。

WITH子句

WITH子句是PostgreSQL的擴(kuò)展, 同樣,存儲(chǔ)參數(shù)和OID也是擴(kuò)展。

表空間

PostgreSQL的表空間概念不是標(biāo)準(zhǔn)的東西。 因此TABLESPACEUSING INDEX TABLESPACE都是擴(kuò)展。

Typed Tables

類(lèi)型化表執(zhí)行SQL標(biāo)準(zhǔn)的一個(gè)子集。根據(jù)標(biāo)準(zhǔn),一個(gè)類(lèi)型化表有與底層復(fù)合類(lèi)型 以及另一個(gè)是"self-referencing column"的列相符合的列。 PostgreSQL明確不支持這些自參照列,但是在使用OID特性時(shí)會(huì)有相同的效果。

又見(jiàn)

ALTER TABLE, DROP TABLE, CREATE TABLESPACE, CREATE TYPE
Previous article: Next article: