我想问一下是否可以在数组列上设置UNIQUE - 我需要检查数组项是否是唯一的。
其次,我希望第二栏也包括在内。
想象一下我需要什么,我包括一个例子:想象一下,你有条目和别名的条目。 domain
列varchar
中包含主域,aliases
为array
,可以为空。合乎逻辑的是,domain
列中的任何内容都不在aliases
以及正好相反。
如果有任何选择如何做,我很乐意展示如何。最好的方法是在sqlalchemy中包含帮助如何执行(表声明,在TurboGears中使用)。
更新
我发现,如何在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')
)
然后desc:
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 |
提前致谢。