2

という列を持つbilling_infosテーブルがありますorder_id。すでにインデックスがあります。

\d billing_infos
...
Indexes:
    "billing_infos_pkey" PRIMARY KEY, btree (id)
    "billing_infos_address_id_idx" btree (address_id)
    "index_billing_infos_on_order_id" btree (order_id) //<--this one

ただし、これが一意のインデックスであるかどうかはわかりません。一意のインデックスを作成するタスクがありますが、既存のものを変更する必要があるのか​​、新しいインデックスを作成する必要があるのか​​ わかりません。order_id 値はすべて一意である必要があります。

新しいインデックスを作成するか、既存のインデックスを変更する必要がありますか?
また、既存のインデックスが一意かどうかを確認するにはどうすればよいですか?

4

3 に答える 3

3

一意のインデックスを同時に作成することは、おそらく最も侵襲的ではありません。一意性を強制するには、CONSTRAINT を使用することをお勧めします。チェックされる列が一意性を作成する関数を必要とする場合は、UNIQUE インデックスの方が便利です。後者の例は、COALESCE() を使用して、NULL が UNIQUE チェックをバイパスしないようにすることです。例えば。

create unique index foo_col1_col2_uidx on foo (col1, coalesce(col2,-1));

上記の例では、col2 は整数列であり、NOT NULL として定義されていません

ユニークインデックスを同時に作成する例。

create unique index concurrently billing_infos_order_id_uidx on billing_infos (order_id);

UNIQUE インデックス (私は _uidx と名付けました) と UNIQUE CONSTRAINT (_uc) のpsqlfromの出力は次のようになります。\d

\d foo
                Table "public.foo"
 Column |            Type             | Modifiers 
--------+-----------------------------+-----------
 x      | integer                     | 
 tstamp | timestamp without time zone | 
 col    | text                        | 
Indexes:
    "foo_col_uidx" UNIQUE, btree (col)                <<< unique index
    "foo_tstamp_uc" UNIQUE CONSTRAINT, btree (tstamp) <<< unique constraint
    "foo_idx" btree (x)
于 2013-07-24T14:56:44.813 に答える
0

PgAdmin ツールを使用して、インデックス構造を確認します。

于 2013-07-24T14:52:53.407 に答える