本番環境にpostgres本番データベースがあります(大量のデータが含まれています)。ここで、tg-app のモデルを変更して、いくつかの新しいテーブルをデータベースに追加する必要があります。
どうすればいいですか?私はsqlAlchemyを使用しています。
本番環境にpostgres本番データベースがあります(大量のデータが含まれています)。ここで、tg-app のモデルを変更して、いくつかの新しいテーブルをデータベースに追加する必要があります。
どうすればいいですか?私はsqlAlchemyを使用しています。
私は一般的にジョンに同意します。1 パスの SELECT および INSERT は、大規模なデータベースでは実用的ではなく、レプリケーションまたはマルチパスの差分 SELECT / INSERT の設定はおそらく難しく、エラーが発生しやすくなります。
個人的には、 SQLAlchemy をTurboGearsの下の ORM として使用しています。私が実行するスキーマの移行を行うには:
tg-admin sql status
ライブ スキーマと開発スキーマの違いを確認するには、DDL スクリプトを手動で記述 (およびバージョン管理) して、必要な変更を加えます。
SQLAlchemy スタンドアロンを使用している (つまり、TurboGears の下ではない) 場合、sql status
機能は非常にシンプルで、TG ソースで見つけることができます: http://svn.turbogears.org/branches/1.1/turbogears/command/sacommand.py ( 1.0 ブランチの古い Python / SA リリースのバージョンも)。
最も簡単な方法は、いくつかの SQL 更新スクリプトを作成し、それらを使用してデータベースを更新することです。明らかに、これはかなり低レベルの (いわば) アプローチです。
これを頻繁に行うと思われ、Python に固執したい場合は、sqlalchemy-migrateを参照してください。最近の Python Magazine にそれに関する記事がありました。
これは常に機能し、ほとんど考える必要はなく、忍耐だけが必要です。
バックアップを作成します。
実際にバックアップを作成します。誰もがバックアップがあると考えてステップ 1 をスキップしますが、それを見つけることも作業することもできません。回復できないバックアップは信用しないでください。
新しいデータベース スキーマを作成します。
新しいスキーマで、新しい構造を一から定義します。理想的には、新しいスキーマを構築する DDL スクリプトを実行します。スキーマを構築するためのスクリプトがありませんか? 1 つ作成し、バージョン管理下に置きます。
SA を使用すると、テーブルを定義し、スキーマを構築できます。スキーマは Python でバージョン管理されているため、これは理想的です。
データを移動します。
を。構造が変更されていないテーブルの場合、単純な INSERT/SELECT ステートメントを使用して古いスキーマから新しいスキーマにデータを移動します。
b. 構造が変更されたテーブルの場合は、データを古いものから新しいものに移動するための INSERT/SELECT スクリプトを開発します。多くの場合、これは新しいテーブルごとに 1 つの SQL ステートメントになります。場合によっては、2 つの接続が開いている Python ループにする必要があります。
c. 新しいテーブルの場合、データをロードします。
古いスキーマの使用を停止します。新しいスキーマの使用を開始します。古いスキーマを使用していたすべてのプログラムを見つけて、構成を修正します。
アプリケーションのリストがありませんか? 1 つを作成します。真剣に - それは重要です。
アプリケーションにハードコーディングされた DB 構成がありますか? あなたがそれに取り組んでいる間に、それも修正してください。共通の構成ファイルを作成するか、共通の環境変数などを使用して、(a) 一貫性を保証し、(b) 「運用」の概念を一元化します。
この種の処置は、大手術を行うときはいつでも行うことができます。データを抽出する場合を除いて、古いデータベースに触れることはありません。
テーブルを追加するだけで、既存のデータを含むテーブルを変更しない場合は、新しい sqlAlchemy テーブル定義を model.py に追加して、次を実行するだけです。
tg-admin sql create
これにより、既存のテーブルが上書きされることはありません。
スキーマの移行については、http://code.google.com/p/sqlalchemy-migrate/を参照してください。私自身はまだ使用していません。
移行作業の前に、必ず本番データベースのバックアップを取ってください。