# E.125\. 版本 8.1
> **發布日期:** 2005-11-08
## E.125.1\. 概要
這個版本中的主要修改:
改善到共享緩沖區緩存的并發訪問 (Tom)
訪問共享緩沖區緩存被認定為是一個重要的可擴展性問題,尤其是在多個CPU的系統上。 在這個版本中,鎖定的方式是以緩沖區管理器已經被檢查以減少鎖征用和提高可擴展性來完成的。 緩沖區管理器也已經被修改為使用一個"時鐘掃描"替換機制。
允許索引掃描使用一個中間內存位圖 (Tom)
在以前的版本中,只有單個索引可以用來在表上查找。有了這個特性,如果一個查詢有 `WHERE tab.col1 = 4 and tab.col2 = 9`,并且在`col1` 和`col2`上沒有多字段索引,但是在`col1`上有一個索引, 并且在`col2`上有另一個索引,那么有可能搜索兩個索引并在內存中組合結果, 然后為同時匹配`col1`和`col2`限制條件的行執行堆棧獲取。 這在有許多非結構化的查詢,可能創建匹配所有訪問條件的索引的環境中是非常有用的。 即使是單個索引,位圖掃描也是有用的,因為他們減少了所需要的隨機訪問的數量; 位圖索引掃描對于檢索完整表的相當大的分數是高效的,而普通索引掃描則不行。
添加了兩階段提交 (Heikki Linnakangas, Alvaro, Tom)
兩階段提交允許事務在幾個計算機上"準備",并且一旦所有計算機都成功的準備了它們的事務 (沒有失敗),那么所有事務都可以提交。即使一個機器在準備之后崩潰了, 準備的事務也可以在該機器重啟之后提交。新的語法包括`PREPARE TRANSACTION` 和`COMMIT/ROLLBACK PREPARED`。還添加了一個新的系統視圖 `pg_prepared_xacts`。
創建一個新的替換用戶和組的角色系統
角色是用戶和組的一個組合。像用戶,它們可以有登陸功能,像組, 一個角色可以擁有其他角色作為成員。角色基本上刪除了用戶和組之間的不同。 例如,一個角色可以:
* 有登陸功能 (可選)
* 擁有對象
* 持有數據庫對象的訪問權限
* 從它作為成員的其他角色上繼承權限
一旦用戶登陸到一個角色,她獲得了登陸角色加上任何繼承的角色的能力, 并且可以使用`SET ROLE`來切換到其他角色(她在其中是一個成員)。 這個特性是SQL標準角色的概念的一個概括。這個修改還用新的角色能力目錄 `pg_authid`和`pg_auth_members`替換了 `pg_shadow`和`pg_group`。 老的表被重新定義為新角色表上的只讀視圖。
為`MIN()`和`MAX()`自動使用索引 (Tom)
在以前的版本中,為`MIN()`或`MAX()` 使用索引的唯一方式是重寫查詢`SELECT col FROM tab ORDER BY col LIMIT 1`。 索引使用現在是自動發生的。
移動`/contrib/pg_autovacuum`到主服務器 (Alvaro)
整合自動清理到服務器,允許它在數據庫服務器的同步中自動啟動和停止, 并允許自動清理在`postgresql.conf`中配置。
使用`SELECT ... FOR SHARE`添加共享的行級別鎖 (Alvaro)
然而PostgreSQL的MVCC鎖允許`SELECT` 永不被寫入鎖定,并且因此不需要為典型的操作共享行鎖, 共享的鎖對于請求共享的行鎖的應用是有用的。 特別是它減少了由于參照完整性檢查增加的鎖請求。
在共享的對象上添加依賴性,尤其是角色 (Alvaro)
依賴性機制的擴展阻止了角色仍然擁有數據庫對象時被刪除。 以前有可能意外的"孤兒"對象被刪除它們的所有者。 雖然這可以被恢復,但是它是雜亂的并且會使人不愉快。
為分區表提升性能 (Simon)
新的`constraint_exclusion` 配置參數避免了在約束表示沒有匹配行存在的子表上查找。
這允許表分區的基本類型。如果子表存儲獨立的鍵范圍,并且強制使用適當的`CHECK` 約束,那么優化器將在約束保證在子表中沒有匹配的行存在時跳過子表訪問。
## E.125.2\. 遷移到版本 8.1
對于那些想要從任何以前的版本中遷移數據的用戶來說, 使用pg_dump的一個轉儲/恢復是必需的。
8.0版本宣布間隔的`to_char()`函數將在8.1中刪除。不過, 因為沒有更好的API被推薦,`to_char(interval)`已經在8.1中被加強, 并且將保留在服務器中。
觀察下列的不兼容性:
* `add_missing_from`現在缺省是假 (Neil)
缺省的,如果表用在一個沒有`FROM`引用的查詢中,我們現在產生一個錯誤。 老的行為仍然可用,但是參數必須設置為'true'。
為了加載一個現有的轉儲文件,如果轉儲包含任何使用隱式`FROM` 語法創建的視圖或規則,那么將`add_missing_from`設置為true是必須的。 這應該是一個一次性的煩惱,因為PostgreSQL 8.1 將轉換這樣的視圖和規則到標準的顯式`FROM`語法。 隨后的轉儲將因此不會有這個問題。
* 讓`float4`/`float8`/`oid` 零長度字符串(`''`)的輸入拋出一個錯誤, 而不是將它看做零 (Neil)
這個修改與當前整數的零長度字符串的處理是一致的。 這個修改計劃在8.0中宣布。
* `default_with_oids`現在缺省為假 (Neil)
這個選項設置為假,用戶創建的表不再有一個OID字段,除非在`CREATE TABLE` 中指定了`WITH OIDS`。盡管OID已經存在于PostgreSQL 的所有版本中,但是因為它們只有四字節長度并且計數器是基于所有安裝的數據庫共享的, 所以它們的使用是受限制的。唯一標識行的首選方式是通過序列和`SERIAL`類型, 這個自從PostgreSQL 6.4開始就已經支持了。
* 添加`E''`語法,這樣最后普通字符串可以正確的對待反斜杠 (Bruce)
目前PostgreSQL作為引入一個特殊的逃逸序列來處理字符串文本中的反斜杠, 比如`\n`或`\010`。雖然這允許特殊值的簡單入口, 但是它是不標準的并且使得從其他數據庫中移植應用更加困難。因為這個原因, PostgreSQL工程計劃刪除反斜杠在字符串中的特殊含義。 為了向后兼容和想要特殊處理反斜杠的用戶,創建了一個新的字符串語法。 這個新的字符串語法的格式是在開始字符串的單引號之前寫一個`E`, 例如`E'hi\n'`。雖然這個版本沒有改變反斜杠在字符串中的處理, 但是它確實添加了新的配置參數來幫助用戶遷移應用到未來的版本:
* `standard_conforming_strings` —這個版本正確的對待反斜杠為普通字符串?
* `escape_string_warning` —在普通的字符串(非E)中警告反斜杠
`standard_conforming_strings`值是只讀的。應用可以檢索該值來知道反斜杠是如何處理的。 (參數的存在也可以作為一個支持`E''`字符串語法的指示。)在未來的版本中, `standard_conforming_strings`將為真,意味著反斜杠在非E字符串中將按照字面值對待。 為了準備這個修改,在需要特殊處理反斜杠的地方使用`E''`字符串, 并且打開`escape_string_warning`來找到需要使用`E''` 轉換的額外的字符串。另外,使用兩個單引號(`''`)在一個字符串中嵌入一個字面的單引號, 而不是PostgreSQL支持的反斜杠單引號(`\'`)語法。 前者是符合標準的,并且不需要使用`E''`字符串語法。你也可以使用`$$` 字符串語法,它不特殊對待反斜杠。
* 讓`REINDEX DATABASE`重新索引數據庫中的所有索引 (Tom)
以前,`REINDEX DATABASE`只重建系統表的索引。 這個新的行為看起來更加直觀。一個新的命令`REINDEX SYSTEM` 提供只重建系統表的老的功能。
* 只讀大對象描述符現在服從MVCC快照語義
當一個大對象是用`INV_READ`(不是`INV_WRITE`)打開的時, 來自描述符的數據讀取現在將反應調用`lo_open()` 的查詢使用了事務快照時大對象的狀態的"快照"。 要獲取總是返回最后提交的數據的老的行為,在`lo_open()` 的模式標志中包含`INV_WRITE`。
* 為序列函數的參數添加適當的依賴 (Tom)
在以前的版本中,傳遞到`nextval()`、`currval()` 和`setval()`的序列名是作為簡單文本字符串存儲的, 意味著重命名或刪除一個在`DEFAULT`子句中使用的序列會使子句無效。 這個版本將所有新建的序列函數參數作為內部OID存儲,允許它們追蹤序列重命名, 并且添加阻止不正確的序列刪除的依賴關系信息。這也使得`DEFAULT` 子句免疫模式重命名和搜索路徑改變。
一些應用可能依賴于運行時查找序列名的老的行為。這通過明確的轉換參數為 `text`仍然可以實現,例如`nextval('myseq'::text)`。
8.1之前的數據庫轉儲加載到8.1將使用老的基于文本的表示, 并且因此沒有OID存儲參數的特性。不過,更新包含基于文本的`DEFAULT` 子句的數據庫是可能的。首先,保存這個查詢到一個文件中,比如`fixseq.sql`:
```
SELECT 'ALTER TABLE ' ||
pg_catalog.quote_ident(n.nspname) || '.' ||
pg_catalog.quote_ident(c.relname) ||
' ALTER COLUMN ' || pg_catalog.quote_ident(a.attname) ||
' SET DEFAULT ' ||
regexp_replace(d.adsrc,
$$val\(\(('[^']*')::text\)::regclass$$,
$$val(\1$$,
'g') ||
';'
FROM pg_namespace n, pg_class c, pg_attribute a, pg_attrdef d
WHERE n.oid = c.relnamespace AND
c.oid = a.attrelid AND
a.attrelid = d.adrelid AND
a.attnum = d.adnum AND
d.adsrc ~ $$val\(\('[^']*'::text\)::regclass$$;
```
然后,在一個數據庫中運行該查詢,找到需要哪個調整,例如對于數據庫`db1`:
```
psql -t -f fixseq.sql db1
```
這將顯示`ALTER TABLE`命令需要轉換數據庫到新的基于OID的表示。 如果命令看起來合理,運行這個來更新該數據庫:
```
psql -t -f fixseq.sql db1 | psql -e db1
```
這個過程必須在每個要更新的數據庫中重復進行。
* 在psql中,將未加引號的`\{digit}+` 序列看做是八進制的 (Bruce)
在以前的版本中,`\{digit}+`序列被看做是小數點,并且只有`\0{digit}+` 被看做是八進制的。這個修改是為了一致性。
* 為前綴和后綴`%`和`^`操作符刪除語法生產
這些從未記錄和復雜的負數的模數操作符(`%`)的使用。
* 讓多邊形的`&<`和`&>` 與盒子的"over"操作符一致 (Tom)
* `CREATE LANGUAGE`可以忽略提供的參數,為了支持來自 `pg_pltemplate`的信息
定義了一個新的系統目錄`pg_pltemplate`, 攜帶關于過程語言首選定義的信息(比如它們是否有驗證器函數)。 當一個條目存在于創建語言的目錄中時,`CREATE LANGUAGE` 將忽略所有它的參數除了語言名并使用目錄信息。 采取這個措施是因為廢棄的語言定義被老的轉儲文件加載而增加問題。 截止到8.1,pg_dump將只是作為 `CREATE LANGUAGE` `_name_` 轉儲過程語言定義,依賴于加載時模板條目的存在。 我們期待這將成為一個更加不會過時的表示。
* 讓`pg_cancel_backend(int)`返回一個`boolean` 而不是一個`integer` (Neil)
* 一些用戶在加載UTF-8數據到8.1.X時遇到問題。這是因為以前的版本允許無效的UTF-8 字節序列輸入到數據庫中,而這個版本只接受有效的UTF-8序列。 糾正轉儲文件的一個方式是運行命令`iconv -c -f UTF-8 -t UTF-8 -o cleanfile.sql dumpfile.sql`。`-c`選項刪除無效的字符序列。 兩個文件的差異將顯示無效的序列。`iconv`讀取整個輸入文件到內存中, 這樣它可能為了處理需要使用split將轉儲分成多個較小的文件。
## E.125.3\. 額外的修改
下面你將發現PostgreSQL 8.1和以前的主版本間詳細的額外的修改。
### E.125.3.1\. 性能改善
* 提高GiST和R-tree索引性能(Neil)
* 改善優化器,包括自動調整哈希連接的大小 (Tom)
* 徹底檢查幾個方面的內部API
* 修改WAL記錄CRC從64位到32位 (Tom)
我們覺得計算64位CRC的額外開銷非常大,并且獲得的可靠性并不足以為它辯解。
* 阻止在WAL頁面中寫入大的空間隙 (Tom)
* 改善SMP機器上的自旋鎖行為,尤其是Opterons (Tom)
* 允許非連續的索引字段在多字段索引上使用 (Tom)
例如,這允許一個在字段a、b、c上的索引在一個帶有 `WHERE a = 4 and c = 10` 的查詢中使用。
* 為`CREATE TABLE AS` / `SELECT INTO` 跳過WAL日志 (Simon)
因為`CREATE TABLE AS`期間的崩潰會導致表在恢復期間被刪除, 沒有理由WAL記錄該表被加載了。(不過,如果啟用了WAL歸檔,記錄仍然會發生。)
* 允許并發的GiST索引訪問 (Teodor, Oleg)
* 添加配置參數`full_page_writes`控制寫入全部頁面到WAL (Bruce)
為了阻止部分磁盤寫入損壞數據庫,PostgreSQL 寫了每個數據庫磁盤頁面的完整拷貝來WAL它在一個檢查點之后被修改的第一個時間。 這個選項為了更快的速度關閉了該功能。這對于使用電池后備的磁盤緩存來說是安全的, 這種情況下部分頁面寫入不會發生。
* 當為`wal_sync_method`使用`O_SYNC`時, 如果可用則使用`O_DIRECT` (Itagaki Takahiro)
`O_DIRECT`導致磁盤寫入繞過內核緩存,對于WAL寫入來說,這提高了性能。
* 提高`COPY FROM`性能 (Alon Goldshuv)
這是通過在更大的語塊中讀取`COPY`輸入完成的,而不是挨個讀取字符。
* 提高了`COUNT()`、`SUM`、 `AVG()`、`STDDEV()`和 `VARIANCE()`的性能 (Neil, Tom)
### E.125.3.2\. 服務器的變化
* 阻止由于事務ID (XID)環繞式處理引起的問題 (Tom)
當事務計數器達到環繞的點時,服務器現在將發出警告。如果計數器即將達到環繞的點時, 服務器將停止接受查詢。這保證了數據在需要的清理執行之前不會丟失。
* 修復OID計數器已經環繞式處理之后,對象IDs (OIDs)與現有系統對象沖突的問題 (Tom)
* 添加`VACUUM`期間需要增加`max_fsm_relations`和 `max_fsm_pages`的警告 (Ron Mayer)
* 添加`temp_buffers`配置參數, 允許用戶為臨時表訪問確定本地緩存區域的大小 (Tom)
* 添加會話啟動時間和客戶端IP地址到`pg_stat_activity` (Magnus)
* 為位圖掃描調整`pg_stat`視圖 (Tom)
一些字段的含義發生了微妙的變化。
* 加強了`pg_locks`視圖 (Tom)
* 客戶端側`PREPARE`和`EXECUTE`的日志查詢 (Simon)
* 允許Kerberos名字和用戶名在`postgresql.conf`的規定中大小寫敏感 (Magnus)
* 添加配置參數`krb_server_hostname`, 這樣服務器主機名可以作為服務主體的一部分指定 (Todd Kover)
如果沒有設置,任何服務主體匹配keytab中的任意條目都有可能被使用。 這是這個版本中的新的Kerberos匹配行為。
* 為毫秒時間戳(`%m`)和遠程主機(`%h`)添加 `log_line_prefix`選項 (Ed L.)
* 為GiST索引添加WAL日志 (Teodor, Oleg)
GiST索引現在對于崩潰和時間點恢復來說是安全的。
* 當我們執行`pg_stop_backup()`時,刪除老的`*.backup`文件 (Bruce)
這阻止了大量的`*.backup`文件存在于`pg_xlog/`中。
* 添加配置參數為閑置、間隔和計數控制TCP/IP保持活動的時間 (Oliver Jowett)
這些值可以修改來允許對丟失的客戶端連接更快速的檢測。
* 添加每用戶和每數據庫連接限制 (Petr Jelinek)
使用`ALTER USER`和`ALTER DATABASE`, 現在可以強制限制作為一個特殊用戶或作為一個特殊數據庫并發連接的最大會話數量。 設置限制為0禁用用戶或數據庫連接。
* 在64位的機器上允許超過兩千兆字節的共享內存和每后端的工作內存 (Koichi Suzuki)
* 新增系統目錄`pg_pltemplate`,允許在轉儲文件中重寫廢棄的過程語言定義 (Tom)
### E.125.3.3\. 查詢修改
* 添加臨時視圖 (Koju Iijima, Neil)
* 修復`HAVING`沒有任何聚集函數或`GROUP BY`, 這樣查詢返回一個組 (Tom)
以前,這樣的情況會將`HAVING`子句看做和`WHERE`子句相同。 這是不規范的。
* 添加`USING`子句允許額外的表指定為`DELETE` (Euler Taveira de Oliveira, Neil)
在以前的版本中,沒有明確的方法指定用于`DELETE`語句中的連接的額外的表。 對于這個目的,`UPDATE`早已有了一個`FROM`子句。
* 在后端和ecpg字符串中添加對`\x`十六進制逃逸的支持 (Bruce)
這正像標準C `\x`逃逸語法。八進制逃逸早就支持了。
* 添加`BETWEEN SYMMETRIC`查詢語法 (Pavel Stehule)
這個特征允許`BETWEEN`比較不請求第一個值小于第二個值。 例如,`2 BETWEEN [ASYMMETRIC] 3 AND 1`返回假, 而`2 BETWEEN SYMMETRIC 3 AND 1`返回真。 `BETWEEN ASYMMETRIC`早就支持了。
* 添加`NOWAIT`選項到`SELECT ... FOR UPDATE/SHARE` (Hans-Juergen Schoenig)
當`statement_timeout`配置參數允許一個查詢接受超過一定數量的時間被取消, `NOWAIT`選項允許查詢在`SELECT ... FOR UPDATE/SHARE` 命令不能立即獲得一個行鎖時盡快被取消。
### E.125.3.4\. 對象操作的改變
* 追蹤共享對象的依賴性 (Alvaro)
PostgreSQL允許全局表(用戶、數據庫、表空間) 引用多個數據庫中的信息。這為全局表額外的添加了依賴關系信息,這樣,例如, 用戶所有權可以跨數據庫追蹤,一個在任意數據庫中擁有某些東西的用戶不再被刪除。 依賴關系追蹤早已為數據庫本地對象存在了。
* 允許受限制的`ALTER OWNER`命令被對象所有者執行 (Stephen Frost)
以前的版本只允許超級用戶修改對象所有者。現在,如果執行該命令的用戶擁有該對象, 并且可以作為新的所有者創建它,那么所有權就可以轉移(也就是說, 該用戶是新的擁有角色的一員,并且該角色擁有重新創建該對象所需要的CREATE權限)。
* 為某些對象類型(表、函數、類型)添加`ALTER`對象 `SET SCHEMA`能力 (Bernd Helmle)
這允許對象遷移到不同的模式中。
* 添加`ALTER TABLE ENABLE/DISABLE TRIGGER`禁用觸發器 (Satoshi Nagayasu)
### E.125.3.5\. 工具命令的變化
* 允許`TRUNCATE`在一個命令中截斷多個表 (Alvaro)
由于參照完整性檢查,不允許截斷是參照完整性約束的一部分的表。 使用這個新功能,`TRUNCATE`可以用來截斷這個樣的表, 如果兩個表都包含在一個參照完整性約束中,那么會在一個 `TRUNCATE`命令中都被截斷。
* 在`COPY CSV`模式中正確的處理回車和換行 (Andrew)
在版本8.0中,`CSV COPY TO`中的回車和換行是以一種不一致的方式處理的。 (這在TODO列表中記錄了。)
* 添加`COPY WITH CSV HEADER`,允許標題作為`COPY` 中的第一行 (Andrew)
這允許處理公共`CSV`在數據文件的第一行放置字段名的用法。 對于`COPY TO`,第一行包含該字段名,對于`COPY FROM`, 忽略第一行。
* 在Windows上,在`EXPLAIN ANALYZE`中顯示更好的次秒級精度 (Magnus)
* 添加觸發時間顯示到`EXPLAIN ANALYZE`
以前的版本包含觸發器的執行時間作為總的執行時間的一部分, 但是沒有單獨顯示它。現在有可能看到在每個觸發器中花費了多少時間。
* 在`COPY`中添加對`\x`十六進制逃逸的支持 (Sergey Ten)
以前的版本只支持八進制逃逸。
* 讓`SHOW ALL`包括變量描述 (Matthias Schmidt)
`SHOW`變量名仍然只顯示變量的值,不包括變量描述。
* 讓initdb創建一個新的稱為`postgres`的標準數據庫, 并轉變工具為標準查詢使用`postgres`而不是`template1` (Dave)
在以前的版本中,`template1`作為工具(像createuser) 的缺省連接使用,也作為新數據庫的模板。這導致`CREATE DATABASE` 有時會失敗,因為如果任何人連接了模板數據庫,那么新的數據庫就不能創建。 有了這個改變,缺省連接數據庫現在是`postgres`, 意味著在`CREATE DATABASE`期間,極少可能有人正在使用`template1`。
* 通過移動`/contrib/reindexdb`到服務器, 創建新的reindexdb命令行工具 (Euler Taveira de Oliveira)
### E.125.3.6\. 數據類型和函數的變化
* 為數組類型添加`MAX()`和`MIN()`聚集 (Koju Iijima)
* 修復`CC`和`YY`字段都被使用了時,`to_date()` 和`to_timestamp()`合理的行為 (Karel Zak)
如果格式聲明包含`CC`并且年的聲明是`YYY`或更長, 那么忽略`CC`。如果年的聲明是`YY`或更短, 那么解釋`CC`為上個世紀。
* 添加`md5(bytea)` (Abhijit Menon-Sen)
`md5(text)`早已存在了。
* 添加對基于`power(numeric, numeric)`的 `numeric ^ numeric`的支持
該函數早就存在了,但是沒有分配操作符給他。
* 通過正確的在計算時截斷商,修復`NUMERIC`的模數 (Bruce)
在以前的版本中,大值的模數有時會因為商的圓整返回負的結果。
* 添加了一個函數`lastval()` (Dennis Bj?rklund)
`lastval()`是`currval()`的一個簡化版本。 它根據當前會話執行的最后一個`nextval()`或`setval()` 調用,自動的確定正確的序列名。
* 添加了`to_timestamp(DOUBLE PRECISION)` (Michael Glaesemann)
轉換自1970年以來的Unix秒到一個`TIMESTAMP WITH TIMEZONE`。
* 添加了`pg_postmaster_start_time()`函數 (Euler Taveira de Oliveira, Matthias Schmidt)
* 允許在`AT TIME ZONE`中充分使用時區名字, 不只是以前可用的短列表 (Magnus)
以前,`AT TIME ZONE`只支持時區名的一個預定義的列表。 現在任何支持的時區名都可以使用,例如:
```
SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
```
在上面的查詢中,使用的時區基于實際上影響提供的日期的夏令時規則調整。
* 添加`GREATEST()`和`LEAST()` variadic函數 (Pavel Stehule)
這些函數接受可變數量的參數并返回這些參數的最大或最小值。
* 添加了`pg_column_size()` (Mark Kirkwood)
這返回一個字段的存儲尺寸,可能是被壓縮的。
* 添加了`regexp_replace()` (Atsushi Ogawa)
這允許正則表達式替換,像sed。一個可選的標識參數允許全局選擇(替換所有) 和大小寫敏感模式。
* 修復間隔除法和乘法 (Bruce)
以前的版本有時返回不正當的結果,像`'4 months'::interval / 5` 返回`'1 mon -6 days'`。
* 修復時間戳、時間和間隔輸出中的舍入行為 (Tom)
這修復了秒字段顯示為`60`而不是增長高階字段的一些情況。
* 添加一個單獨的天字段到類型`interval`, 這樣一天的間隔可以不同于24小時的間隔 (Michael Glaesemann)
包含夏令時調整的天不是24小時長,通常是23或25小時。這個修改創建了一個 "這么多天"的間隔和"這么多小時"的間隔之間概念上的不同。 添加`1 day`到一個時間戳現在給出和下一天相同的本地時間, 即使兩天之間有一個夏令時調整,而添加`24 hours` 將給出一個不同的本地時間。例如,在US DST規則下:
```
'2005-04-03 00:00:00-05' + '1 day' = '2005-04-04 00:00:00-04'
'2005-04-03 00:00:00-05' + '24 hours' = '2005-04-04 01:00:00-04'
```
* 添加了`justify_days()`和`justify_hours()` (Michael Glaesemann)
這些函數,分別的,調整天到一個合適數量的全月和日, 調整小時到一個合適數量的全天和小時。
* 移動`/contrib/dbsize`到后端,并重命名一些函數 (Dave Page, Andreas Pflug)
* `pg_tablespace_size()`
* `pg_database_size()`
* `pg_relation_size()`
* `pg_total_relation_size()`
* `pg_size_pretty()`
`pg_total_relation_size()`包括索引和TOAST表。
* 為訪問集群目錄的只讀文件添加函數 (Dave Page, Andreas Pflug)
* `pg_stat_file()`
* `pg_read_file()`
* `pg_ls_dir()`
* 添加`pg_reload_conf()`強制配置文件的重載 (Dave Page, Andreas Pflug)
* 添加`pg_rotate_logfile()`強制服務器日志文件的循環 (Dave Page, Andreas Pflug)
* 修改`pg_stat_*`視圖包含TOAST表 (Tom)
### E.125.3.7\. 編碼和環境的變化
* 重命名一些編碼使其更加一致和遵守國際標準 (Bruce)
* `UNICODE`現在是`UTF8`
* `ALT`現在是`WIN866`
* `WIN`現在是`WIN1251`
* `TCVN`現在是`WIN1258`
原先的名字仍然工作。
* 添加對`WIN1252`編碼的支持 (Roland Volkmann)
* 添加對四字節`UTF8`字符的支持 (John Hansen)
以前只支持一、二、三字節`UTF8`字符。這對于支持一些漢字字符設置尤其重要。
* 允許`EUC_JP`和`SJIS`之間的直接轉換,以提高性能 (Atsushi Ogawa)
* 允許UTF8編碼在Windows上工作 (Magnus)
這是通過映射UTF8到Windows本地的UTF16實現做到的。
### E.125.3.8\. 一般服務器端語言的變化
* 修復`ALTER LANGUAGE RENAME` (Sergey Yatskevich)
* 允許函數特征,像嚴格和活潑,通過`ALTER FUNCTION`來修改 (Neil)
* 增加函數參數的最大數量到100 (Tom)
* 允許SQL和PL/pgSQL函數使用`OUT`和`INOUT`參數 (Tom)
`OUT`是函數返回值的一個可替換的方式。取代使用`RETURN`, 可以通過分配參數聲明為`OUT`或`INOUT`來返回值。 這在一些情況下通常更簡單,尤其是需要返回多個值時。 從一個函數中返回多個值在以前的版本中是可能的,這大大的簡化了該過程。 (該特性在未來的版本中將擴展為其他服務器端語言。)
* 移動語言處理器函數到`pg_catalog`模式
如果要求,這使得它更容易刪除公共模式。
* 添加`SPI_getnspname()`到SPI (Neil)
### E.125.3.9\. PL/pgSQL服務器端語言的變化
* 徹底檢查PL/pgSQL函數的內存管理 (Neil)
每個函數的分析樹現在存儲在一個單獨的內存空間中。 當不再需要它時,這允許這個內存很容易的回收利用。
* 在`CREATE FUNCTION`時檢查函數語法,而不是在運行時 (Neil)
以前,大多數語法錯誤只在該函數被執行時報告。
* 允許`OPEN`打開非`SELECT`查詢,像`EXPLAIN` 和`SHOW` (Tom)
* 不再要求函數發出`RETURN`語句 (Tom)
這是新添加的`OUT`和`INOUT`功能的副產品。 當不需要提供函數的返回值時,可以省略`RETURN`。
* 添加對可選`INTO`子句到PL/pgSQL的`EXECUTE` 語句的支持 (Pavel Stehule, Neil)
* 讓`CREATE TABLE AS`設置`ROW_COUNT` (Tom)
* 定義`SQLSTATE`和`SQLERRM`返回當前異常的 `SQLSTATE`和錯誤消息 (Pavel Stehule, Neil)
這些變量只在異常塊中定義。
* 允許到`RAISE`語句的參數為表達式 (Pavel Stehule, Neil)
* 添加一個循環的`CONTINUE`語句 (Pavel Stehule, Neil)
* 允許塊和循環標簽 (Pavel Stehule)
### E.125.3.10\. PL/Perl服務器端語言的變化
* 允許大的結果集有效的返回 (Abhijit Menon-Sen)
這允許函數使用`return_next()`來避免在內存中建立整個結果集。
* 允許一次一行檢索查詢結果 (Abhijit Menon-Sen)
這允許函數使用`spi_query()`和`spi_fetchrow()` 避免在內存中累加整個結果集。
* 如果服務器編碼是`UTF8`,那么強制PL/Perl將字符串作為`UTF8`處理 (David Kamholz)
* 為PL/Perl添加一個驗證器函數 (Andrew)
這允許語法錯誤在定義時被報告,而不是在執行時報告。
* 當函數返回一個數組類型時,允許PL/Perl返回一個Perl數組 (Andrew)
這主要是映射PostgreSQL數組到Perl數組。
* 允許Perl非致命的警告產生`NOTICE`消息 (Andrew)
* 允許啟用Perl的`strict`模式 (Andrew)
### E.125.3.11\. psql的變化
* 添加`\set ON_ERROR_ROLLBACK`以允許事務中的語句發生錯誤而不影響剩余的事務 (Greg Sabino Mullane)
這基本上是通過包裹每個語句在一個子事務中實現的。
* 在psql變量中添加對`\x`十六進制字符串的支持 (Bruce)
八進制逃逸早就支持了。
* 添加對`troff -ms`輸出格式的支持 (Roger Leigh)
* 允許歷史文件位置通過`HISTFILE`控制 (Andreas Seltenreich)
這允許存儲每個數據庫歷史的配置。
* 阻止`\x`(擴展模式)影響`\d tablename`的輸出 (Neil)
* 添加`-L`選項到psql以記錄會話 (Lorne Sunley)
添加這個選項是因為一些操作系統沒有簡單的命令行活動記錄功能。
* 讓`\d`顯示索引的表空間 (Qingqing Zhou)
* 允許psql幫助(`\h`) 基于正確的幫助信息做一個更好的猜測 (Greg Sabino Mullane)
這允許用戶僅僅添加`\h`到語法錯誤查詢的前面,獲得支持的語法的幫助。 以前任何超出命令名的額外的查詢文本都必須使用`\h`刪除。
* 添加`\pset numericlocale`以允許數字在識別環境的格式中輸出 (Eugen Nedelcu)
例如,使用`C`環境`100000`將被輸出為`100,000.0`, 而歐洲環境可能輸出這個值為`100.000,0`。
* 當服務器版本號和psql的版本號不同時,讓啟動標語顯示兩者 (Bruce)
還有,如果服務器和psql來自不同的主版本,那么將會顯示一個警告。
### E.125.3.12\. pg_dump的變化
* 添加`-n` / `--schema`開關到pg_restore (Richard van den Berg)
這允許只恢復指定模式中的對象。
* 允許pg_dump轉儲大對象,即使是在文本模式中 (Tom)
有了這個變化,大對象現在總是被轉儲了;前者`-b`開關是一個空操作。
* 允許pg_dump轉儲大對象的一個一致的快照 (Tom)
* 為大對象轉儲的評論 (Tom)
* 添加`--encoding`到pg_dump (Magnus Hagander)
這允許數據庫以一個不同于服務器編碼的編碼轉儲。 這在傳遞轉儲到一個有不同編碼的機器時是有價值的。
* 依賴`pg_pltemplate`過程語言 (Tom)
如果過程語言的調用處理器在`pg_catalog`模式中,那么pg_dump 不轉儲該處理器。相反的,它使用 `CREATE LANGUAGE` `_name_` 轉儲該語言,依賴于`pg_pltemplate`目錄提供語言的創建參數和加載時間。
### E.125.3.13\. libpq的變化
* 添加一個`PGPASSFILE`環境變量指定口令文件的文件名 (Andrew)
* 添加`lo_create()`,類似于`lo_creat()`, 但是允許指定大對象的OID (Tom)
* 讓libpq在`malloc()`失敗時, 一致的返回一個錯誤到客戶端應用 (Neil)
### E.125.3.14\. 源代碼的變化
* 修復pgxs,以支持重定位安裝的建立
* 為使用Intel編譯器的Itanium處理器添加自旋鎖支持 (Vikram Kalsi)
* 為Windows添加Kerberos 5支持 (Magnus)
* 添加了Chinese FAQ (laser@pgsqldb.com)
* 重命名Rendezvous為Bonjour以匹配OS/X特性重命名 (Bruce)
* 在Darwin上添加對`fsync_writethrough`的支持 (Chris Campbell)
* 流線化信息在服務器、優化器和鎖系統中的路徑 (Tom)
* 允許pg_config使用MSVC編譯 (Andrew)
這在使用MSVC編譯DBD::Pg時是需要的。
* 刪除對Kerberos V4的支持 (Magnus)
Kerberos 4有安全缺陷并且不再維護了。
* 代碼清理(EnterpriseDB執行Coverity靜態分析)
* 修改`postgresql.conf`使用文檔缺省`on`/`off`, 而不是`true`/`false` (Bruce)
* 增強pg_config,能夠報告更多的構建時的值 (Tom)
* 允許libpq在Windows上的建立是線程安全的 (Dave Page)
* 允許IPv6連接在Windows上使用 (Andrew)
* 添加關于I/O子系統可靠性的服務器管理文檔 (Bruce)
* 從`gist.h`中移動私有的聲明到`gist_private.h` (Neil)
在以前的版本中,`gist.h`包含公共的GiST API (用來被GiST索引實現的作者使用)和一些被GiST本身的實現使用的私有聲明。 后者已經被移動到一個獨立的文件,`gist_private.h`。 大多數GiST索引實現應該是不受影響的。
* 徹底檢查GiST內存管理 (Neil)
GiST方法現在總是在一個短期存活的內存空間中調用。因此,通過`palloc()` 的內存分配將被自動回收利用,所以GiST索引實現不需要通過`pfree()` 手動釋放分配的內存。
### E.125.3.15\. 貢獻版的變化
* 添加了`/contrib/pg_buffercache`貢獻版模板 (Mark Kirkwood)
這顯示了緩沖區緩存的內容,為了調試和性能調優的目的。
* 刪除了`/contrib/array`,因為它是廢棄的 (Tom)
* 清理`/contrib/lo`模塊 (Tom)
* 移動`/contrib/findoidjoins`到`/src/tools` (Tom)
* 從`/contrib/cube`中刪除了`<<`、`>>`、 `&<`和`&>`操作符
這些操作沒什么用處。
* 改善`/contrib/btree_gist` (Janko Richter)
* 改善`/contrib/pgbench` (Tomoaki Sato, Tatsuo)
現在有一個設施測試用戶給出的SQL命令腳本,而不是只有一個硬線連接的命令序列。
* 改善`/contrib/pgcrypto` (Marko Kreen)
* OpenPGP對稱秘鑰和公共秘鑰加密的實現
RSA和Elgamal公共秘鑰算法都支持。
* 獨立構建:包括SHA256/384/512 hashes, Fortuna PRNG
* OpenSSL構建:支持3DES,使用內部的AES帶有OpenSSL < 0.9.7
* 從`configure`的結果中獲取構建參數(OpenSSL, zlib)
不再需要編輯`Makefile`。
* 刪除對`libmhash`和`libmcrypt`的支持
- 前言
- 何為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