配列列に UNIQUE を設定できるかどうかお尋ねしたいと思います - 配列項目が一意であるかどうかを確認する必要があります。
次に、これに 2 番目の列も含めたいと思います。
必要なものを想像するために、例を含めます。ドメインとエイリアスを含むエントリがあるとします。列domain
にはvarchar
メイン ドメインが含まれており、空にすることaliases
もarray
できます。論理的には、列の何もないだけでなく、正反対domain
にすることはできません。aliases
それを行う方法があれば、その方法を教えていただければ幸いです。最良の方法は、sqlalchemy でそれを行う方法のヘルプを含めることです (TurboGears で使用するテーブル宣言)。
- ポストグル: 9.2
- sqlalchemy: 0.7
アップデート:
sqlalchemy で複数列を一意にする方法を見つけましたが、配列では機能しません。
client_table = Table('client', metadata,
Column('id', types.Integer, autoincrement = True, primary_key = True),
Column('name', types.String),
Column('domain', types.String),
Column('alias', postgresql.ARRAY(types.String)),
UniqueConstraint('domain', 'alias', name = 'domains')
)
次に説明:
wb=# \d+ client
Table "public.client"
Column | Type | Modifiers | Storage | Description
--------+---------------------+-----------------------------------------------------+----------+-------------
id | integer | not null default nextval('client_id_seq'::regclass) | plain |
name | character varying | | extended |
domain | character varying | not null | extended |
alias | character varying[] | | extended |
Indexes:
"client_pkey" PRIMARY KEY, btree (id)
"domains" UNIQUE CONSTRAINT, btree (domain, alias)
そして選択します(テスト挿入後):
wb=# select * from client;
id | name | domain | alias
----+-------+---------------+--------------------------
1 | test1 | www.test.com | {www.test1.com,test.com}
2 | test2 | www.test1.com |
3 | test3 | www.test.com |
前もって感謝します。