1

我想问是否可以在数组列上设置 UNIQUE - 我需要检查数组项是否是唯一的。

其次,我还希望在其中包含第二列。

为了想象我需要什么,我包括了示例:想象一下,您有带有域和别名的条目。列domainvarchar有主域,可以为空aliasesarray合乎逻辑的是,列中的任何内容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  | 

提前致谢。

4

1 回答 1

1

弄清楚如何在纯 Postgresql 语法中执行此操作,然后使用DDL准确地发出它。

于 2013-07-13T18:14:54.040 回答