特性 |
MySQL |
PostgreSQL |
執行個體 |
通過執行 MySQL 命令(mysqld)啟動執行個體。一個執行個體可以管理一個或多個資料庫。一台服務 器可以運行多個 mysqld 執行個體。一個執行個體管理器可以監視 mysqld 的各個執行個體。 |
通過執行 Postmaster 進程(pg_ctl)啟動執行個體。一個執行個體可以管理一個或多個資料庫,這些數 據庫組成一個叢集。叢集是磁碟上的一個地區,這個地區在安裝時初始化並由一個目錄組成,所有資料都 儲存在這個目錄中。使用 initdb 建立第一個資料庫。一台機器上可以啟動多個執行個體。 |
資料庫 |
資料庫是命名的對象集合,是與執行個體中的其他資料庫分離的實體。一個 MySQL 執行個體中的所有 資料庫共用同一個系統編目。 |
資料庫是命名的對象集合,每個資料庫是與其他資料庫分離的實體。每個資料庫有自己的系統 編目,但是所有資料庫共用 pg_databases。 |
資料緩衝區 |
通過 innodb_buffer_pool_size 配置參數設定資料緩衝區。這個參數是記憶體緩衝區的位元組數 ,InnoDB 使用這個緩衝區來緩衝表的資料和索引。在專用的資料庫伺服器上,這個參數最高可以設定為 機器實體記憶體量的 80%。 |
Shared_buffers 緩衝。在預設情況下分配 64 個緩衝區。預設的塊大小是 8K。可以通過設定 postgresql.conf 檔案中的 shared_buffers 參數來更新緩衝區快取。 |
資料庫連接 |
客戶機使用 CONNECT 或 USE 語句串連資料庫,這時要指定資料庫名,還可以指定使用者 id 和 密碼。使用角色管理資料庫中的使用者和使用者組。 |
客戶機使用 connect 語句串連資料庫,這時要指定資料庫名,還可以指定使用者 id 和密碼。 使用角色管理資料庫中的使用者和使用者組。 |
身分識別驗證 |
MySQL 在資料庫級管理身分識別驗證。 基本只支援密碼認證。 |
PostgreSQL 支援豐富的認證方法:信任認證、口令認證、Kerberos 認證、基於 Ident 的認 證、LDAP 認證、PAM 認證 |
加密 |
可以在表級指定密碼來對資料進行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數對列 資料進行加密和解密。可以通過 SSL 串連實現網路加密。 |
可以使用 pgcrypto 庫中的函數對列進行加密/解密。可以通過 SSL 串連實現網路加密。 |
審計 |
可以對 querylog 執行 grep。 |
可以在表上使用 PL/pgSQL 觸發器來進行審計。 |
查詢解釋 |
使用 EXPLAIN 命令查看查詢的解釋計劃。 |
使用 EXPLAIN 命令查看查詢的解釋計劃。 |
備份、恢複和日誌 |
InnoDB 使用寫前(write-ahead)日誌記錄。支援線上和離線完全備份以及崩潰和事務恢複。 需要第三方軟體才能支援熱備份。 |
在資料目錄的一個子目錄中維護寫前日誌。支援線上和離線完全備份以及崩潰、時間點和事務 恢複。 可以支援熱備份。 |
JDBC 驅動程式 |
可以從 參考資料 下載 JDBC 驅動程式。 |
可以從 參考資料 下載 JDBC 驅動程式。 |
表類型 |
取決於儲存引擎。例如,NDB 儲存引擎支援分區表,記憶體引擎支援記憶體表。 |
支援暫存資料表、常規表以及範圍和清單類型的分區表。不支援雜湊分割表。 由於PostgreSQL的 表分區是通過表繼承和規則系統完成了,所以可以實現更複雜的分區方式。 |
索引類型 |
取決於儲存引擎。MyISAM:BTREE,InnoDB:BTREE。 |
支援 B-樹、雜湊、R-樹和 Gist 索引。 |
約束 |
支援主鍵、外鍵、惟一和非空約束。對檢查約束進行解析,但是不強制實施。 |
支援主鍵、外鍵、惟一、非空和檢查約束。 |
預存程序和使用者定義函數 |
支援 CREATE PROCEDURE 和 CREATE FUNCTION 語句。預存程序可以用 SQL 和 C++ 編寫。用 戶定義函數可以用 SQL、C 和 C++ 編寫。 |
沒有單獨的預存程序,都是通過函數實現的。使用者定義函數可以用 PL/pgSQL(專用的過程語 言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。 |
觸發器 |
支援行前觸發器、行後觸發器和語句觸發器,觸發器語句用過程語言複合陳述式編寫。 |
支援行前觸發器、行後觸發器和語句觸發器,觸發器過程用 C 編寫。 |
系統設定檔 |
my.conf |
Postgresql.conf |
資料庫配置 |
my.conf |
Postgresql.conf |
客戶機串連檔案 |
my.conf |
pg_hba.conf |
XML 支援 |
有限的 XML 支援。 |
有限的 XML 支援。 |
資料訪問和管理伺服器 |
OPTIMIZE TABLE —— 回收未使用的空間並消除資料檔案的片段 myisamchk -analyze —— 更新查詢最佳化器所使用的統計資料(MyISAM 儲存引擎) mysql —— 命令列工具 MySQL Administrator —— 客戶機 GUI 工具 |
Vacuum —— 回收未使用的空間 Analyze —— 更新查詢最佳化器所使用的統計資料 psql —— 命令列工具 pgAdmin —— 客戶機 GUI 工具 |
並發控制 |
支援表級和行級鎖。InnoDB 儲存引擎支援 READ_COMMITTED、READ_UNCOMMITTED、 REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語句在事務級設定隔離級 別。 |
支援表級和行級鎖。支援的 ANSI 隔離等級是 Read Committed(預設 —— 能看到查詢啟動 時資料庫的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務啟動之前提交的 結果)。使用 SET TRANSACTION 語句在事務級設定隔離等級。使用 SET SESSION 在會話級進行設定。 |