MySQL 和 PostgreSQL 在编写 SQL 查询方面有什么区别?

Ram*_*abu 2 mysql postgresql phpmyadmin php

除了性能和安全性之外,MySQL 和 Postgres 之间真的有什么区别吗,比如 SQL 查询、内置函数、过程等等?

我问这个是因为我熟悉 PHP 和 MySQL (phpMyAdmin) 但不熟悉 Postgres (phpPgAdmin)

Cra*_*ger 13

(关于 PostgreSQL 9.3 和 MySQL 5.6,写于 2014 年;如果您正在查看其他版本,这可能已经过时了):

更多功能。

  • CHECK 约束
  • 真正的SERIALIZABLE隔离
  • 数组(包括对数组的索引支持)
  • 窗函数(leadlagrow_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。