2016-10-24 7 views
2

空のテキストをテーブルに保存することはできません。したがって、私はドメインタイプを作成しました:Postgresカスタムドメインタイプとユニーク

CREATE DOMAIN non_empty_text AS TEXT CHECK(VALUE ~ '\S');そしてすべてのテキストタイプをnon_empty_textに変更しました。

これまでのところとても良いです。しかし、タイプをテキストに戻して、ユニークなインデックスと空の値を持つ行を作成すると効率的でしょうか?

+2

ユニークなインデックスは、完全ではない何かがあり、空でない値をチェックしています –

+0

技術的にはい。しかし、すべての禁止された値を持つ行を作成すると、これ以上追加することはできません。明らかにひどい醜いxD – velop

+0

チェック条件を 'VALUE <>' ''に変更して、読みやすく、読みやすくすることを検討してください。 –

答えて

1

もちろん、これをベンチマークする必要がありますが、私はあなたのアプローチを変更する必要があります。

現在のドメインタイプロジックは、メモリ内の文字列を評価します。第2のアプローチでは、インデックスにアクセスし、キャッシュ内にあるかもしれないブロックを探す必要があります。ストレージにアクセスしても、それが起こらない場合でも、すべて時間は、メモリ内の操作に比べて非常に高価です。これはおそらく良い考えではないでしょう。

+0

UNIQUEインデックスを実際に実際に必要としない場合は、追加することは決してお勧めできません。 – velop

+1

@velopかなりええ、ええ。 – Mureinik

1

あなたのドメインへのアプローチは正しいと思います。ユニーク制約の代替案は興味深いアイデアですが、時期尚早の最適化を検討します。

関連する問題