データベースからテーブルを削除しましたが、_YOURCLUSTERNAME.sl_table から削除していません。
YOURCLUSTERNAMEの前の「_」が重要です。
混乱を解決するための 4 つのステップ:
1. tab_id を取得する
tab_relname='MYTABLENAME' および tab_nspname='MYSCHEMANAME' の _YOURCLUSTERNAME.sl_table から tab_id を選択します。
MYDATABASE で数値 2 を返します
2.トリガーを削除する
select _YOURCLUSTERNAME.altertablerestore(2);
これにより、エラーが返される場合があります。元のテーブルのトリガーを削除しようとしていて、新しいテーブルがあるためです。
3. slony インデックスが作成されている場合は削除します
select _YOURCLUSTERNAME.tableDropKey(2); これにより、エラーが返される場合があります。元のテーブルのインデックスを削除しようとしていて、新しいテーブルがあるためです。
4. sl_table からテーブルを削除します
tab_id = 2 の _YOURCLUSTERNAME.sl_table から削除します。
テーブルを削除する最良の方法は次のとおりです。
1. クラスタからテーブルを削除します。
tab_relname='MYTABLENAME' および tab_nspname='MYSCHEMANAME' の _YOURCLUSTERNAME.sl_table から tab_id を選択します。
MYDATABASE で数値 2 を返します
slonik < myfile.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、オリジン = 1);
2 は sl_table の tab_id で、1 は NODE 1、HOST1_MASTER です
2. スレーブからテーブルをドロップする
SQL DROP TABLE を使用