異なるテーブルからのエントリのバッチに対して「ロールバック」(通常のロールバックではない)関数を実装するタスクがあります。例えば:
def rollback(cursor, entries):
# entries is a dict of such form:
# {'table_name1': [id1, id2, ...], 'table_name2': [id1, id2, ...], ...}
各table_nameのエントリを削除する必要があります。しかし、これらのエントリは非常に複雑な関係にある可能性があるためです。私の考えはいくつかのステップにあります:
- null許容可能なすべてのテーブルからすべての列を見つけます。
- すべてのエントリを更新して、null許容のすべての列をnullに設定します。このステップの後、循環依存はないはずです(そうでない場合は、テーブルに挿入できないと思います)
- それらの依存関係を見つけて、トポロジカルソートを作成します。
- 1つずつ削除します。
私の質問は次のとおりです。
- アイデアは理にかなっていますか?
- 誰かが以前に似たようなことをしたことがありますか?そしてどうやって?
- ステップ3のメタテーブルをクエリする方法は?coz私はpostgresqlを初めて使用します。
任意のアイデアや提案をいただければ幸いです。