Postgres:在数组和varchar列上是唯一的

时间:2013-07-13 14:33:32

标签: postgresql sqlalchemy postgresql-9.2

我想问一下是否可以在数组列上设置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')
)

然后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  | 

提前致谢。

1 个答案:

答案 0 :(得分:1)

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