1

私はPostgresを使用しており、DBIx :: Classを使用して、データベースで大文字と小文字を区別しない一意の制約を作成したいと考えていました。

私は次のような例を理解しています:

__PACKAGE__->add_unique_constraint("table_unique_constraint", ["col_name"]);

特定のテーブルに一意の制約を作成します。

DBIx :: Classを使用して大文字と小文字を区別しない一意の制約を作成する方法を探していますが、一意のインデックスを作成したいと思います。私が生成しようとしているSQLクエリは次のようなものです。

CREATE UNIQUE INDEX table_unique_constraint ON "table_name"(lower("column_name"));

この例では、大文字と小文字を区別せずに、テーブルの値に対して挿入されるエントリを確認します。

これを結果に追加する方法はありますか?Esp、キャッチはlower()です。

そしてもちろん、DBIx :: Class Manualは、一意のインデックスのフックではなく、制約を作成するように指示しました。

4

1 に答える 1

2

DBIx :: Class自体はDDLクエリを作成しないため、質問は当てはまりません。$ schema-> deployを使用する場合、内部でSQL::Translatorを使用します。DBICがこのような特別なメタデータを保持して一意のキーの作成を制御できるとは思いませんが、SQL::Translatorのドキュメントを参照してください。deploy_statementsを使用してDDLステートメントを作成し、生成されたステートメントを変更するか、alterSQLステートメントを実行するafterdeployメソッド修飾子を使用して、生成された制約で大文字と小文字を区別しないようにすることをお勧めします。

于 2013-01-12T11:55:11.943 に答える