2016-04-07 4 views
2

は、私がどのように私はテーブルがbelongsto_useridがnullで一つだけの行を持つことができることを、確実に一意のインデックスを、テーブルユニークヌルインデックス

CREATE TABLE mandantconfigentity 
(
    id bigint NOT NULL, 
    currentlegalversionnumber integer NOT NULL DEFAULT 5, 
    belongsto_userid character varying(255) 
) 

を作成することができますか?

これは動作しません:

CREATE UNIQUE INDEX unique_mandantconfig_for_null_belongsto 
    ON mandantconfigentity (1) 
WHERE (belongsto_userid IS NULL); 

答えて

3
CREATE UNIQUE INDEX unique_mandantconfig_for_null_belongsto 
    ON mandantconfigentity ((1)) 
WHERE (belongsto_userid IS NULL); 

だから、何 - それは過剰発現部分インデックスを作成します。それは持っていますbelongsto_userid IS NULL行ごとに明示的に固定値1

通常、CREATE INDEXコマンドの構文では、2番目の例に示すように、インデックス式のまわりに括弧を書く必要があります。発現は最初の例のように、単に関数呼出しである場合、括弧を省略することができます。

だから、余分な括弧は構文によって必要とされています。

参考文献:

+0

が助けに感謝を動作することが保証され、動作しません。 – wutzebaer

0

インデックスを作成するためのコードは、列名を必要とする:

CREATE UNIQUE INDEX unique_mandantconfig_for_null_belongsto 
    ON mandantconfigentity (id) 
WHERE (belongsto_userid IS NULL); 
+0

それはどのように1行のみで、ほとんどの '' NULL'に等しいbelongsto_userid'いることを確認しますか? http://sqlfiddle.com/#!15/3c614/1 – zerkms

+0

これはユーザーIDがnullのとき、IDだけoccours一度 – wutzebaer