我想问是否可以在数组列上设置 UNIQUE - 我需要检查数组项是否是唯一的。
其次,我还希望在其中包含第二列。
为了想象我需要什么,我包括了示例:想象一下,您有带有域和别名的条目。列domain
中varchar
有主域,可以为空aliases
。array
合乎逻辑的是,列中的任何内容domain
都不能aliases
正好相反。
如果有任何选择如何做到这一点,我会很高兴展示如何做到这一点。最好的办法是在 sqlalchemy(表声明,在 TurboGears 中使用)中包含如何做的帮助。
- PostgreSQL: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 |
提前致谢。