1

私が現在取り組んでいるプロジェクトは、Zend フレームワークでデータベースを mysql から postgreSQL にアップグレードすることです。「ESF Database Migration Toolkit」を使用して、データベースを PostgreSQL に移行しました。「Emp_FirstName」、「Emp_LastName」などのフィールド名は、「emp_firstname」および「emp_lastname」として PostgreSQL に保存されます。これにより、コードでエラーが発生しました。ただし、PostgreSQL のファイルを Emp_FirstName に更新すると、エラーが表示されます

********** Error **********

ERROR: column "Emp_FirstName" does not exist
SQL state: 42703
Character: 8

MYSQL とまったく同じようにファイル名を指定することは可能ですか?

4

1 に答える 1

1

移行ツールは「二重引用符」識別子ではないため、大文字と小文字は PostgreSQL によって小文字にフラット化されています。大文字と小文字が保持されるように、コードで識別子を引用する必要があります。PostgreSQL では大文字と小文字が区別され、引用符で囲まれていない識別子は大文字と小文字が区別されますが、MySQL では Windows と Mac では大文字と小文字が区別されず、 *nix では大文字と小文字が区別されます

PostgreSQL の動作の詳細については、PostgreSQL マニュアルの識別子とキーワードに関するセクションを参照してください。とにかくそれを読んで、特に文字列の引用がどのように機能するかを理解する必要があります。

次のオプションのいずれかを選択する必要があります。

  • 識別子を引用しないようにコードを変更してください。
  • スキーマの作成時に識別子を引用するように移行ツールを変更します。
  • 移行ツールを使用する代わりにスキーマを手動で移行します。
  • ツールで生成された SQL の識別子の引用符を手動で修正します。また
  • すべての識別子を小文字にして、Pg にとって問題にならないようにする

最後のオプションは、Oracle サポートを追加して、Oracleがすべての識別子を大文字にしていることに気付いた場合には役に立ちません。そのため、最初の 4 つのオプションのいずれかを選択することをお勧めします。30 秒の Google 検索で移行ツールに識別子を引用させる方法は見つかりませんでしたが、あまり時間をかけませんでした。最初に、移行ツールで引用モードを制御するオプションを探します。

PostgreSQL には、常に識別子を引用符で囲んだものとして扱ったり、大文字と小文字を区別しない識別子比較を使用したりするための構成オプションがありません。

遭遇する非互換性はこれだけではありません。そのため、クエリとアプリケーション コードを変更する準備をしてください。場合によっては、MySQL のサポートを継続する予定であれば、MySQL 用に 1 つのクエリと PostgreSQL 用に別のクエリが必要になることさえあります。

どちらのオプションも MySQL を SQL 標準の動作に近づけるため、MySQL でモードを使用していない場合sql_mode = ANSIと使用していない場合は、これらのオプションを使用していた場合よりも移植に多くの問題が発生します。STRICT

于 2013-03-19T11:03:03.550 に答える