2011-02-09 1 views
1

私はslonyによってバックアップされているデータベースを持っています。レプリケートされたDBからテーブルを削除し、SQLスクリプトを使用して同じテーブルを作成し、スローニースクリプトを使用することなく再作成しました。 slonyからテーブルを削除するには

私はポストにこれを発見し、それを試してみました: SELECT OID from pg_class WHERE relname = <your_table>' AND relkind = 'r';
  • 更新問題テーブルのsl_tableでtab_reloid:
    1. を再作成テーブルのOIDを取得し、テーブル
    2. を再作成します。
    3. SET DROP TABLE (ORIGIN = N, ID = ZZZ);を実行します。ここで、NはMASTERのNODE#で、ZZZはsl_tableのID番号です。

    しかし、うまくいかないようです。

    レプリケートされたDBからテーブルを削除するにはどうすればよいですか?または、新しく作成したテーブルを古いテーブルの代わりに使用する方法はありますか?

  • 答えて

    1

    Slonyから物を落とすことに関する権威ある文書はhereです。

    上記のコマンドを実行する前にどのような状態があったのかは明確ではなく、「動作していない」とはっきりさせていません。

    Slonyとの複製からテーブルを削除することで私が知っている重要な「つかみ」があります。

    ERROR: "table_pkey" is an index 
    

    これは、内に固定することができる:レプリケーションからテーブルを削除した後、あなたはトラブル実際に物理的に次のように不可解なエラーを取得し、Slonyの1.2で(ただし、マスター上の)奴隷にテーブルを削除することができますSlony 2.0の問題ですが、ここでの問題は、スレーブの複製されていないテーブルと複製されたテーブルの間に参照整合性の関係があり、スニーニア1.2が意図的にシステムテーブルの一部を設計の一部として破損していることです。

    解決策は、slonik_execute_scriptによって「DROP TABLE」コマンドを実行することです。すでに物理的にテーブルをマスターにドロップしている場合は、「EXECUTE ONLY ON」オプションを使用して、特定のスレーブに対してのみコマンドを実行できます。詳細は、EXECUTE SCRIPTのドキュメントを参照してください。

    1

    データベースからテーブルを削除しましたが、_YOURCLUSTERNAME.sl_tableから削除していません。

    YOURCLUSTERNAMEの前に「_」をインポートしています。混乱を解決する

    4 STEPS:

    1. tab_relname = 'MYTABLENAME' とtab_nspnameは= 'MYSCHEMANAME'

    _YOURCLUSTERNAME.sl_tableからtab_id

    選択tab_idを取得それはMYDATABASEの番号2を返す

    2.トリガーを削除する

    選択_YOURCLUSTERNAMEaltertablerestore(2);

    これはエラーを返す可能性があります。元のテーブルのトリガを削除しようとしているため、新しいテーブルがあります。 3.

    を作成された場合(2)_YOURCLUSTERNAME.tableDropKeyを選択するのSlonyインデックスを削除。 これはエラーを返す可能性があります。 元のテーブルのインデックスを削除しようとしているため、新しいテーブルが作成されました。

    4 tab_id = 2 _YOURCLUSTERNAME.sl_tableから削除sl_table

    からテーブルを削除します。

    テーブルをドロップするための最良の方法は次のとおりです。

    1.ドロップテーブルをクラスタ構成:

    選択tab_id _YOURCLUSTERNAME.sl_tableからtab_relname = 'MYTABLENAME' とtab_nspname =」をMYSCHEMANAME」

    それはのslonik < myfileをして実行しMYDATABASE

    に数2をreturna .slonik

    ここで、myfile.slonikは次のとおりです。 cluster name = MYCLUSTER; NODE 1 ADMIN CONNINFO = 'dbname = DATABASENAME host = HOST1_MASTER user = postgres port = 5432'; NODE 2 ADMIN CONNINFO = 'dbname = DATABASENAME host = HOST2_SLAVE user = postgres port = 5432';

    SET DROP TABLE(id = 2、origin = 1);

    2 SQLのDROP表

    とスレーブ

    からテーブルHOST1_MASTER

    2.ドロップ、sl_tableおよび1からtab_idがノード1であります

    関連する問題