MySQLとPostgreSQLの思想が分かれた瞬間

同じRDBMSなのに、なぜこんなに違うのか

MySQLとPostgreSQLはどちらもRDBMSです。
テーブルがあり、SQLで操作し、トランザクションもあります。
表面的には非常によく似ています。

しかし実際に触ると、挙動の“感触”がまったく違います。
同じSQLを書いているはずなのに、片方では動き、もう片方ではエラーになります。

これは性能差ではありません。
設計思想の違いです。

そしてその違いは、かなり早い時期に決定的に分かれました。

PostgreSQLの前提:データが最優先

PostgreSQLの基本思想はシンプルです。
「正しくないデータは保存しない」。

この前提のもとでは、曖昧な問い合わせは許されません。

例えば次のSQLです。

SELECT id, name
FROM users
GROUP BY id;

標準SQLでは不正です。
PostgreSQLは明確にエラーにします。

これは不親切ではありません。
データの意味が曖昧な結果を返さないためです。

PostgreSQLは一貫して、SQL標準への準拠を重視してきました。
挙動は一見厳しいですが、結果の再現性が高いのが特徴です。

MySQLの前提:アプリケーションが最優先

一方のMySQLは、まったく違う方向を向いていました。
「動くこと」を優先します。

同じSQLでも、昔のMySQLは実行しました。
そして何らかの結果を返しました。

Web開発では、エラーで止まるより結果が出る方がありがたい場面が多かったからです。

つまり両者の違いはこうなります。

PostgreSQL

  • データベースがルールを守る

MySQL(初期)

  • アプリケーションを止めない

ここが最初の分岐点です。

GROUP BYが象徴する思想差

GROUP BYの扱いは、両者の違いを最も分かりやすく表します。

PostgreSQL

  • 不正SQLとして拒否

MySQL(旧)

  • 実行して値を返す

この差は小さく見えますが、システム設計に大きく影響します。

MySQLでは、開発者はSQLの厳密性をあまり意識せずに済みます。
PostgreSQLでは、SQLの意味を理解していないと動きません。

型変換の違い

もう一つの分岐点が型です。

INSERT INTO users (age) VALUES ('abc');

PostgreSQLはエラーです。
MySQL(旧)は0として保存します。

PostgreSQL

  • 入力値の誤りを検出

MySQL(旧)

  • 入力値を補正

どちらが正しいというより、役割の考え方が違います。

なぜ方向が分かれたのか

背景には対象ユーザーの違いがあります。

PostgreSQLは研究・企業用途の流れを引いています。
データの正確性が重視されました。

一方MySQLは、Web開発の爆発的普及とともに広がりました。
個人開発者や小規模チームが主な利用者でした。

必要とされたのは厳密さより導入のしやすさです。

この時点で、両者は別の問題を解いていました。

後から起きた逆転現象

興味深いのは、その後です。
MySQLは徐々に厳格化しました。

  • InnoDBの標準化
  • SQLモードの強化
  • STRICTモード

つまり、MySQLはPostgreSQLに近づいていきました。

ただし完全に同じにはなりません。
歴史的背景が違うため、設計の優先順位が異なります。

現在の違い

現在の傾向を簡単にまとめると次の通りです。

PostgreSQL

  • 一貫性重視
  • 標準準拠重視
  • 拡張機能が豊富

MySQL

  • 互換性重視
  • 運用の簡単さ重視
  • Web用途との親和性

これは性能差ではありません。
設計の価値観の違いです。

開発で受ける影響

実務では、次の部分に差が出ます。

  • 集計クエリ
  • NULLの扱い
  • 文字列比較
  • トランザクションの考え方

特に移植時に問題になります。
MySQLで動いたSQLをPostgreSQLへ持っていくと、多くがエラーになります。

逆方向では、動くことは多いですが挙動が変わることがあります。

どちらを選ぶべきか

優劣の問題ではありません。
適した用途が違います。

データの厳密性が最優先ならPostgreSQLが向きます。
既存のWebシステムとの互換性や運用の容易さを重視するならMySQLが扱いやすい場合があります。

重要なのは、「同じRDBMSだから同じ」と考えないことです。

まとめ

MySQLとPostgreSQLの違いは機能数ではありません。
何を守ろうとしているかの違いです。

PostgreSQLはデータの意味を守ろうとします。
MySQLはアプリケーションの動作を守ろうとしてきました。

現在のMySQLは厳格化していますが、歴史の影響は残っています。
そのため両者は似ていても、完全に同じ感覚では扱えません。

データベース選択で重要なのは、性能比較より設計思想の理解です。
その違いを理解したとき、なぜ同じSQLでも結果が変わるのかが見えてきます。