Mysql

MySQL 和 PostgreSQL 在編寫 SQL 查詢方面有什麼區別?

  • March 6, 2014

除了性能和安全性之外,MySQL 和 Postgres 之間真的有什麼區別嗎,比如 SQL 查詢、內置函式、過程等等?

我問這個是因為我熟悉 PHP 和 MySQL (phpMyAdmin) 但不熟悉 Postgres (phpPgAdmin)

(關於 PostgreSQL 9.3 和 MySQL 5.6,寫於 2014 年;如果您正在查看其他版本,這可能已經過時了):

更多功能。

  • CHECK約束
  • 真正的SERIALIZABLE隔離
  • 數組(包括對數組的索引支持)
  • 視窗函式 ( lead, lag, row_number, 等)
  • 公共表表達式(WITH查詢),包括遞歸 CTE 和可寫 CTE
  • 雜湊hstore類型及其索引支持
  • SQL/XML 支持
  • json支持
  • 適用於多種類型的豐富函式和運算符
  • 部分和函式/表達式索引,包括部分唯一索引和唯一表達式索引
  • 複合類型
  • 使用者定義的聚合和運算符
  • 設置返回使用者定義的函式
  • 使用者定義類型
  • 事務性 DDL(這太棒了)
  • 用於復雜索引需求的 GIN 和 GiST 索引,包括 K-最近鄰索引
  • 地理資訊系統
  • UNLOGGED表(儘管 MyISAM 在 MySQL 中滿足了這種需求)

有關詳細資訊,請參閱綜合使用者手冊

然而:

  • 與 MySQL 不同,PostgreSQL 中沒有會話變數。(您可以為此濫用 GUC,但不能做與 MySQL 會話變數相同的事情)。
  • PostgreSQL 沒有INSERT ... ON DUPLICATE KEY UPDATE(“upsert”)
  • 目前,PostgreSQL 具有與 MySQL 不同的複制選項。MySQL 沒有時間點恢復,但 PostgreSQL 沒有邏輯複製(但我們正在努力)。
  • GROUP BY ... ROLLUP用於分組摘要。在 PostgreSQL 中做同樣的事情需要一個聯合,通常是在一個 CTE 上的兩個查詢上。
  • PostgreSQL 沒有內置的事件調度程序。您通常只使用 cron 或 Windows 任務計劃程序;還有來自 PgAdmin-III 的 PgAgent。

引用自:https://dba.stackexchange.com/questions/60242