Knex: テーブルをドロップするときのカスケードオプション

作成日 2015年09月12日  ·  3コメント  ·  ソース: knex/knex

次のようなものがあると便利です。

knex.schema.dropTable('users', true);

//OR

knex.schema.cascade().dropTable('users');

生成します:

DROP TABLE users CASCADE;

最も参考になるコメント

これは方言固有です。 さらに悪いことに、 MySQLのドキュメントによると、 CASCADEキーワードは許可されていますが、まったく何もしません。 (余談ですが、MySQLはCHECK制約も黙って無視しますが、これは過去に私を苦しめました)。

この機能を含める場合(私が望む)、適切なCASCADE実装がない方言のフォールバック実装が必要であるか、フォールバックを使用して実装する方法がない場合は、エラーが発生します。スローする必要があります。

たとえば、MySQLでは、 INFORMATION_SCHEMA.KEY_COLUMN_USAGEをクエリして、各table_name + '.' + column_nameの組み合わせのノードと、 REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAMEからTABLE_NAME.COLUMN_NAMEまでのエッジを持つデータベースの有向グラフを作成できます。 次に、グラフでトポロジカルソートを実行すると、ドロップ順序が表示されます。 私はこれを行いました、そしてそれはかなりうまくいきます。 INFORMATION_SCHEMAを使用することの良い点は、実装がSQLダイアレクト間で移植可能でなければならないことです。 それが実際に真実であるかどうかは、まったく別の話です。

全てのコメント3件

.truncateについても同じ

+1

これは方言固有です。 さらに悪いことに、 MySQLのドキュメントによると、 CASCADEキーワードは許可されていますが、まったく何もしません。 (余談ですが、MySQLはCHECK制約も黙って無視しますが、これは過去に私を苦しめました)。

この機能を含める場合(私が望む)、適切なCASCADE実装がない方言のフォールバック実装が必要であるか、フォールバックを使用して実装する方法がない場合は、エラーが発生します。スローする必要があります。

たとえば、MySQLでは、 INFORMATION_SCHEMA.KEY_COLUMN_USAGEをクエリして、各table_name + '.' + column_nameの組み合わせのノードと、 REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAMEからTABLE_NAME.COLUMN_NAMEまでのエッジを持つデータベースの有向グラフを作成できます。 次に、グラフでトポロジカルソートを実行すると、ドロップ順序が表示されます。 私はこれを行いました、そしてそれはかなりうまくいきます。 INFORMATION_SCHEMAを使用することの良い点は、実装がSQLダイアレクト間で移植可能でなければならないことです。 それが実際に真実であるかどうかは、まったく別の話です。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

hyperh picture hyperh  ·  3コメント

tjwebb picture tjwebb  ·  3コメント

marianomerlo picture marianomerlo  ·  3コメント

koskimas picture koskimas  ·  3コメント

zettam picture zettam  ·  3コメント