# E.34\. 版本 9.0
> **發布日期:** 2010-09-20
## E.34.1\. 概述
這個PostgreSQL版本添加了請求多年的特性,例如易于使用的復制, 大規模權限改變設施,和匿名代碼塊。而以前的主版本在這些范圍是保守的, 這個版本顯示了一個大膽的新的渴望提供的設施,新的和現有的PostgreSQL 用戶將包含在內。這些都做到了,只是有少許的不兼容。主要的增強功能包括:
* 內建復制基于日志傳送。這個發展包括兩個特點:流復制,允許持續歸檔(WAL) 文件,在網絡連接上流出到備用服務器;熱備份,允許持續歸檔備用服務器以執行只讀的查詢。 有效效應是支持一個主服務器帶有多個只讀從服務器。
* 更簡單的數據庫對象權限管理。[`GRANT`/`REVOKE IN SCHEMA`](#calibre_link-19)支持在現有的對象上的大量的權限更改,而 [`ALTER DEFAULT PRIVILEGES`](#calibre_link-1034)允許控制將來創建的對象的權限。 大對象(BLOBs)現在也支持權限管理。
* 明顯提高存儲過程支持。[`DO`](#calibre_link-521) 語句支持ad-hoc或"anonymous"代碼塊。函數現在可以用命名的參數來調用。 [PL/pgSQL](#calibre_link-857)現在是缺省安裝的, [PL/Perl](#calibre_link-781)和[PL/Python](#calibre_link-882) 已經從幾個方面增強了,包括對Python3的支持。
* 全面支持[64位Windows](#calibre_link-1035)
* 更高級的報告查詢,包括附加的窗口選項(`PRECEDING`和`FOLLOWING`) 和控制值以什么順序供應給聚集函數的能力。
* 新增觸發特征,包括SQL標準兼容[每字段觸發器](#calibre_link-459) 和條件觸發器執行。
* [可延期的唯一約束](#calibre_link-78)。 大量的更新到唯一鍵現在不帶有欺騙是可能的了。
* [排除約束](#calibre_link-1036)。 這些提供了一個唯一約束的廣義版本,允許執行復雜的條件。
* 新增和加強的安全特性,包括RADIUS認證,LDAP認證改進,和一個新的貢獻模塊 [`passwordcheck`](#calibre_link-389)測試密碼強度。
* 新增高性能實現[`LISTEN`](#calibre_link-983)/ [`NOTIFY`](#calibre_link-982)特性。 等待發生的事件現在存儲在一個基于內存的隊列中,而不是一個表中。 還有,"payload"字符串可以被每個事件發送,而不是和以前一樣只能是一個事件名傳送。
* 新增[`VACUUM FULL`](#calibre_link-748)的實現。 這個命令現在改寫全部的表和索引,而不是移動個別的行到緊密空間。 它實質上在大多數情況下更快,并且不再導致索引膨脹。
* 新增貢獻模塊[`pg_upgrade`](#calibre_link-638), 支持從8.3或8.4到9.0的就地升級。
* 對于特定類型的查詢的多種性能增強,包括刪除不需要的連接。 這幫助優化了一些自動生成的查詢,比如由對象關系映射(ORMs)產生的那些。
* [`EXPLAIN`](#calibre_link-575)增強。 該輸出現在可以用在JSON, XML, 或YAML格式中, 并且包括緩沖區利用和以前不可用的其他數據。
* [`hstore`](#calibre_link-382)增強,包括新功能和更大的數據容量。
以上的條目在下面的章節中有更詳細的介紹。
## E.34.2\. 遷移到版本 9.0
使用pg_dump或使用pg_upgrade 的轉儲/恢復,對于那些想要從任何以前的版本遷移數據的人來說是必須的。
版本9.0包含若干有選擇的突破向后兼容的改變,為了支持新特性和編碼質量改善。 特別的,使得PL/pgSQL、Point-In-Time Recovery (PITR)、或Warm Standby廣泛應用的用戶, 應該測試他們的應用,因為在這些地方有輕微的用戶可見的改變。 觀察下面的不兼容:
### E.34.2.1\. 服務器設置
* 刪除服務器參數`add_missing_from`,該參數缺省為off已經很多年了 (Tom Lane)
* 刪除服務器參數`regex_flavor`,該參數缺省為 [`advanced`](#calibre_link-1037)已經很多年了 (Tom Lane)
* [`archive_mode`](#calibre_link-1038) 現在只影響[`archive_command`](#calibre_link-467); 一個新的設置,[`wal_level`](#calibre_link-1039), 影響預寫式日志的內容 (Heikki Linnakangas)
* [`log_temp_files`](#calibre_link-1040) 現在使用缺省文件尺寸單位kilobytes (Robert Haas)
### E.34.2.2\. 查詢
* 當查詢一個[parent table](#calibre_link-1041)時, 不要在作為查詢一部分掃描的子表上做任何單獨的權限檢查 (Peter Eisentraut)
SQL標準聲明這個行為,并且它在實際上比以前在每個子表上和父表一樣檢查權限的行為更加方便。
### E.34.2.3\. 數據類型
* [`bytea`](#calibre_link-628)輸出現在缺省以十六進制格式顯示 (Peter Eisentraut)
服務器參數[`bytea_output`](#calibre_link-1042) 可以用來選擇傳統的輸出格式,如果為了兼容需要。
* 數組輸入現在只考慮純ASCII空白字符潛在的忽略;它將永不忽略非ASCII字符, 即使它們根據某些語言環境是空白 (Tom Lane)
這避免了根據服務器本地設置,數組值會被不同的解釋的某些極端情況。
* 改善標準兼容[`SIMILAR TO`](#calibre_link-1043) 模式和SQL風格`substring()`模式 (Tom Lane)
這包括將`?`和`{...}`處理為模式元字符, 而它們以前只是簡單的文字字符;這相當于在SQL:2008中添加的新特性。 還有,`^`和`$`現在視為簡單的文字字符; 以前它們視為元字符,好像模式遵從POSIX而不是SQL規則。 還有,SQL標準的`substring()`,使用圓括號以嵌套, 不再干擾子字符串的捕獲。還有,括號表達式(字符類)的處理現在更加標準兼容了。
* 根據SQL標準,在為位字符串的3參數[`substring()`](#calibre_link-1044) 中拒絕負的長度值 (Tom Lane)
* 當減少分數秒精度時使`date_trunc`截斷而不是圓整 (Tom Lane)
代碼對于基于整型的日期/時間總是這樣動作。現在基于浮點數的日期/時間行為相似。
### E.34.2.4\. 對象重命名
* 當一個子表從多個無關的父表中繼承相同的字段時,在`RENAME` 期間嚴格執行字段名的一致性 (KaiGai Kohei)
* 當基礎表字段重命名時不再自動重命名索引和索引字段 (Tom Lane)
超級管理員仍然可以手動重命名這樣的索引和字段。這個改變將需要更新JDBC驅動, 和可能的其他驅動,以便唯一索引在重命名之后正確的重組。
* `CREATE OR REPLACE FUNCTION`可以不再改變函數參數聲明的名字 (Pavel Stehule)
為了避免在命名的參數調用中創建歧義,不再允許在一個現有函數的聲明中改變輸入參數的別名 (盡管名字仍然可以分配給以前未命名的參數)。要那樣做,你現在必須`DROP` 并重新創建該函數。
### E.34.2.5\. PL/pgSQL
* 如果變量名與查詢中使用的字段名沖突,PL/pgSQL現在拋出一個錯誤 (Tom Lane)
以前的行為是綁定歧義名為PL/pgSQL變量優先于查詢字段,這經常導致令人吃驚的錯誤行為。 拋出一個錯誤允許簡單的檢測引起歧義的情景。雖然建議函數遇到這種類型的錯誤時修改為移除該沖突, 但是如果需要,舊的行為可以被修復,通過配置參數[`plpgsql.variable_conflict`](#calibre_link-1045), 或通過每個函數的選項`#variable_conflict`。
* PL/pgSQL不再允許匹配特定SQL保留字的變量名 (Tom Lane)
這是校正PL/pgSQL分析器更密切的匹配內核SQL分析器的一個后果。如果需要, 變量名可以用雙引號引起來以避免這種限制。
* PL/pgSQL現在要求復合結果的字段和基礎類型一樣匹配預期的類型修飾符 (Pavel Stehule, Tom Lane)
例如,如果結果類型的字段聲明為`NUMERIC(30,2)`,那么它不再適用于在該字段中返回一個 其他精度的`NUMERIC`。以前的版本忽略了檢查類型修飾符, 并且因此允許結果行實際上并不符合聲明的限制。
* PL/pgSQL現在對待選擇到復合字段更加一致 (Tom Lane)
以前,像`SELECT ... INTO` `_rec_`.`_fld_` FROM ... 這樣的聲明被當做是標量賦值,即使記錄字段`_fld_`是復合類型。 現在,它被當做記錄賦值,當`INTO`目標是一個復合類型的規則變量時也是一樣的。 所以被賦予到字段的子字段的值應該被寫為`SELECT`列表的單獨的列, 不是在以前版本中`ROW(...)`構造那樣。
如果你需要一個在9.0和以前版本中都能運行的方式來做這點,你可以像這樣來寫: `_rec_`.`_fld_` := ROW(...) FROM ...。
* 刪除PL/pgSQL的`RENAME`聲明 (Tom Lane)
取代`RENAME`,使用[`ALIAS`](#calibre_link-1046), 現在可以為任意變量創建一個別名,不只是和以前一樣的美元符號參數名稱(如`$1`)。
### E.34.2.6\. 其他的不兼容
* 不贊成使用`=>`作為一個操作符名稱 (Robert Haas)
將來版本的PostgreSQL可能完全拒絕這種操作符名, 為了支持命名函數參數的SQL標準符號。目前,仍然是允許的, 但是定義這樣的一個操作符時會發出警告。
* 刪除對沒有64位整數數據類型工作的平臺的支持 (Tom Lane)
認為所有仍然支持的平臺有64位整數數據類型工作。
## E.34.3\. 修改列表
版本9.0有一個前所未有的新主版本特性的數量,超過200個增強、 改善、新增命令、新增函數和其他修改。
### E.34.3.1\. 服務器
#### E.34.3.1.1\. 連續存檔和流復制
PostgreSQL的現有備用服務器性能已經擴展為支持在備用服務器上只讀查詢和大大減少主從服務器之間的延遲。 對于很多用戶,這將是流復制的一個有用和低管理的形式,要么為了高可用性,要么為了水平伸縮性。
* 允許備用服務器接受只讀查詢 (Simon Riggs, Heikki Linnakangas)
這個特性稱為熱備份。有新的`postgresql.conf`和`recovery.conf` 設置控制這個特性,還有大量的[文檔](#calibre_link-1047)
* 允許預寫式日志(WAL)數據流到備用服務器 (Fujii Masao, Heikki Linnakangas)
這個特性稱為流復制。以前的WAL數據只能以整個WAL 文件(通常每個16百萬字節)為基本單位被送到備用服務器。 流復制消除低效,并且允許在主服務器上的更新以非常小的延遲傳送到備用服務器上。 有新的`postgresql.conf`和`recovery.conf`設置控制這個特性, 還有大量的[文檔](#calibre_link-1048)。
* 添加[`pg_last_xlog_receive_location()`](#calibre_link-1049) 和`pg_last_xlog_replay_location()`,可以用來監控備用服務器的 WAL活動 (Simon Riggs, Fujii Masao, Heikki Linnakangas)
#### E.34.3.1.2\. 性能
* 允許通過[`ALTER TABLESPACE ... SET/RESET`](#calibre_link-113) 為連續的和隨機的頁面成本估算(`seq_page_cost`/`random_page_cost`) 設置每個表空間的值 (Robert Haas)
* 提高性能和連接查詢中的EvalPlanQual再核查 (Tom Lane)
包含連接的`UPDATE`, `DELETE`, 和 `SELECT FOR UPDATE/SHARE` 查詢現在在遇到最近更新的行時表現的更好。
* 當表早些時候在同一個事務中被創建或截斷時,改善 [`TRUNCATE`](#calibre_link-89)的性能 (Tom Lane)
* 提高找到繼承子表的性能 (Tom Lane)
#### E.34.3.1.3\. 優化
* 刪除不需要的[外連接](#calibre_link-1050) (Robert Haas)
內側的外連接是唯一的,并且不被連接的上級引用,因此現在刪除了。 這將加速許多自動生成的查詢,如那些通過對象關系映射(ORMs)創建的查詢。
* 允許`IS NOT NULL`限制使用索引 (Tom Lane)
這對于在包含許多空值的索引中發現`MAX()`/`MIN()` 值是尤其有用的。
* 改善優化器為`DISTINCT`選擇何時使用物化節點,何時使用排序和散列 (Tom Lane)
* 改善優化器為包含`boolean` `<>`操作符的表達式的等價性檢測 (Tom Lane)
#### E.34.3.1.4\. [GEQO](#calibre_link-529)
* 每次GEQO規劃一個查詢時使用相同的隨機種子 (Andres Freund)
Genetic Query Optimizer (GEQO)仍然選擇隨機規劃,它現在總是為相同的查詢選擇相同的隨機規劃, 從而給出更加一致的性能。可以修改[`geqo_seed`](#calibre_link-531) 試驗可選擇的規劃。
* 改善GEQO規劃選擇 (Tom Lane)
這避免了少有的錯誤"failed to make a valid plan", 并且應該提升了規劃速度。
#### E.34.3.1.5\. 優化器統計信息
* 改善[`ANALYZE`](#calibre_link-589)以支持繼承樹統計信息 (Tom Lane)
這對于分區表特別有用。不過,當子表改變時autovacuum目前還沒有自動重新分析父表。
* 當需要重新分析時,改善[autovacuum](#calibre_link-753) 的檢測 (Tom Lane)
* 改善優化器對于大于/小于比較的估計 (Tom Lane)
當查閱對于大于/小于比較的統計信息時,如果比較值是直方圖的第一個或最后一個, 使用一個索引(如果可用)抓全當前實際字段的最小或最大值。 這大大的提高了估算接近數據范圍結尾的比較值的精確度, 尤其是當范圍由于新數據的添加而持續變化時。
* 允許不同值數量統計的設置使用[`ALTER TABLE`](#calibre_link-88) (Robert Haas)
這允許用戶重載一個字段的不同值的估計數量或百分比。這個統計通常通過`ANALYZE` 計算,但是估計可能會差些,尤其是在有非常多的行的表上。
#### E.34.3.1.6\. 認證
* 添加對[RADIUS](#calibre_link-1051) (Remote Authentication Dial In User Service)認證的支持 (Magnus Hagander)
* 允許[LDAP](#calibre_link-1052)(Lightweight Directory Access Protocol) 認證在"search/bind"模式下操作 (Robert Fleming, Magnus Hagander)
這允許用戶先查找,然后系統使用DN (Distinguished Name) 返回給那個用戶。
* 添加[`samehost`](#calibre_link-656) 和`samenet`指定到`pg_hba.conf` (Stef Walter)
這些分別匹配服務器的IP地址和子網地址。
* 傳遞信任的SSL根證書名字到客戶端,這樣客戶端可以返回一個合適的客戶端證書 (Craig Ringer)
#### E.34.3.1.7\. 監控
* 添加客戶端設置[應用名](#calibre_link-1053) 的能力,在`pg_stat_activity`中顯示 (Dave Page)
這允許管理員表現數據流量和通過源應用尋找故障問題。
* 添加SQLSTATE選項(`%e`)到 [`log_line_prefix`](#calibre_link-1054) (Guillaume Smet)
這允許用戶通過錯誤代碼數量編制錯誤和消息的統計數據。
* 以UTF16編碼寫入Windows事件記錄 (Itagaki Takahiro)
現在在Windows上的PostgreSQL記錄消息支持多種語言。
#### E.34.3.1.8\. 統計計數器
* 添加[`pg_stat_reset_shared('bgwriter')`](#calibre_link-1055) 為后端寫入重置集群范圍的共享統計數據 (Greg Smith)
* 添加 [`pg_stat_reset_single_table_counters()`](#calibre_link-1055) 和`pg_stat_reset_single_function_counters()`, 允許為單獨的表和函數重置統計計數器(Magnus Hagander)
#### E.34.3.1.9\. 服務器設置
* 允許配置參數的設置基于[database/role combinations](#calibre_link-17) (Alvaro Herrera)
以前,只有每個數據庫和每個角色的設置是可能的,組合是不行的。 所有角色和數據庫設置現在存儲在新的`pg_db_role_setting` 系統目錄中。新的psql命令`\drds`顯示了這些設置。 遺留系統視圖`pg_roles`, `pg_shadow`, 和 `pg_user` 不顯示組合設置,并且因此不再完全的代表一個用戶或數據庫的配置。
* 添加服務器參數[`bonjour`](#calibre_link-1056), 控制啟用Bonjour的服務器是否通過Bonjour通知它自己 (Tom Lane)
缺省為off,意味著它不做通知。 這允許包裝程序分配啟用Bonjour的建立時不用擔心個別用戶可能不想要這個特性。
* 添加服務器參數[`enable_material`](#calibre_link-1057), 控制在優化器中物化節點的使用 (Robert Haas)
缺省為on。為off時,優化器將不是純粹的為性能原因添加物化節點, 盡管他們在為了正確性的需要時仍然被使用。
* 修改服務器參數[`log_temp_files`](#calibre_link-1040) 使用千字節為缺省文件大小單位 (Robert Haas)
以前,如果沒有聲明單位,這種設置解釋為字節計。
* 當`postgresql.conf`重新加載時日志參數值的變化 (Peter Eisentraut)
這使得管理員和安保員審計數據庫設置的修改,并且也非常方便檢查 `postgresql.conf`編輯的效果。
* 正確執行自定義服務器參數的超級用戶權限 (Tom Lane)
非超級用戶不能再為服務器目前不知道的參數發出`ALTER ROLE`/`DATABASE SET` 這允許服務器正確的檢查僅超級用戶的參數只有通過超級用戶設置。以前, 允許`SET`并且在會話開始的時候忽略, 使得僅超級用戶的自定義參數比其應該有的作用要小的多。
### E.34.3.2\. 查詢
* 在應用`LIMIT`之后執行[`SELECT FOR UPDATE`/`SHARE`](#calibre_link-1058)處理, 這樣返回的行數總是可預見的 (Tom Lane)
以前,并發事務所做的改變會導致`SELECT FOR UPDATE` 返回的行數出乎意料的少于它的`LIMIT`聲明的行數。 `FOR UPDATE`和`ORDER BY`的組合也會產生令人驚訝的結果, 但是可以通過在子句中放置`FOR UPDATE`來糾正。
* 允許傳統的和SQL標準的[`LIMIT`/`OFFSET`](#calibre_link-1059) 語法混合 (Tom Lane)
* 在[窗口函數](#calibre_link-1060)中擴展支持的框架選項 (Hitoshi Harada)
框架現在可以以`CURRENT ROW`開始,并且現在支持 `ROWS` `_n_` PRECEDING/`FOLLOWING`選項。
* 使得`SELECT INTO`和`CREATE TABLE AS` 在它們的命令標簽中返回行計數到客戶端 (Boszormenyi Zoltan)
這可以節省到客戶端的整個往返,允許結果計數和頁碼的計算不帶有附加的`COUNT`查詢。
#### E.34.3.2.1\. Unicode 字符串
* 在[`U&`](#calibre_link-1061) 字符串和標識符中支持Unicode代理對(段16位表現) (Peter Eisentraut)
* 在[`E'...'`](#calibre_link-1062) 字符串中支持Unicode逃逸 (Marko Kreen)
### E.34.3.3\. 對象操作
* 通過定義沖刷到磁盤加速[`CREATE DATABASE`](#calibre_link-111) (Andres Freund, Greg Stark)
* 只允許[注釋](#calibre_link-690)在表、視圖和復合類型的字段上, 不允許在其他關系類型如索引和TOAST表上 (Tom Lane)
* 允許[枚舉類型](#calibre_link-1063) 的創建不包含值 (Bruce Momjian)
* 使有存儲類型`MAIN`的字段的值保留在主堆頁上, 除了不適合在一個頁面上的行 (Kevin Grittner)
以前,`MAIN`值被迫離開到TOAST表, 直到行的大小小于頁面大小的四分之一。
#### E.34.3.3.1\. `ALTER TABLE`
* 為`ALTER TABLE DROP COLUMN`和`ALTER TABLE DROP CONSTRAINT` 實現了`IF EXISTS` (Andres Freund)
* 允許`ALTER TABLE`命令重寫表以跳過WAL記錄 (Itagaki Takahiro)
這樣的操作要么生成一個該表的新的拷貝,要么回滾,所以可以跳過WAL歸檔, 除非運行在連續歸檔模式。這樣減少了I/O開支,并且提高了性能。
* 修復不是表的所有者執行`ALTER TABLE` `_table_` ADD COLUMN `_col_` serial時的失敗 (Tom Lane)
#### E.34.3.3.2\. [`CREATE TABLE`](#calibre_link-7)
* 添加在`CREATE TABLE ... LIKE`命令中拷貝`COMMENTS` 和`STORAGE`字符串的支持 (Itagaki Takahiro)
* 添加拷貝`CREATE TABLE ... LIKE`命令中所有屬性的快捷方式 (Itagaki Takahiro)
* 添加SQL標準的`CREATE TABLE ... OF` `_type_`命令 (Peter Eisentraut)
這允許表的創建匹配一個現有的復合類型。附加約束和默認值可以在該命令中指定。
#### E.34.3.3.3\. 約束
* 添加[可推遲的唯一約束](#calibre_link-78) (Dean Rasheed)
這允許大量的更新,如`UPDATE tab SET col = col + 1`, 可靠的運行在有唯一索引或標記為主鍵的字段上。如果約束被指定為`DEFERRABLE`, 那么它將在語句的最后被檢查,而不是在每行被更新之后。該約束檢查也可以被推遲到當前事務的結尾, 允許這樣的更新在多個SQL命令中傳播。
* 增加了[排除約束](#calibre_link-1036) (Jeff Davis)
排除約束通過允許任意的比較操作符(不只是相等)概括唯一約束。 它們是用[`CREATE TABLE CONSTRAINT ... EXCLUDE`](#calibre_link-1064)子句創建的。 排除約束最常見的使用是聲明字段記錄不能重復,而不只是簡單的不能相等。 這對于時間階段和其他范圍還有數組是有用的。 這個特性為許多日程、時間管理和科學應用加強了數據完整性的檢查。
* 改善唯一約束違反的錯誤消息以報告導致該失敗的值 (Itagaki Takahiro)
例如,唯一約束違反現在可以報告`Key (x)=(2) already exists`。
#### E.34.3.3.4\. 對象權限
* 添加使用新的[`GRANT`/`REVOKE IN SCHEMA`](#calibre_link-19) 子句在整個模式中改變大量權限的能力 (Petr Jelinek)
這簡化了對象權限的管理,并且使得應用數據安全更容易的利用數據庫角色。
* 添加[`ALTER DEFAULT PRIVILEGES`](#calibre_link-1034) 命令以控制稍后創建的對象的權限 (Petr Jelinek)
這大大的簡化了復雜數據庫應用中對象權限的分配。可以為表、視圖、序列和函數設置缺省權限。 缺省可以在每個模式的基礎上或者數據庫范圍內分配。
* 添加用`GRANT`/`REVOKE`控制大對象(BLOB)權限的能力 (KaiGai Kohei)
以前,任意數據庫用戶可以讀取或者修改任何大對象。 現在可以賦予和撤銷每個大對象的讀取和寫入權限, 并且追蹤大對象的所有者關系。
### E.34.3.4\. 實用操作
* 使得[`LISTEN`](#calibre_link-983)/ [`NOTIFY`](#calibre_link-982) 存儲在一個內存序列中等待事件,而不是在一個系統表中 (Joachim Wieland)
這在保留事務支持和保證交付的現有特性時大幅度的提升了性能。
* 允許[`NOTIFY`](#calibre_link-982) 傳送一個可選的"payload"字符串到監聽器 (Joachim Wieland)
這大大的提升了`LISTEN`/`NOTIFY`作為一個通用的事件隊列系統的有用性。
* 允許在所有的數據庫系統目錄上[`CLUSTER`](#calibre_link-71) (Tom Lane)
共享的目錄仍然不能集群。
#### E.34.3.4.1\. [`COPY`](#calibre_link-777)
* 接受`COPY ... CSV FORCE QUOTE *` (Itagaki Takahiro)
現在`*`在`FORCE QUOTE`子句中可以用作"所有字段"的簡寫。
* 添加新的`COPY`語法,允許選項在圓括號內部指定 (Robert Haas, Emmanuel Cecchet)
這允許未來的`COPY`選項有更大的靈活性。仍然支持舊的語法, 但是只對已經存在的選項。
#### E.34.3.4.2\. [`EXPLAIN`](#calibre_link-575)
* 允許`EXPLAIN`以XML、JSON或YAML 格式輸出(Robert Haas, Greg Sabino Mullane)
新的輸出格式是容易機器可讀的,支持分析`EXPLAIN`輸出的新工具的發展。
* 添加新的`BUFFERS`選項報告`EXPLAIN ANALYZE` 期間查詢緩沖區的使用 (Itagaki Takahiro)
這允許為單個查詢更好的查詢分析。緩沖區的使用不再在 [log_statement_stats](#calibre_link-1065) 和相關設置的輸出中報告。
* 添加散列使用信息到`EXPLAIN`輸出 (Robert Haas)
* 添加新的`EXPLAIN`語法,允許選項在圓括號內部指定 (Robert Haas)
這允許未來的`EXPLAIN`選項有更大的靈活性。仍然支持舊的語法, 但是只對已經存在的選項。
#### E.34.3.4.3\. [`VACUUM`](#calibre_link-748)
* 改變`VACUUM FULL`重寫整個表和重建它的索引, 而不是圍繞緊致的空間移動個別的行 (Itagaki Takahiro, Tom Lane)
以前的方法通常較慢,并且導致索引膨脹。請注意, 新的方法將在`VACUUM FULL`期間瞬間使用更多磁盤空間; 可能是正常被該表和它的索引占用的空間的兩倍。
* 添加新的`VACUUM`語法,允許選項在圓括號內部指定 (Itagaki Takahiro)
這允許未來的`VACUUM`選項有更大的靈活性。仍然支持舊的語法, 但是只對已經存在的選項。
#### E.34.3.4.4\. 索引
* 允許索引在[`CREATE INDEX`](#calibre_link-83) 中通過省略索引名自動命名 (Tom Lane)
* 缺省的,多字段索引現在以所有它們的字段命名; 索引表達式字段現在基于它們的表達式命名 (Tom Lane)
* 重建共享系統目錄索引現在是完全事務性并且崩潰安全了 (Tom Lane)
以前,重建共享索引只允許在單機模式,并且在操作期間崩潰會使索引在一個比之前更糟糕的狀態。
* 為GiST添加`point_ops`運算符類 (Teodor Sigaev)
這個特性許可GiST索引`point`字段。 該索引可以用于查詢的幾個類型,如`_point_` `<@` `_polygon_` (點在多邊形中)。這應該使得許多PostGIS查詢快很多。
* 為GIN索引創建使用紅黑二叉樹 (Teodor Sigaev)
紅黑樹是自動平衡的。避免了非隨機的輸入順序情況下的減速。
### E.34.3.5\. 數據類型
* 允許[`bytea`](#calibre_link-628) 值以十六進制符號書寫 (Peter Eisentraut)
服務器參數[`bytea_output`](#calibre_link-1042) 控制十六進制還是傳統格式用于`bytea`輸出。當連接到 PostgreSQL 9.0或更新的服務器時,Libpq的 `PQescapeByteaConn()`函數自動使用十六進制格式。 不過,9.0以前的libpq版本將不能為更新的服務器處理十六進制格式。
新的十六進制格式將直接兼容更多使用二進制數據的應用,允許它們存儲和檢索, 而不用額外的轉換。它比傳統的格式的讀取和寫入也要快得多。
* 允許服務器參數[extra_float_digits](#calibre_link-699) 增加到`3` (Tom Lane)
以前`extra_float_digits`的最大值設置是`2`。 在某些情況下,需要3位數準確的轉儲和恢復`float4`值。 pg_dump現在在從允許設置為3的服務器轉儲時將使用3的設置。
* 加強`int2vector`值的輸入檢查 (Caleb Welton)
#### E.34.3.5.1\. [全文檢索](#calibre_link-426)
* 在`同義詞`字典中添加前綴支持 (Teodor Sigaev)
* 添加_過濾_字典 (Teodor Sigaev)
過濾字典允許符號被修改后傳送到隨后的字典。
* 在郵件地址符號中允許下劃線 (Teodor Sigaev)
* 為解析URL符號使用更符合標準的規則 (Tom Lane)
### E.34.3.6\. 函數
* 允許函數調用提供參數名,并且匹配它們到函數定義中命名的參數 (Pavel Stehule)
例如,如果一個函數定義為接受參數`a`和`b`, 它可以用`func(a := 7, b := 12)`或`func(b := 12, a := 7)`調用。
* 支持本地特定的[正則表達式](#calibre_link-1066) 處理UTF-8服務器編碼 (Tom Lane)
本地特定的正則表達式功能包括大小寫敏感匹配和本地特定的字符類。 以前,這些特性只在數據庫使用一個單字節服務器編碼(如LATIN1)時, 可以為非ASCII字符正確的工作。它們將仍然在多字節編碼下錯誤行為, 除了UTF-8。
* 在[`to_char()`](#calibre_link-800) ([`EEEE`規范](#calibre_link-1067)) 中添加對科學計數法的支持 (Pavel Stehule, Brendan Jurd)
* 使得`to_char()`遵守[`FM`](#calibre_link-1068)(填充模式)按照`Y`、`YY` 和`YYY`規格 (Bruce Momjian, Tom Lane)
它早已遵從`YYYY`。
* 修復`to_char()`在Windows 上以正確的編碼輸出本地化的數值和貨幣字符串 (Hiroshi Inoue, Itagaki Takahiro, Bruce Momjian)
* 為多邊形正確計算["重疊"](#calibre_link-1069) 和"包含" (Teodor Sigaev)
多邊形`&&`(重疊)運算符以前選中只是為了查看兩個多邊形的邊界框是否重疊。 現在它做一個更正確的檢查。多邊形`@>`和`<@`(包含/包含于) 運算符以前選中是為了查看一個多邊形頂點是否都包含在另一個中; 這對于一些非凸多邊形會錯誤的報告"true"。 現在它們檢查一個多邊形的所有線段都包含在另一個中。
#### E.34.3.6.1\. 聚集
* 允許聚集函數使用 [`ORDER BY`](#calibre_link-1070) (Andrew Gierth)
例如,現在支持:`array_agg(a ORDER BY b)`。 這對于輸入值順序很重要的聚集是有用的,并且消除了使用非標準的子查詢確定順序的需要。
* 多參數聚集函數現在可以使用`DISTINCT` (Andrew Gierth)
* 添加[`string_agg()`](#calibre_link-1071) 函數,組合值到一個字符串 (Pavel Stehule)
* 用`DISTINCT`調用的聚集函數,如果聚集轉換函數沒有被標記為`STRICT`, 那么現在傳遞NULL值 (Andrew Gierth)
例如,`agg(DISTINCT x)`可能傳遞一個NULL `x`值到`agg()`。 這和非`DISTINCT`情況的行為更加一致。
#### E.34.3.6.2\. 位字符串
* 為`bit`字符串添加[`get_bit()`](#calibre_link-1072) 和`set_bit()`函數,為`bytea`映射這兩個函數 (Leonardo F)
* 為`bit`字符串和`bytea`實現[`OVERLAY()`](#calibre_link-1044)(替換) (Leonardo F)
#### E.34.3.6.3\. 對象信息函數
* 添加[`pg_table_size()`](#calibre_link-1073) 和`pg_indexes_size()`,提供一個更加用戶友好的界面到 `pg_relation_size()`函數 (Bernd Helmle)
* 為序列權限檢查添加[`has_sequence_privilege()`](#calibre_link-1074) (Abhijit Menon-Sen)
* 更新[information_schema](#calibre_link-583) 視圖以符合SQL:2008 (Peter Eisentraut)
* 使得`information_schema`視圖為`char`和`varchar` 字段正確的顯示最大的八位字節長度 (Peter Eisentraut)
* 加速`information_schema`權限視圖 (Joachim Wieland)
#### E.34.3.6.4\. 函數和觸發器創建
* 支持使用[`DO`](#calibre_link-521) 聲明執行匿名代碼塊 (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
這允許服務器端代碼的執行不需要創建和刪除臨時函數定義。 代碼可以以任意用戶有權限定義函數的語言執行。
* 實現服從SQL標準的[每字段觸發](#calibre_link-459) (Itagaki Takahiro)
這樣的觸發器只有在指定的字段受到查詢的影響時觸發,如: 出現在`UPDATE`的`SET`列表中。
* 添加`WHEN`子句到[`CREATE TRIGGER`](#calibre_link-459), 允許控制觸發器是否觸發 (Itagaki Takahiro)
雖然相同類型的檢查總是可以在觸發器內部執行,但是在外部的`WHEN` 子句中做檢查會有性能優勢。
### E.34.3.7\. 服務器端語言
* 添加`OR REPLACE`子句到 [`CREATE LANGUAGE`](#calibre_link-605) (Tom Lane)
這對于可選擇的安裝一個并非早已存在的語言是有幫助的, 并且對于現在PL/pgSQL是默認安裝的尤其有幫助。
#### E.34.3.7.1\. [PL/pgSQL](#calibre_link-857)服務器端語言
* 缺省安裝PL/pgSQL (Bruce Momjian)
如果管理員擔心啟用它會有安全或性能問題,該語言仍然可以從個別的數據庫中刪除。
* 改善PL/pgSQL變量名與函數的查詢中使用的標識符沖突時的處理 (Tom Lane)
缺省行為是有沖突時拋出一個錯誤,以便避免意外的行為。這個可以修改, 通過配置參數[`plpgsql.variable_conflict`](#calibre_link-1045) 或者每個函數的選項`#variable_conflict`,允許使用變量或者查詢提供的字段。 在任何情況下,PL/pgSQL將不再嘗試替換不符合語法規范的變量。
* 使PL/pgSQL使用主要的詞法分析程序,而不是它自己的版本 (Tom Lane)
這確保了精確的追蹤主系統的細節行為,如字符串逃逸。一些用戶變量細節, 如考慮保留在PL/pgSQL中的關鍵字的設置,已經因此而改變了。
* 避免為無效的記錄引用拋出不必要的錯誤 (Tom Lane)
現在只有引用實際抓取到時才拋出一個錯誤,而不是每當到達封閉的表達式時。 例如,許多人嘗試在觸發器中這樣做:
```
if TG_OP = 'INSERT' and NEW.col1 = ... then
```
現在這實際上將如預期一樣工作。
* 提高PL/pgSQL處理包含了刪除字段的行類型的能力 (Pavel Stehule)
* 允許輸入參數在PL/pgSQL函數內部分配值 (Steve Prentice)
以前,輸入參數被當做聲明了`CONST`來看,所以函數的代碼不能改變它們的值。 這個限制已被刪除,以簡化函數從其他沒有利用該等價限制的DBMSes中移植。 輸入參數現在像本地變量初始化為傳入的值一樣動作。
* 改進PL/pgSQL中的錯誤位置報告 (Tom Lane)
* 在PL/pgSQL中添加`_count_`和`ALL`選項到 `MOVE FORWARD`/`BACKWARD` (Pavel Stehule)
* 允許PL/pgSQL的`WHERE CURRENT OF`使用游標變量 (Tom Lane)
* 允許PL/pgSQL的`OPEN` `_cursor_` FOR EXECUTE 使用參數 (Pavel Stehule, Itagaki Takahiro)
這用一個新的`USING`子句完成了。
#### E.34.3.7.2\. [PL/Perl](#calibre_link-781)服務器端語言
* 添加新的PL/Perl函數:[`quote_literal()`](#calibre_link-1075), `quote_nullable()`, `quote_ident()`, `encode_bytea()`, `decode_bytea()`, `looks_like_number()`, `encode_array_literal()`, `encode_array_constructor()` (Tim Bunce)
* 添加服務器參數[`plperl.on_init`](#calibre_link-1076), 指定一個PL/Perl初始化函數 (Tim Bunce)
[`plperl.on_plperl_init`](#calibre_link-1077) 和[`plperl.on_plperlu_init`](#calibre_link-1077) 都可以用于初始化,分別針對信任的和不信任的語言。
* 在PL/Perl中支持`END`塊 (Tim Bunce)
`END`塊目前不允許數據庫訪問。
* 在PL/Perl中允許`use strict` (Tim Bunce)
Perl `strict`檢查也可以用新的服務器參數 [`plperl.use_strict`](#calibre_link-1078) 來全局啟用。
* 在PL/Perl中允許`require` (Tim Bunce)
這主要是測試看看該模塊是否加載上了,如果沒有,產生一個錯誤。 不允許加載管理員沒有通過初始化參數預加載的模塊。
* 如果使用了Perl版本5.10或更新,則在PL/Perl中允許`use feature` (Tim Bunce)
* 驗證了PL/Perl返回值在服務器編碼中可用 (Andrew Dunstan)
#### E.34.3.7.3\. [PL/Python](#calibre_link-882) 服務器端語言
* 在PL/Python中添加Unicode支持 (Peter Eisentraut)
如果需要,字符串自動轉換從/到服務器編碼。
* 在PL/Python中改善`bytea`支持 (Caleb Welton)
傳遞到PL/Python中的`Bytea`值現在表示為二進制, 而不是PostgreSQL `bytea`文本格式。包含空字節的`Bytea` 值現在也從PL/Python中適當的輸出。也改善了布爾值、整數值和浮點值的傳送。
* 在PL/Python中支持[arrays](#calibre_link-1079)作為參數并且返回值 (Peter Eisentraut)
* 改善SQL域的映射為Python類型 (Peter Eisentraut)
* 添加Python 3支持到PL/Python (Peter Eisentraut)
新的服務器端語言稱作[`plpython3u`](#calibre_link-883)。 不能用于Python 2服務器端語言的相同會話中。
* 改善PL/Python中的錯誤位置和異常報告 (Peter Eisentraut)
### E.34.3.8\. 客戶應用程序
* 添加`--analyze-only`選項到[`vacuumdb`](#calibre_link-754), 不帶有清理的分析 (Bruce Momjian)
#### E.34.3.8.1\. [psql](#calibre_link-23)
* 添加支持引用/逃逸psql [變量](#calibre_link-1080) 的值作為SQL字符串或標識符 (Pavel Stehule, Robert Haas)
例如,`:'var'`將產生值`var`,引用并適當的逃逸為字符串常量, 而`:"var"`將產生它的值,引用并且逃逸為一個標識符。
* 在通過psql讀取的腳本文件中, 忽略前導的UTF-8編碼的Unicode字節順序標記 (Itagaki Takahiro)
這在客戶端編碼是UTF-8的時候啟用。它改善了與某些編輯器的兼容性, 主要是在Windows上,堅持插入這樣的標記的那些。
* 修復`psql --file -`以適當的遵從 [`--single-transaction`](#calibre_link-1081) (Bruce Momjian)
* 當兩個psql會話并行運行時,避免psql 的命令行歷史重寫 (Tom Lane)
* 改善psql的選項卡實現支持 (Itagaki Takahiro)
* 當啟用`\timing`時顯示它的輸出,不管"quiet"模式 (Peter Eisentraut)
##### E.34.3.8.1.1\. psql 顯示
* 改善psql中封裝字段的顯示 (Roger Leigh)
這個行為現在是缺省的。以前的格式通過使用`\pset linestyle old-ascii`可用。
* 允許psql通過`\pset linestyle unicode` 使用喜好的Unicode線條特性 (Roger Leigh)
##### E.34.3.8.1.2\. psql [`\d`](#calibre_link-1082) 命令
* 使`\d`顯示從指定父表繼承而來的子表 (Damien Clochard)
`\d`只顯示子表的數量,而`\d+`顯示所有子表的名字。
* 在`\d index_name`中顯示索引字段的定義 (Khee Chin)
定義對于表達式索引是有用的。
* 只在`\d+`中顯示視圖的定義查詢,在`\d`中不顯示 (Peter Eisentraut)
總是包括認為過度冗長的查詢。
#### E.34.3.8.2\. [pg_dump](#calibre_link-437)
* 使pg_dump/pg_restore [`--clean`](#calibre_link-1083) 總是刪除大對象 (Itagaki Takahiro)
* 修復pg_dump,使其在啟用`standard_conforming_strings` 時適當的轉儲大對象 (Tom Lane)
當轉儲到一個歸檔文件,并且然后從pg_restore生成腳本輸出時, 以前的編碼可能會失敗。
* pg_restore現在在生成腳本輸出時以十六進制格式發出大對象數據 (Tom Lane)
如果該腳本然后輸入到一個9.0以前的服務器,那么這可能會導致兼容性問題。 要繞開這個問題,直接恢復到該服務器。
* 允許pg_dump轉儲附加到復合類型字段的注釋 (Taro Minowa (Higepon))
* 使pg_dump [`--verbose`](#calibre_link-1083) 在文本輸出模式輸出pg_dump和服務器版本 (Jim Cox, Tom Lane)
這些在自定義輸出模式中早已提供。
* pg_restore現在抱怨是否在開關和選項文件名后面殘存任何命令行參數 (Tom Lane)
以前,它默默地無視任何這樣的參數。
#### E.34.3.8.3\. [pg_ctl](#calibre_link-544)
* 在系統重新啟動該期間允許使用pg_ctl 安全的啟動postmaster (Tom Lane)
以前,pg_ctl的父進程錯誤的認為是基于舊的postmaster 鎖文件運行postmaster,導致瞬間的不能啟動數據庫。
* 給予pg_ctl初始化數據庫的能力(通過調用initdb) (Zdenek Kotala)
### E.34.3.9\. 開發工具
#### E.34.3.9.1\. [libpq](#calibre_link-496)
* 添加新的libpq函數 [`PQconnectdbParams()`](#calibre_link-445) 和`PQconnectStartParams()` (Guillaume Lelarge)
這些函數類似于`PQconnectdb()`和`PQconnectStart()`, 除了它們接受連接選項的數組以null結尾,而不是請求在一個字符串中提供所有選項。
* 添加libpq函數 [`PQescapeLiteral()`](#calibre_link-1084) 和`PQescapeIdentifier()` (Robert Haas)
這些函數返回適當引用和逃逸的SQL字符串字面值和標識符。 調用者不需要預先分配字符串結果,如`PQescapeStringConn()`要求。
* 添加每用戶服務文件的支持([`.pg_service.conf`](#calibre_link-506)), 在站點范圍的服務文件之前檢查 (Peter Eisentraut)
* 如果不能找到指定的libpq服務,那么適當的報告一個錯誤 (Peter Eisentraut)
* 在libpq中添加[TCP keepalive 設置](#calibre_link-1085) (Tollef Fog Heen, Fujii Masao, Robert Haas)
Keepalive設置早已在TCP連接的服務器端支持。
* 在提供可替代方式的平臺上,避免額外的系統調用在libpq 中阻塞或疏通`SIGPIPE` (Jeremy Kerr)
* 當[`.pgpass`](#calibre_link-457)提供的口令未通過時, 在錯誤消息中提到口令的來源 (Bruce Momjian)
* 加載所有客戶端認證文件中給出的SSL認證 (Tom Lane)
改善了對間接簽署的SSL認證的支持。
#### E.34.3.9.2\. [ecpg](#calibre_link-620)
* 添加[SQLDA](#calibre_link-1086) (SQL Descriptor Area)支持到 ecpg (Boszormenyi Zoltan)
* 添加[`DESCRIBE` `OUTPUT` ]](#calibre_link-1086) 聲明到ecpg (Boszormenyi Zoltan)
* 添加一個[ECPGtransactionStatus](#calibre_link-1087) 函數以返回當前事務狀態 (Bernd Helmle)
* 在ecpg Informix兼容模式中添加`string`數據類型 (Boszormenyi Zoltan)
* 允許ecpg沒有限制的使用`new`和`old` 變量名 (Michael Meskes)
* 允許ecpg在`free()`中使用變量名 (Michael Meskes)
* 使`ecpg_dynamic_type()`為非SQL3數據類型返回零 (Michael Meskes)
以前,它返回該數據類型OID的負值。然而,這可能會與有效類型的OID混淆。
* 在早已有64位`long`類型的平臺上支持`long long`類型 (Michael Meskes)
##### E.34.3.9.2.1\. ecpg 游標
* 在ecpg的原始模式中添加超出范圍游標支持 (Boszormenyi Zoltan)
當調用了`OPEN`時,這允許`DECLARE`使用范圍之外的變量。 這個工具早已存在于ecpg的Informix兼容模式中。
* 在ecpg中允許動態游標名 (Boszormenyi Zoltan)
* 允許ecpg在`FETCH`和`MOVE`中使用噪聲字 `FROM`和`IN` (Boszormenyi Zoltan)
### E.34.3.10\. 構建選項
* 默認啟用客戶端線程安全性 (Bruce Momjian)
線程安全性選項可以用[`configure`](#calibre_link-1088) `--disable-thread-safety`禁用。
* 添加控制Linux內存不足殺手的支持 (Alex Hunsaker, Tom Lane)
現在`/proc/self/oom_adj`允許禁用Linux 內存不足(OOM)殺手,推薦為postmaster禁用OOM殺手。 然后為postmaster的子進程重新啟用OOM殺手就能滿足需要了。 新的編譯階段選項[`LINUX_OOM_ADJ`](#calibre_link-1089) 允許為子進程重新啟用殺手。
#### E.34.3.10.1\. Makefiles
* 新增`Makefile`指標[`world`](#calibre_link-1090)、 `install-world`和`installcheck-world` (Andrew Dunstan)
這類似于現有的`all`、`install`和`installcheck`指標, 但是它們也構建HTML文檔,構建并測試`contrib`, 和測試服務器端語言和ecpg。
* 添加數據和文檔安裝位置控制到PGXS Makefiles (Mark Cave-Ayland)
* 添加Makefile規則,作為一個HTML文件或者作為一個純文本文件構建 PostgreSQL文檔 (Peter Eisentraut, Bruce Momjian)
#### E.34.3.10.2\. Windows
* 支持在[64位Windows](#calibre_link-1035) 上編譯和在64位模式中運行 (Tsutomu Yamada, Magnus Hagander)
這允許Windows上大的共享內存大小。
* 支持服務器構建使用[Visual Studio 2008](#calibre_link-1091) (Magnus Hagander)
### E.34.3.11\. 源代碼
* 在子目錄樹中發布預建的文檔,而不是作為發布的原始碼中的tar歸檔文件 (Peter Eisentraut)
例如,預建的HTML文檔現在在`doc/src/sgml/html/`中; 手冊頁同樣的方式打包。
* 使服務器的詞法分析器可重入 (Tom Lane)
PL/pgSQL使用詞法分析器需要這點。
* 提升內存分配的速度 (Tom Lane, Greg Stark)
* 用戶定義的約束觸發器現在在`pg_constraint`和 `pg_trigger`中都有記錄了 (Tom Lane)
因為這個改變,`pg_constraint`.`pgconstrname` 現在是多余的,并且已經刪除了。
* 添加系統目錄字段`pg_constraint`.`conindid` 和`pg_trigger`.`tgconstrindid`, 以便更好的為約束執行記錄索引的使用 (Tom Lane)
* 允許使用單個操作系統信號傳遞多個條件到后端 (Fujii Masao)
這允許添加新的特性,不用管平臺特定的信號條件的個數的約束。
* 提高源代碼的測試覆蓋率,包括`contrib`、PL/Python和PL/Perl (Peter Eisentraut, Andrew Dunstan)
* 刪除系統表引導對平面文件的使用 (Tom Lane, Alvaro Herrera)
這提高了使用許多規則和數據庫時的性能,并且消除了一些可能的故障條件。
* 為"引導"目錄自動生成`pg_attribute`的初始內容 (John Naylor)
這大大的簡化了到這些目錄的更改。
* 分裂`INSERT`/`UPDATE`/`DELETE`操作 `execMain.c`的進程 (Marko Tiikkaja)
現在在單獨的ModifyTable節點中執行更新。這個更改對于未來的發展是必要的基礎。
* 簡化psql的SQL幫助文本的翻譯 (Peter Eisentraut)
* 減少某些文件名的長度,以便在發布的原始碼中的所有文件路徑都小于100個字符 (Tom Lane)
一些解壓程序在長的文件路徑上有問題。
* 添加新的[`ERRCODE_INVALID_PASSWORD`](#calibre_link-1092) `SQLSTATE`錯誤代碼 (Bruce Momjian)
* 經過作者的許可,刪除少量剩余的個人源碼版權聲明 (Bruce Momjian)
個人版權聲明是無關緊要的,但是社區偶爾不得不回答關于他們的問題。
* 添加新的關于在非持久模式中運行PostgreSQL以提升性能的文檔 [章節](#calibre_link-1093) (Bruce Momjian)
* 重新構造HTML文檔`Makefile`規則, 以使它們的依賴性檢查正確的工作,避免不必要的重建 (Peter Eisentraut)
* 為手冊頁的建立使用DocBook XSL樣式表, 而不是Docbook2X (Peter Eisentraut)
這改變了建立手冊頁需要的工具集。
* 改善PL/Perl代碼結構 (Tim Bunce)
* 改進PL/Perl中的錯誤環境報告 (Alexey Klyukin)
#### E.34.3.11.1\. 新構建的需求
請注意,從發布的原始碼建立時沒有應用這些需求, 因為原始碼包括用于建立的這些程序的文件。
* 需要Autoconf 2.63建立configure (Peter Eisentraut)
* 需要Flex 2.5.31或更新版本從CVS檢查建立 (Tom Lane)
* 需要Perl版本5.8或更新版本從CVS檢查建立 (John Naylor, Andrew Dunstan)
#### E.34.3.11.2\. 移植性
* 為Bonjour使用更現代的API (Tom Lane)
Bonjour支持現在需要OS X 10.3或更新版本。 老的API已經被Apple棄用了。
* 為SuperH體系結構添加自旋鎖支持 (Nobuhiro Iwamatsu)
* 如果支持,則允許非GCC編譯器使用內聯函數 (Kurt Harriman)
* 刪除對沒有運行64位整數數據類型的平臺的支持 (Tom Lane)
* 調整`LDFLAGS`的使用,使其在平臺間更加的一致 (Tom Lane)
`LDFLAGS`現在用于連接可執行文件和共享庫,我們在連接可執行文件時添加 `LDFLAGS_EX`,在連接共享庫時添加`LDFLAGS_SL`。
#### E.34.3.11.3\. 服務器編程
* 使后端頭文件安全的包含在C++中 (Kurt Harriman, Peter Eisentraut)
這些改變刪除關鍵字沖突,這些沖突在以前使得C++在后端代碼中使用困難。 不過,在為后端功能使用C++時,仍然有其他復雜性。 在適當的地方仍然需要`extern "C" { }`,內存管理和錯誤處理仍然是有問題的。
* 添加[`AggCheckCallContext()`](#calibre_link-836), 用于檢測是否一個C函數被作為一個聚集調用 (Hitoshi Harada)
* 為`SearchSysCache()`和相關的函數修改調用規范, 以避免硬線連接緩存鍵的最大數量 (Robert Haas)
現有的調用目前仍然可以工作,但是如果沒有轉變到新的風格,預計會在9.1或更新的版本中打斷。
* 需要調用`fastgetattr()`和`heap_getattr()` 后端宏命令,以提供非NULL第四參數 (Robert Haas)
* 自定義typanalyze函數應該不再依賴于`VacAttrStats`.`attr` 確定他們將要傳送的數據的類型 (Tom Lane)
變為允許收集索引字段上的統計信息,該索引字段的存儲類型不同于底層字段的數據類型。 有新的字段告訴我們被分析的實際的數據類型。
#### E.34.3.11.4\. 服務器 Hook
* 添加解析器hook處理ColumnRef和ParamRef節點 (Tom Lane)
* 添加處理實用程序hook,這樣可加載的模塊可以控制實用程序命令 (Itagaki Takahiro)
#### E.34.3.11.5\. 二進制升級支持
* 添加[`contrib/pg_upgrade`](#calibre_link-638) 支持在線升級 (Bruce Momjian)
這避免了升級到一個新的PostgreSQL主版本時轉儲/重載數據庫的需要, 因此,通過數量級減少了停機時間。支持從PostgreSQL 8.3或8.4升級到9.0。
* 添加支持在二進制升級期間保存關系 [`relfilenode`](#calibre_link-578) 值 (Bruce Momjian)
* 添加支持在二進制升級期間保存`pg_type`和`pg_enum` OIDs (Bruce Momjian)
* 移動表空間中的數據文件到PostgreSQL版本特定的子目錄中 (Bruce Momjian)
這簡化了二進制升級。
### E.34.3.12\. 普通發布版
* 添加多線程選項(`-j`)到 [`contrib/pgbench`](#calibre_link-629) (Itagaki Takahiro)
這允許pgbench使用多個CPU,降低pgbench本省成為測試障礙的風險。
* 添加`\shell`和`\setshell`元命令到 [`contrib/pgbench`](#calibre_link-629) (Michael Paquier)
* 為[`contrib/dict_xsyn`](#calibre_link-377) 新增特性 (Sergey Karpov)
新選項是`matchorig`,`matchsynonyms`和`keepsynonyms`。
* 添加全文本字典[`contrib/unaccent`](#calibre_link-405) (Teodor Sigaev)
這個過濾的字典刪除了字母的重(zhong)讀, 使得多種語言上的全文本搜索更加簡單。
* 添加[`dblink_get_notify()`](#calibre_link-1094) 到`contrib/dblink` (Marcus Kempe)
這允許dblink中的異步通知。
* 改善`contrib/dblink`處理刪除了的字段 (Tom Lane)
這影響了[`dblink_build_sql_insert()`](#calibre_link-1095) 和相關的函數。這些函數現在根據邏輯而不是物理字段編號來編號字段。
* 大大的增加了[`contrib/hstore`](#calibre_link-382) 的數據長度限制,并且增加了B-tree和哈希支持,所以在`hstore` 字段上`GROUP BY`和`DISTINCT`操作成為可能 (Andrew Gierth)
也添加了新的函數和操作符。這些改進使得`hstore` 一個功能完整鍵值存儲嵌入到PostgreSQL中。
* 添加[`contrib/passwordcheck`](#calibre_link-389), 支持場地特定密碼強度政策 (Laurenz Albe)
這個模塊的源代碼應該被修改為實現場地特定密碼政策。
* 添加[`contrib/pg_archivecleanup`](#calibre_link-1096) 工具 (Simon Riggs)
目的是用于`archive_cleanup_command`服務器參數, 以刪除不再需要的歸檔文件。
* 添加查詢文本到[`contrib/auto_explain`](#calibre_link-370) 輸出 (Andrew Dunstan)
* 添加緩沖區訪問計數到[`contrib/pg_stat_statements`](#calibre_link-394) (Itagaki Takahiro)
* 更新[`contrib/start-scripts/linux`](#calibre_link-1097), 以使用`/proc/self/oom_adj`禁用[Linux內存溢出](#calibre_link-1089) (OOM)殺手 (Alex Hunsaker, Tom Lane)
- 前言
- 何為PostgreSQL?
- PostgreSQL簡史
- 格式約定
- 更多信息
- 臭蟲匯報指導
- I. 教程
- Chapter 1. 從頭開始
- 1.1. 安裝
- 1.2. 體系基本概念
- 1.3. 創建一個數據庫
- 1.4. 訪問數據庫
- Chapter 2. SQL語言
- 2.1. 介紹
- 2.2. 概念
- 2.3. 創建新表
- 2.4. 向表中添加行
- 2.5. 查詢一個表
- 2.6. 在表間連接
- 2.7. 聚集函數
- 2.8. 更新
- 2.9. 刪除
- Chapter 3. 高級特性
- 3.1. 介紹
- 3.2. 視圖
- 3.3. 外鍵
- 3.4. 事務
- 3.5. 窗口函數
- 3.6. 繼承
- 3.7. 結論
- II. SQL 語言
- Chapter 4. SQL語法
- 4.1. 詞法結構
- 4.2. 值表達式
- 4.3. 調用函數
- Chapter 5. 數據定義
- 5.1. 表的基本概念
- 5.2. 缺省值
- 5.3. 約束
- 5.4. 系統字段
- 5.5. 修改表
- 5.6. 權限
- 5.7. 模式
- 5.8. 繼承
- 5.9. 分區
- 5.10. 外部數據
- 5.11. 其它數據庫對象
- 5.12. 依賴性跟蹤
- Chapter 6. 數據操作
- 6.1. 插入數據
- 6.2. 更新數據
- 6.3. 刪除數據
- Chapter 7. 查詢
- 7.1. 概述
- 7.2. 表表達式
- 7.3. 選擇列表
- 7.4. 組合查詢
- 7.5. 行排序
- 7.6. LIMIT和OFFSET
- 7.7. VALUES列表
- 7.8. WITH 查詢 (通用表表達式)
- Chapter 8. 數據類型
- 8.1. 數值類型
- 8.2. 貨幣類型
- 8.3. 字符類型
- 8.4. 二進制數據類型
- 8.5. 日期/時間類型
- 8.6. 布爾類型
- 8.7. 枚舉類型
- 8.8. 幾何類型
- 8.9. 網絡地址類型
- 8.10. 位串類型
- 8.11. 文本搜索類型
- 8.12. UUID 類型
- 8.13. XML 類型
- 8.14. JSON 類型
- 8.15. Arrays
- 8.16. 復合類型
- 8.17. 范圍類型
- 8.18. 對象標識符類型
- 8.19. 偽類型
- Chapter 9. 函數和操作符
- 9.1. 邏輯操作符
- 9.2. 比較操作符
- 9.3. 數學函數和操作符
- 9.4. 字符串函數和操作符
- 9.5. 二進制字符串函數和操作符
- 9.6. 位串函數和操作符
- 9.7. 模式匹配
- 9.8. 數據類型格式化函數
- 9.9. 時間/日期函數和操作符
- 9.10. 支持枚舉函數
- 9.11. 幾何函數和操作符
- 9.12. 網絡地址函數和操作符
- 9.13. 文本檢索函數和操作符
- 9.14. XML 函數
- 9.15. JSON 函數和操作符
- 9.16. 序列操作函數
- 9.17. 條件表達式
- 9.18. 數組函數和操作符
- 9.19. 范圍函數和操作符
- 9.20. 聚集函數
- 9.21. 窗口函數
- 9.22. 子查詢表達式
- 9.23. 行和數組比較
- 9.24. 返回集合的函數
- 9.25. 系統信息函數
- 9.26. 系統管理函數
- 9.27. 觸發器函數
- 9.28. 事件觸發函數
- Chapter 10. 類型轉換
- 10.1. 概述
- 10.2. 操作符
- 10.3. 函數
- 10.4. 值存儲
- 10.5. UNION, CASE 和相關構造
- Chapter 11. 索引
- 11.1. 介紹
- 11.2. 索引類型
- 11.3. 多字段索引
- 11.4. 索引和ORDER BY
- 11.5. 組合多個索引
- 11.6. 唯一索引
- 11.7. 表達式上的索引
- 11.8. 部分索引
- 11.9. 操作符類和操作符族
- 11.10. 索引和排序
- 11.11. 檢查索引的使用
- Chapter 12. 全文檢索
- 12.1. 介紹
- 12.2. 表和索引
- 12.3. 控制文本搜索
- 12.4. 附加功能
- 12.5. 解析器
- 12.6. 詞典
- 12.7. 配置實例
- 12.8. 測試和調試文本搜索
- 12.9. GiST和GIN索引類型
- 12.10. psql支持
- 12.11. 限制
- 12.12. 來自8.3之前文本搜索的遷移
- Chapter 13. 并發控制
- 13.1. 介紹
- 13.2. 事務隔離
- 13.3. 明確鎖定
- 13.4. 應用層數據完整性檢查
- 13.5. 鎖和索引
- Chapter 14. 性能提升技巧
- 14.1. 使用EXPLAIN
- 14.2. 規劃器使用的統計信息
- 14.3. 用明確的JOIN控制規劃器
- 14.4. 向數據庫中添加記錄
- 14.5. 非持久性設置
- III. 服務器管理
- Chapter 15. 源碼安裝
- 15.1. 簡版
- 15.2. 要求
- 15.3. 獲取源碼
- 15.4. 安裝過程
- 15.5. 安裝后設置
- 15.6. 支持平臺
- 15.7. 特定平臺注意事項
- Chapter 16. Windows下用源代碼安裝
- 16.1. 用Visual C++或Microsoft Windows SDK編譯
- 16.2. 用Visual C++或 Borland C++編譯 libpq
- Chapter 17. 服務器設置和操作
- 17.1. PostgreSQL用戶賬戶
- 17.2. 創建數據庫集群
- 17.3. 啟動數據庫服務器
- 17.4. 管理內核資源
- 17.5. 關閉服務器
- 17.6. 升級一個 PostgreSQL 集群
- 17.7. 防止服務器欺騙
- 17.8. 加密選項
- 17.9. 用 SSL 進行安全的 TCP/IP 連接
- 17.10. 用SSH隧道進行安全 TCP/IP 連接
- 17.11. 在Windows上注冊事件日志
- Chapter 18. 服務器配置
- 18.1. 設置參數
- 18.2. 文件位置
- 18.3. 連接和認證
- 18.4. 資源消耗
- 18.5. 預寫式日志
- 18.6. 復制
- 18.7. 查詢規劃
- 18.8. 錯誤報告和日志
- 18.9. 運行時統計
- 18.10. 自動清理
- 18.11. 客戶端連接缺省
- 18.12. 鎖管理
- 18.13. 版本和平臺兼容性
- 18.14. Error Handling
- 18.15. 預置選項
- 18.16. 自定義選項
- 18.17. 開發人員選項
- 18.18. 短選項
- Chapter 19. 用戶認證
- 19.1. pg_hba.conf文件
- 19.2. 用戶名映射
- 19.3. 認證方法
- 19.4. 用戶認證
- Chapter 20. 數據庫角色
- 20.1. 數據庫角色
- 20.2. 角色屬性
- 20.3. 角色成員
- 20.4. 函數和觸發器安全
- Chapter 21. 管理數據庫
- 21.1. 概述
- 21.2. 創建一個數據庫
- 21.3. 模板數據庫
- 21.4. 數據庫配置
- 21.5. 刪除數據庫
- 21.6. 表空間
- Chapter 22. 區域
- 22.1. 區域支持
- 22.2. 排序規則支持
- 22.3. 字符集支持
- Chapter 23. 日常數據庫維護工作
- 23.1. 日常清理
- 23.2. 經常重建索引
- 23.3. 日志文件維護
- Chapter 24. 備份與恢復
- 24.1. SQL轉儲
- 24.2. 文件系統級別備份
- 24.3. 在線備份以及即時恢復(PITR)
- Chapter 25. 高可用性與負載均衡,復制
- 25.1. 不同解決方案的比較
- 25.2. 日志傳送備份服務器
- 25.3. 失效切換
- 25.4. 日志傳送的替代方法
- 25.5. 熱備
- Chapter 26. 恢復配置
- 26.1. 歸檔恢復設置
- 26.2. 恢復目標設置
- 26.3. 備用服務器設置
- Chapter 27. 監控數據庫的活動
- 27.1. 標準Unix工具
- 27.2. 統計收集器
- 27.3. 查看鎖
- 27.4. 動態跟蹤
- Chapter 28. 監控磁盤使用情況
- 28.1. 判斷磁盤的使用量
- 28.2. 磁盤滿導致的失效
- Chapter 29. 可靠性和預寫式日志
- 29.1. 可靠性
- 29.2. 預寫式日志(WAL)
- 29.3. 異步提交
- 29.4. WAL 配置
- 29.5. WAL 內部
- Chapter 30. 回歸測試
- 30.1. 運行測試
- 30.2. 測試評估
- 30.3. 平臺相關的比較文件
- 30.4. 測試覆蓋率檢查
- IV. 客戶端接口
- Chapter 31. libpq - C 庫
- 31.1. 數據庫連接控制函數
- 31.2. 連接狀態函數
- 31.3. 命令執行函數
- 31.4. 異步命令處理
- 31.5. 逐行檢索查詢結果
- 31.6. 取消正在處理的查詢
- 31.7. 捷徑接口
- 31.8. 異步通知
- 31.9. 與COPY命令相關的函數
- 31.10. 控制函數
- 31.11. 各種函數
- 31.12. 注意信息處理
- 31.13. 事件系統
- 31.14. 環境變量
- 31.15. 口令文件
- 31.16. 連接服務的文件
- 31.17. LDAP查找連接參數
- 31.18. SSL 支持
- 31.19. 在多線程程序里的行為
- 31.20. 制作libpq程序
- 31.21. 例子程序
- Chapter 32. 大對象
- 32.1. 介紹
- 32.2. 實現特點
- 32.3. 客戶端接口
- 32.4. 服務器端函數
- 32.5. 例子程序
- Chapter 33. ECPG - 在C中嵌入SQL
- 33.1. 概念
- 33.2. 管理數據庫連接
- 33.3. 運行SQL命令
- 33.4. 使用宿主變量
- 33.5. 動態SQL
- 33.6. pgtypes 庫
- 33.7. 使用描述符范圍
- 33.8. 錯誤處理
- 33.9. 預處理器指令
- 33.10. 處理嵌入的SQL程序
- 33.11. 庫函數
- 33.12. 大對象
- 33.13. C++應用程序
- 33.14. 嵌入的SQL命令
- ALLOCATE DESCRIPTOR
- CONNECT
- DEALLOCATE DESCRIPTOR
- DECLARE
- DESCRIBE
- DISCONNECT
- EXECUTE IMMEDIATE
- GET DESCRIPTOR
- OPEN
- PREPARE
- SET AUTOCOMMIT
- SET CONNECTION
- SET DESCRIPTOR
- TYPE
- VAR
- WHENEVER
- 33.15. Informix兼容模式
- 33.16. 內部
- Chapter 34. 信息模式
- 34.1. 關于這個模式
- 34.2. 數據類型
- 34.3. information_schema_catalog_name
- 34.4. administrable_role_authorizations
- 34.5. applicable_roles
- 34.6. attributes
- 34.7. character_sets
- 34.8. check_constraint_routine_usage
- 34.9. check_constraints
- 34.10. collations
- 34.11. collation_character_set_applicability
- 34.12. column_domain_usage
- 34.13. column_options
- 34.14. column_privileges
- 34.15. column_udt_usage
- 34.16. columns
- 34.17. constraint_column_usage
- 34.18. constraint_table_usage
- 34.19. data_type_privileges
- 34.20. domain_constraints
- 34.21. domain_udt_usage
- 34.22. domains
- 34.23. element_types
- 34.24. enabled_roles
- 34.25. foreign_data_wrapper_options
- 34.26. foreign_data_wrappers
- 34.27. foreign_server_options
- 34.28. foreign_servers
- 34.29. foreign_table_options
- 34.30. foreign_tables
- 34.31. key_column_usage
- 34.32. parameters
- 34.33. referential_constraints
- 34.34. role_column_grants
- 34.35. role_routine_grants
- 34.36. role_table_grants
- 34.37. role_udt_grants
- 34.38. role_usage_grants
- 34.39. routine_privileges
- 34.40. routines
- 34.41. schemata
- 34.42. sequences
- 34.43. sql_features
- 34.44. sql_implementation_info
- 34.45. sql_languages
- 34.46. sql_packages
- 34.47. sql_parts
- 34.48. sql_sizing
- 34.49. sql_sizing_profiles
- 34.50. table_constraints
- 34.51. table_privileges
- 34.52. tables
- 34.53. triggered_update_columns
- 34.54. triggers
- 34.55. udt_privileges
- 34.56. usage_privileges
- 34.57. user_defined_types
- 34.58. user_mapping_options
- 34.59. user_mappings
- 34.60. view_column_usage
- 34.61. view_routine_usage
- 34.62. view_table_usage
- 34.63. views
- V. 服務器端編程
- Chapter 35. 擴展SQL
- 35.1. 擴展性是如何實現的
- 35.2. PostgreSQL類型系統
- 35.3. 用戶定義的函數
- 35.4. 查詢語言(SQL)函數
- 35.5. 函數重載
- 35.6. 函數易失性范疇
- 35.7. 過程語言函數
- 35.8. 內部函數
- 35.9. C-語言函數
- 35.10. 用戶定義聚集
- 35.11. 用戶定義類型
- 35.12. 用戶定義操作符
- 35.13. 操作符優化信息
- 35.14. 擴展索引接口
- 35.15. 包裝相關對象到一個擴展
- 35.16. 擴展基礎設施建設
- Chapter 36. 觸發器
- 36.1. 觸發器行為概述
- 36.2. 數據改變的可視性
- 36.3. 用C寫觸發器
- 36.4. 一個完整的觸發器例子
- Chapter 37. 事件觸發器
- 37.1. 事件觸發器行為的概述
- 37.2. 事件觸發器觸發矩陣
- 37.3. 用C編寫事件觸發器函數
- 37.4. 一個完整的事件觸發器的例子
- Chapter 38. 規則系統
- 38.1. 查詢樹
- 38.2. 視圖和規則系統
- 38.3. 物化視圖
- 38.4. 在 INSERT, UPDATE, 和 DELETE上的規則
- 38.5. 規則和權限
- 38.6. 規則和命令狀態
- 38.7. 規則與觸發器的比較
- Chapter 39. 過程語言
- 39.1. 安裝過程語言
- Chapter 40. PL/pgSQL - SQL過程語言
- 40.1. 概述
- 40.2. PL/pgSQL的結構
- 40.3. 聲明
- 40.4. 表達式
- 40.5. 基本語句
- 40.6. 控制結構
- 40.7. 游標
- 40.8. 錯誤和消息
- 40.9. 觸發器過程
- 40.10. 在后臺下的PL/pgSQL
- 40.11. 開發PL/pgSQL的一些提示
- 40.12. 從Oracle PL/SQL進行移植
- Chapter 41. PL/Tcl - Tcl 過程語言
- 41.1. 概述
- 41.2. PL/Tcl 函數和參數
- 41.3. PL/Tcl里的數據值
- 41.4. PL/Tcl里的全局量
- 41.5. 在PL/Tcl里訪問數據庫
- 41.6. PL/Tcl里的觸發器過程
- 41.7. 模塊和unknown的命令
- 41.8. Tcl 過程名字
- Chapter 42. PL/Perl - Perl 過程語言
- 42.1. PL/Perl 函數和參數
- 42.2. PL/Perl里的數據值
- 42.3. 內置函數
- 42.4. PL/Perl里的全局變量
- 42.5. 可信的和不可信的 PL/Perl
- 42.6. PL/Perl 觸發器
- 42.7. 后臺PL/Perl
- Chapter 43. PL/Python - Python 過程語言
- 43.1. Python 2 vs. Python 3
- 43.2. PL/Python Functions
- 43.3. Data Values
- 43.4. Sharing Data
- 43.5. Anonymous Code Blocks
- 43.6. Trigger Functions
- 43.7. Database Access
- 43.8. Explicit Subtransactions
- 43.9. Utility Functions
- 43.10. Environment Variables
- Chapter 44. 服務器編程接口
- 44.1. 接口函數
- SPI_connect
- SPI_finish
- SPI_push
- SPI_pop
- SPI_execute
- SPI_exec
- SPI_execute_with_args
- SPI_prepare
- SPI_prepare_cursor
- SPI_prepare_params
- SPI_getargcount
- SPI_getargtypeid
- SPI_is_cursor_plan
- SPI_execute_plan
- SPI_execute_plan_with_paramlist
- SPI_execp
- SPI_cursor_open
- SPI_cursor_open_with_args
- SPI_cursor_open_with_paramlist
- SPI_cursor_find
- SPI_cursor_fetch
- SPI_cursor_move
- SPI_scroll_cursor_fetch
- SPI_scroll_cursor_move
- SPI_cursor_close
- SPI_keepplan
- SPI_saveplan
- 44.2. 接口支持函數
- SPI_fname
- SPI_fnumber
- SPI_getvalue
- SPI_getbinval
- SPI_gettype
- SPI_gettypeid
- SPI_getrelname
- SPI_getnspname
- 44.3. 內存管理
- SPI_palloc
- SPI_repalloc
- SPI_pfree
- SPI_copytuple
- SPI_returntuple
- SPI_modifytuple
- SPI_freetuple
- SPI_freetuptable
- SPI_freeplan
- 44.4. 數據改變的可視性
- 44.5. 例子
- Chapter 45. 后臺工作進程
- VI. 參考手冊
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER COLLATION
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DEFAULT PRIVILEGES
- ALTER DOMAIN
- ALTER EXTENSION
- ALTER EVENT TRIGGER
- ALTER FOREIGN DATA WRAPPER
- ALTER FOREIGN TABLE
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER LARGE OBJECT
- ALTER MATERIALIZED VIEW
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER OPERATOR FAMILY
- ALTER ROLE
- ALTER RULE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER SERVER
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TEXT SEARCH CONFIGURATION
- ALTER TEXT SEARCH DICTIONARY
- ALTER TEXT SEARCH PARSER
- ALTER TEXT SEARCH TEMPLATE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ALTER USER MAPPING
- ALTER VIEW
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT
- COMMIT PREPARED
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE COLLATION
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE EXTENSION
- CREATE EVENT TRIGGER
- CREATE FOREIGN DATA WRAPPER
- CREATE FOREIGN TABLE
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE MATERIALIZED VIEW
- CREATE OPERATOR
- CREATE OPERATOR CLASS
- CREATE OPERATOR FAMILY
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE SERVER
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TEXT SEARCH CONFIGURATION
- CREATE TEXT SEARCH DICTIONARY
- CREATE TEXT SEARCH PARSER
- CREATE TEXT SEARCH TEMPLATE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE USER MAPPING
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DISCARD
- DO
- DROP AGGREGATE
- DROP CAST
- DROP COLLATION
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP EXTENSION
- DROP EVENT TRIGGER
- DROP FOREIGN DATA WRAPPER
- DROP FOREIGN TABLE
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP MATERIALIZED VIEW
- DROP OPERATOR
- DROP OPERATOR CLASS
- DROP OPERATOR FAMILY
- DROP OWNED
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP SERVER
- DROP TABLE
- DROP TABLESPACE
- DROP TEXT SEARCH CONFIGURATION
- DROP TEXT SEARCH DICTIONARY
- DROP TEXT SEARCH PARSER
- DROP TEXT SEARCH TEMPLATE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP USER MAPPING
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE
- PREPARE TRANSACTION
- REASSIGN OWNED
- REFRESH MATERIALIZED VIEW
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- SAVEPOINT
- SECURITY LABEL
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- VALUES
- II. PostgreSQL 客戶端應用程序
- clusterdb
- createdb
- createlang
- createuser
- dropdb
- droplang
- dropuser
- ecpg
- pg_basebackup
- pg_config
- pg_dump
- pg_dumpall
- pg_isready
- pg_receivexlog
- pg_restore
- psql
- reindexdb
- vacuumdb
- III. PostgreSQL 服務器應用程序
- initdb
- pg_controldata
- pg_ctl
- pg_resetxlog
- postgres
- postmaster
- VII. 內部
- Chapter 46. PostgreSQL內部概述
- 46.1. 查詢經過的路徑
- 46.2. 連接是如何建立起來的
- 46.3. 分析器階段
- 46.4. PostgreSQL規則系統
- 46.5. 規劃器/優化器
- 46.6. 執行器
- Chapter 47. 系統表
- 47.1. 概述
- 47.2. pg_aggregate
- 47.3. pg_am
- 47.4. pg_amop
- 47.5. pg_amproc
- 47.6. pg_attrdef
- 47.7. pg_attribute
- 47.8. pg_authid
- 47.9. pg_auth_members
- 47.10. pg_cast
- 47.11. pg_class
- 47.12. pg_event_trigger
- 47.13. pg_constraint
- 47.14. pg_collation
- 47.15. pg_conversion
- 47.16. pg_database
- 47.17. pg_db_role_setting
- 47.18. pg_default_acl
- 47.19. pg_depend
- 47.20. pg_description
- 47.21. pg_enum
- 47.22. pg_extension
- 47.23. pg_foreign_data_wrapper
- 47.24. pg_foreign_server
- 47.25. pg_foreign_table
- 47.26. pg_index
- 47.27. pg_inherits
- 47.28. pg_language
- 47.29. pg_largeobject
- 47.30. pg_largeobject_metadata
- 47.31. pg_namespace
- 47.32. pg_opclass
- 47.33. pg_operator
- 47.34. pg_opfamily
- 47.35. pg_pltemplate
- 47.36. pg_proc
- 47.37. pg_range
- 47.38. pg_rewrite
- 47.39. pg_seclabel
- 47.40. pg_shdepend
- 47.41. pg_shdescription
- 47.42. pg_shseclabel
- 47.43. pg_statistic
- 47.44. pg_tablespace
- 47.45. pg_trigger
- 47.46. pg_ts_config
- 47.47. pg_ts_config_map
- 47.48. pg_ts_dict
- 47.49. pg_ts_parser
- 47.50. pg_ts_template
- 47.51. pg_type
- 47.52. pg_user_mapping
- 47.53. 系統視圖
- 47.54. pg_available_extensions
- 47.55. pg_available_extension_versions
- 47.56. pg_cursors
- 47.57. pg_group
- 47.58. pg_indexes
- 47.59. pg_locks
- 47.60. pg_matviews
- 47.61. pg_prepared_statements
- 47.62. pg_prepared_xacts
- 47.63. pg_roles
- 47.64. pg_rules
- 47.65. pg_seclabels
- 47.66. pg_settings
- 47.67. pg_shadow
- 47.68. pg_stats
- 47.69. pg_tables
- 47.70. pg_timezone_abbrevs
- 47.71. pg_timezone_names
- 47.72. pg_user
- 47.73. pg_user_mappings
- 47.74. pg_views
- Chapter 48. 前/后端協議
- 48.1. 概要
- 48.2. 消息流
- 48.3. 流復制協議
- 48.4. 消息數據類型
- 48.5. 消息格式
- 48.6. 錯誤和通知消息字段
- 48.7. 自協議 2.0 以來的變化的概述
- Chapter 49. PostgreSQL 編碼約定
- 49.1. 格式
- 49.2. 報告服務器里的錯誤
- 49.3. 錯誤消息風格指導
- Chapter 50. 本地語言支持
- 50.1. 寄語翻譯家
- 50.2. 寄語程序員
- Chapter 51. 書寫一個過程語言處理器
- Chapter 52. 寫一個外數據包
- 52.1. 外數據封裝函數
- 52.2. 外數據封裝回調程序
- 52.3. 外數據封裝輔助函數
- 52.4. 外數據封裝查詢規劃
- Chapter 53. 基因查詢優化器
- 53.1. 作為復雜優化問題的查詢處理
- 53.2. 基因算法
- 53.3. PostgreSQL 里的基因查詢優化(GEQO)
- 53.4. 進一步閱讀
- Chapter 54. 索引訪問方法接口定義
- 54.1. 索引的系統表記錄
- 54.2. 索引訪問方法函數
- 54.3. 索引掃描
- 54.4. 索引鎖的考量
- 54.5. 索引唯一性檢查
- 54.6. 索引開銷估計函數
- Chapter 55. GiST索引
- 55.1. 介紹
- 55.2. 擴展性
- 55.3. 實現
- 55.4. 例
- Chapter 56. SP-GiST索引
- 56.1. 介紹
- 56.2. 擴展性
- 56.3. 實現
- 56.4. 例
- Chapter 57. GIN索引
- 57.1. 介紹
- 57.2. 擴展性
- 57.3. 實現
- 57.4. GIN提示與技巧
- 57.5. 限制
- 57.6. 例子
- Chapter 58. 數據庫物理存儲
- 58.1. 數據庫文件布局
- 58.2. TOAST
- 58.3. 自由空間映射
- 58.4. 可見映射
- 58.5. 初始化分支
- 58.6. 數據庫分頁文件
- Chapter 59. BKI后端接口
- 59.1. BKI 文件格式
- 59.2. BKI 命令
- 59.3. 系統初始化的BKI文件的結構
- 59.4. 例子
- Chapter 60. 規劃器如何使用統計信息
- 60.1. 行預期的例子
- VIII. 附錄
- Appendix A. PostgreSQL 錯誤代碼
- Appendix B. 日期/時間支持
- B.1. 日期/時間輸入解析
- B.2. 日期/時間關鍵字
- B.3. 日期/時間配置文件
- B.4. 單位歷史
- Appendix C. SQL關鍵字
- Appendix D. SQL兼容性
- D.1. 支持的特性
- D.2. 不支持的特性
- Appendix E. 版本說明
- E.1. 版本 9.3.1
- E.2. 版本 9.3
- E.3. 版本9.2.5
- E.4. 版本9.2.4
- E.5. 版本9.2.3
- E.6. 版本9.2.2
- E.7. 版本9.2.1
- E.8. 版本9.2
- E.9. 發布9.1.10
- E.10. 發布9.1.9
- E.11. 發布9.1.8
- E.12. 發布9.1.7
- E.13. 發布9.1.6
- E.14. 發布9.1.5
- E.15. 發布9.1.4
- E.16. 發布9.1.3
- E.17. 發布9.1.2
- E.18. 發布9.1.1
- E.19. 發布9.1
- E.20. 版本 9.0.14
- E.21. 版本 9.0.13
- E.22. 版本 9.0.12
- E.23. 版本 9.0.11
- E.24. 版本 9.0.10
- E.25. 版本 9.0.9
- E.26. 版本 9.0.8
- E.27. 版本 9.0.7
- E.28. 版本 9.0.6
- E.29. 版本 9.0.5
- E.30. 版本 9.0.4
- E.31. 版本 9.0.3
- E.32. 版本 9.0.2
- E.33. 版本 9.0.1
- E.34. 版本 9.0
- E.35. 發布8.4.18
- E.36. 發布8.4.17
- E.37. 發布8.4.16
- E.38. 發布8.4.15
- E.39. 發布8.4.14
- E.40. 發布8.4.13
- E.41. 發布8.4.12
- E.42. 發布8.4.11
- E.43. 發布8.4.10
- E.44. 發布8.4.9
- E.45. 發布8.4.8
- E.46. 發布8.4.7
- E.47. 發布8.4.6
- E.48. 發布8.4.5
- E.49. 發布8.4.4
- E.50. 發布8.4.3
- E.51. 發布8.4.2
- E.52. 發布8.4.1
- E.53. 發布8.4
- E.54. 發布8.3.23
- E.55. 發布8.3.22
- E.56. 發布8.3.21
- E.57. 發布8.3.20
- E.58. 發布8.3.19
- E.59. 發布8.3.18
- E.60. 發布8.3.17
- E.61. 發布8.3.16
- E.62. 發布8.3.15
- E.63. 發布8.3.14
- E.64. 發布8.3.13
- E.65. 發布8.3.12
- E.66. 發布8.3.11
- E.67. 發布8.3.10
- E.68. 發布8.3.9
- E.69. 發布8.3.8
- E.70. 發布8.3.7
- E.71. 發布8.3.6
- E.72. 發布8.3.5
- E.73. 發布8.3.4
- E.74. 發布8.3.3
- E.75. 發布8.3.2
- E.76. 發布8.3.1
- E.77. 發布8.3
- E.78. 版本 8.2.23
- E.79. 版本 8.2.22
- E.80. 版本 8.2.21
- E.81. 版本 8.2.20
- E.82. 版本 8.2.19
- E.83. 版本 8.2.18
- E.84. 版本 8.2.17
- E.85. 版本 8.2.16
- E.86. 版本 8.2.15
- E.87. 版本 8.2.14
- E.88. 版本 8.2.13
- E.89. 版本 8.2.12
- E.90. 版本 8.2.11
- E.91. 版本 8.2.10
- E.92. 版本 8.2.9
- E.93. 版本 8.2.8
- E.94. 版本 8.2.7
- E.95. 版本 8.2.6
- E.96. 版本 8.2.5
- E.97. 版本 8.2.4
- E.98. 版本 8.2.3
- E.99. 版本 8.2.2
- E.100. 版本 8.2.1
- E.101. 版本 8.2
- E.102. 版本 8.1.23
- E.103. 版本 8.1.22
- E.104. 版本 8.1.21
- E.105. 版本 8.1.20
- E.106. 版本 8.1.19
- E.107. 版本 8.1.18
- E.108. 版本 8.1.17
- E.109. 版本 8.1.16
- E.110. 版本 8.1.5
- E.111. 版本 8.1.14
- E.112. 版本 8.1.13
- E.113. 版本 8.1.12
- E.114. 版本 8.1.11
- E.115. 版本 8.1.10
- E.116. 版本 8.1.9
- E.117. 版本 8.1.8
- E.118. 版本 8.1.7
- E.119. 版本 8.1.6
- E.120. 版本 8.1.5
- E.121. 版本 8.1.4
- E.122. 版本 8.1.3
- E.123. 版本 8.1.2
- E.124. 版本 8.1.1
- E.125. 版本 8.1
- E.126. 版本 8.0.26
- E.127. 版本 8.0.25
- E.128. 版本 8.0.24
- E.129. 版本 8.0.23
- E.130. 版本 8.0.22
- E.131. 版本 8.0.21
- E.132. 版本 8.0.20
- E.133. 版本 8.0.19
- E.134. 版本 8.0.18
- E.135. 版本 8.0.17
- E.136. 版本 8.0.16
- E.137. 版本 8.0.15
- E.138. 版本 8.0.14
- E.139. 版本 8.0.13
- E.140. 版本 8.0.12
- E.141. 版本 8.0.11
- E.142. 版本 8.0.10
- E.143. 版本 8.0.9
- E.144. 版本 8.0.8
- E.145. 版本 8.0.7
- E.146. 版本 8.0.6
- E.147. 版本 8.0.5
- E.148. 版本 8.0.4
- E.149. 版本 8.0.3
- E.150. 版本 8.0.2
- E.151. 版本 8.0.1
- E.152. 版本 8.0.0
- E.153. 版本 7.4.30
- E.154. 版本 7.4.29
- E.155. 版本 7.4.28
- E.156. 版本 7.4.27
- E.157. 版本 7.4.26
- E.158. 版本 7.4.25
- E.159. 版本 7.4.24
- E.160. 版本 7.4.23
- E.161. 版本 7.4.22
- E.162. 版本 7.4.21
- E.163. 版本 7.4.20
- E.164. 版本 7.4.19
- E.165. 版本 7.4.18
- E.166. 版本 7.4.17
- E.167. 版本 7.4.16
- E.168. 版本 7.4.15
- E.169. 版本 7.4.14
- E.170. 版本 7.4.13
- E.171. 版本 7.4.12
- E.172. 版本 7.4.11
- E.173. 版本 7.4.10
- E.174. 版本 7.4.9
- E.175. 版本 7.4.8
- E.176. 版本 7.4.7
- E.177. 版本 7.4.6
- E.178. 版本 7.4.3
- E.179. 版本 7.4.4
- E.180. 版本 7.4.3
- E.181. 版本 7.4.2
- E.182. 版本 7.4.1
- E.183. 版本 7.4
- E.184. 版本 7.3.21
- E.185. 版本 7.3.20
- E.186. 版本 7.3.19
- E.187. 版本 7.3.18
- E.188. 版本 7.3.17
- E.189. 版本 7.3.16
- E.190. 版本 7.3.15
- E.191. 版本 7.3.14
- E.192. 版本 7.3.13
- E.193. 版本 7.3.12
- E.194. 版本 7.3.11
- E.195. 版本 7.3.10
- E.196. 版本 7.3.9
- E.197. 版本 7.3.8
- E.198. 版本 7.3.7
- E.199. 版本 7.3.6
- E.200. 版本 7.3.5
- E.201. 版本 7.3.4
- E.202. 版本 7.3.3
- E.203. 版本 7.3.2
- E.204. 版本 7.3.1
- E.205. 版本 7.3
- E.206. 版本 7.2.8
- E.207. 版本 7.2.7
- E.208. 版本 7.2.6
- E.209. 版本 7.2.5
- E.210. 版本 7.2.4
- E.211. 版本 7.2.3
- E.212. 版本 7.2.2
- E.213. 版本 7.2.1
- E.214. 版本 7.2
- E.215. 版本 7.1.3
- E.216. 版本 7.1.2
- E.217. 版本 7.1.1
- E.218. 版本 7.1
- E.219. 版本 7.0.3
- E.220. 版本 7.0.2
- E.221. 版本 7.0.1
- E.222. 版本 7.0
- E.223. 版本 6.5.3
- E.224. 版本 6.5.2
- E.225. 版本 6.5.1
- E.226. 版本 6.5
- E.227. 版本 6.4.2
- E.228. 版本 6.4.1
- E.229. 版本 6.4
- E.230. 版本 6.3.2
- E.231. 版本 6.3.1
- E.232. 版本 6.3
- E.233. 版本 6.2.1
- E.234. 版本 6.2
- E.235. 版本 6.1.1
- E.236. 版本 6.1
- E.237. 版本 6.0
- E.238. 版本 1.09
- E.239. 版本 1.02
- E.240. 版本 1.01
- E.241. 版本 1.0
- E.242. Postgres95 版本 0.03
- E.243. Postgres95 版本 0.02
- E.244. Postgres95 版本 0.01
- Appendix F. 額外提供的模塊
- F.1. adminpack
- F.2. auth_delay
- F.3. auto_explain
- F.4. btree_gin
- F.5. btree_gist
- F.6. chkpass
- F.7. citext
- F.8. cube
- F.9. dblink
- dblink_connect
- dblink_connect_u
- dblink_disconnect
- dblink
- dblink_exec
- dblink_open
- dblink_fetch
- dblink_close
- dblink_get_connections
- dblink_error_message
- dblink_send_query
- dblink_is_busy
- dblink_get_notify
- dblink_get_result
- dblink_cancel_query
- dblink_get_pkey
- dblink_build_sql_insert
- dblink_build_sql_delete
- dblink_build_sql_update
- F.10. dict_int
- F.11. dict_xsyn
- F.12. dummy_seclabel
- F.13. earthdistance
- F.14. file_fdw
- F.15. fuzzystrmatch
- F.16. hstore
- F.17. intagg
- F.18. intarray
- F.19. isn
- F.20. lo
- F.21. ltree
- F.22. pageinspect
- F.23. passwordcheck
- F.24. pg_buffercache
- F.25. pgcrypto
- F.26. pg_freespacemap
- F.27. pgrowlocks
- F.28. pg_stat_statements
- F.29. pgstattuple
- F.30. pg_trgm
- F.31. postgres_fdw
- F.32. seg
- F.33. sepgsql
- F.34. spi
- F.35. sslinfo
- F.36. tablefunc
- F.37. tcn
- F.38. test_parser
- F.39. tsearch2
- F.40. unaccent
- F.41. uuid-ossp
- F.42. xml2
- Appendix G. 額外提供的程序
- G.1. 客戶端應用程序
- oid2name
- pgbench
- vacuumlo
- G.2. 服務器端應用程序
- pg_archivecleanup
- pg_standby
- pg_test_fsync
- pg_test_timing
- pg_upgrade
- pg_xlogdump
- Appendix H. 外部項目
- H.1. 客戶端接口
- H.2. 管理工具
- H.3. 過程語言
- H.4. 擴展
- Appendix I. 源代碼庫
- I.1. 獲得源代碼通過Git
- Appendix J. 文檔
- J.1. DocBook
- J.2. 工具集
- J.3. 制作文檔
- J.4. 文檔寫作
- J.5. 風格指導
- Appendix K. 首字母縮略詞
- 參考書目
- Index