2008-08-20 19 views
26

現在、私たちが構築している製品にMySQLを使用しており、主にライセンス上の理由から、できるだけ早くPostgreSQLに移行したいと考えています。MySQLからPostgreSQLへの移行

誰もこのような動きをしましたか?私たちのデータベースはアプリケーションの生命線であり、最終的にはTBのデータを格納することになるので、パフォーマンスの向上/損失、SQLとストアドプロシージャの変換における大きなハードルについて聞きたいと思います。

編集:Just私たちがなぜMySQLのライセンスを気に入らないのか尋ねた人たちに明確に説明します。私たちは(現在)データベースのバックエンドとしてMySQLに依存している製品を開発しています。彼らの免許証では、1回の設置当たりの定価の一部を定額料金で支払う必要があると述べています。スタートアップとして、これは魅力的ではありません。

+0

このトピックに関するいくつかの優れた技術記事があります:http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL – user13550

+0

多分問題を複製してください。 MySQLはそれをすぐにサポートします。 –

答えて

27

スティーブ、私は古いアプリケーションをPgSQL-> MySQLに移行しなければならなかった。

  • SQLを使用すると、MySQLの方言に苦しむことがありますので、すでにMySQLが静かに切り捨て
  • があることVARCHARが知っている、実際に言語の標準にかなり近いです:私はあなたがあなた自身の幸運;-) 共通の落とし穴がある検討すべきである、と言わなければなりませんPgは不平を言うのに対して、最大長を超えて - 迅速な問題を回避するには、代わりに「varchar型」と使用の「テキスト」として、これらの列を持つことで、二重引用符ではなく、逆アポストロフィで使用されている長い行
  • を切り捨てるようにトリガー
  • ブールフィールドを使用して比較されていますISとIS NOT演算子ですが、MySQL互換のINT(1)=と<> Pgは外部キーの整合性を強制するのはかなり厳しいですので、あなたがPHPを使用する場合の参照
  • にDELETE CASCADE ON使用することを忘れないでください
  • DELETE/INSERTコンボを使用し、何REPLACEがありませんまだ
  • 可能ですPDOで、におけるlastInsertId()メソッドにパラメータを渡すために覚えている - それは通常、このように作成されたシーケンス名、次のようになります。[テーブル名] _ [primarykeyname]

_seq私は、少なくともビットに役立ちます願っています。 Postgresで楽しく遊べます!

13

私は同様の変換を行っていますが、理由はさまざまです。これは、より良いACIDサポートが必要だったためで、Webユーザーに他のDBツール(両方に1つのID)を使用して同じデータを表示させることができたためです。ここで

たちをビットのものです:

  1. MySQLは制約を強制しません として厳密にPostgreSQLのよう。
  2. 異なる日付処理ルーチンがあります。これらは手動で変換する必要があります。
  3. ACID に準拠していないコードは問題となる可能性があります。

しかし、いったんそれがいったん設置され、テストされると、それははるかに良くなりました。 PostgreSQLは、安全上の理由や重大な同時使用のために適切なロック機能を備えているため、MySQLより優れたパフォーマンスを発揮します。ロックが必要ないもの(読み取り専用)では、パフォーマンスはあまり良くはありませんでしたが、ネットワークカードよりもまだ高速でしたので、問題ではありませんでした。

ヒント:

  • 自動化スクリプトのcontrib ディレクトリには、あなたの変換のための良い出発点 ですが、 は通常少し触れする必要があります。
  • は、シリアライズ可能なアイソレーション をデフォルトとして使用することを強くお勧めします。
  • pg_autodocツールは に本当に便利です。 はあなたとの関係を見つけるのを助けます は、定義と執行を忘れています。
3

私たちはMySQL3からPostgreSQL 8.2への移行を行いました。 PostgreSQLには基本的なSQLがありますが、MYSQLが魅力的なMySQLのものを使用していない場合はOKです。

私の経験から、私たちのMySQLデータベース(バージョン3)には外部キーがありません... PostgreSQLはそれらを持っているので、変更する必要がありました。それは良いことでしたし、間違いを発見しました。

私たちが変更しなければならなかったもう一つのものは、MySQLで同じではないコーディング(C#)コネクタでした。 MySQLの方がPostgreSQLの方が安定していました。まだPostgreSQLの問題はほとんどありません。

+10

"Postgresql"、 "PostGreSql"、 "PostGresql" => "PostgreSQL" ;-) –

+6

Sigh。コメントのための9つのupvotes、まだ誰も行って編集を行った。公正なStackOverflowユーザーに権限を与えてください! – mlissner

関連する問題