7

私はMySQL(5.1)をかなり使用した後、Postgres(9.2)に慣れようとしています。これは、 MySQLのいくつかの落とし穴に噛まれてきたためです。しかし、Postgresでの最初の5分間で、私はその落とし穴の1つに遭遇しました。

  • デフォルトでは、PostgreSQLは引用符で囲まれていないものをすべて小文字に変換します。

明らかな回避策がいくつかあるので、これは私にとってそれほど大きな問題ではありません。

  • すべてを引用符で囲みます。
  • すべてに小文字で名前を付けることができます。

しかし、なぜだろうと思います。この設計上の決定がどれほどの論争を引き起こしているのかを考えると、インターネット上で論理的根拠を見つけることができなかったことに驚いています。Postgresがこのように設計された理由について、誰かが完全な説明、またはできれば開発者マニフェストへのリンクを持っていますか?興味ある。

4

1 に答える 1

8

SQL標準では、引用符で囲まれていない識別子を大文字に折りたたむことが指定されています。他の多くのRDBMSは、このように標準に準拠しています。FirebirdとOracleはどちらもそうです。これは、識別子の一致がデフォルトで大文字と小文字を区別しないことを意味します。この動作は、基本的なクエリの互換性に関して非常に重要です。この点で、MySQLの動作は実際の外れ値です。

ただし、PostgreSQLは小文字に折りたたむことで標準から逸脱しています。構文の手がかりにユースケースを使用できるため、これがより読みやすいと見なされる一般的な理由などがあります。何かのようなもの:

SELECT foo FROM bar WHERE baz = 1;

これは、ケースを下に折りたたむとより自然になります。反対の代替折り畳みは次のようになります。

select FOO from BAR where BAZ = 1;

一般に、前者の動作(小文字に折りたたむ)と同様に、SQL操作をより強調し、他の場合に折りたたむと操作が強調されなくなり、識別子が強調されるためです。多くのクエリが複雑であることを考えると、前者の方がうまくいくと思います。

一般に、postgresメーリングリストで私が見た中で最も多くの議論は、標準で義務付けられている動作が破られていることに誰もが同意するというものでした。以上が私の理解です。

于 2013-04-13T03:57:24.383 に答える