2

MySQL または PostgreSQL (それぞれバージョン 5.5 および 9.0) のデフォルト インストールで実行される単一の SQL スクリプトを作成したいと考えています。これは可能ですか?スクリプトの先頭に追加し、標準の ANSI クエリを使用する
ことでほぼ実行できますが、その行は PostgreSQL では有効ではありません。SET SESSION sql_mode='ANSI';エラーが発生しても PostgreSQL に続行するように指示することはできますが、エラーなしで実行されるスクリプトがあればいいのにと思います。

4

5 に答える 5

4

MySQL と PostgreSQL の両方の SQL スクリプトを作成することはできますか?

はい。

次の質問お願いします!

...

まじめに言えば、それは完全に実行可能ですが、それぞれの動作が異なることに注意する必要があります。たとえば、byteaPG では a を使用する必要があるがBLOB、MySQL では a を使用する必要がある場合、エンコーディング/エスケープを正しく行うのは非常に楽しい時間になります。次に、全文検索のようなものがあります。PG にはそれが組み込まれており、MySQL には 1 つのテーブル タイプ (MyISAM、ひどいもの) にのみ組み込まれており、構文はまったく異なります。そして、これは文字セットと照合にさえ触れません。

単純な CRUD 操作に限定する場合は、おそらく問題ありません。ジョブを正しく実行した場合は、同じコードを使用して SQLite および MSSQL と通信することもできます (ANSI モードに切り替えた場合)。

ある程度複雑になると、コードは、動作と構文の小さな違いを回避するために、少なくとも基礎となるデータベースを認識している必要があります。重要な部分は、適切に作成すれば、クエリの大部分を基になるデータベース間でまったく変更せずに共有できることです。

于 2011-02-15T17:30:58.507 に答える
3

条件付きコメントを使用してみてください:

/*! SET SESSION sql_mode='ANSI'; */

PostgreSQL はそれを無視し、MySQL が実行します。詳細については、ドキュメントを参照してください。

更新: PostgreSQL のみで実行され、MySQL では実行されないコマンドを含めたい場合、PostgreSQL はネストされたコメントをサポートし、MySQL はサポートしないという事実を利用できます。次の例は、これがどのように使用されるかを示しています。

/*! SELECT 'MySQL' rdbms_type; */
/*/**/-- */ SELECT 'postgres' AS rdbms_type;

しかし、これはおそらくファイルの読み取りを非常に困難にするでしょう。

于 2011-02-15T19:26:07.397 に答える
1

1 つずつ機能を比較していると思います。リンク全体を読んだわけではありませんが、あなたの探求に役立つと思います.

http://troels.arvin.dk/db/rdbms/

于 2011-02-15T17:26:20.790 に答える
1

スクリプトではなくサーバーでモードを設定します。

--sql-mode="modes" オプションを指定して mysqld を起動するか、my.cnf (Unix オペレーティング システム) または my.ini (Windows) で sql-mode="modes" を使用して、デフォルトの SQL モードを設定できます。

http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html

明らかに、スクリプトでは、両方が受け入れる機能の最小共通ドミネーターを使用する必要があります。また、MySQL は最も標準に準拠したパーサーを備えていることでも知られていますが、だからと言って実際に何でもできるというわけではありません (スクリプトは両方とも機能しますが、動作がまったく異なる可能性があるため、Gotcha を取得するには良い方法です)。Postgresql も 'ansi' 準拠ではありません。最も近いかもしれませんが、それ自体に固有のものもたくさんあります。理想的な方法とは思えません。

ORM は、これと同じ種類のことを行うことに懸命に取り組んでいます。つまり、苦痛を取り除きます。

于 2011-02-15T19:10:54.250 に答える