1

配列列に UNIQUE を設定できるかどうかお尋ねしたいと思います - 配列項目が一意であるかどうかを確認する必要があります。

次に、これに 2 番目の列も含めたいと思います。

必要なものを想像するために、例を含めます。ドメインとエイリアスを含むエントリがあるとします。列domainにはvarcharメイン ドメインが含まれており、空にすることaliasesarrayできます。論理的には、列の何もないだけでなく、正反対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  | 

前もって感謝します。

4

1 に答える 1

1

純粋なPostgresql構文でこれを行う方法を見つけてから、 DDLを使用して正確に発行してください。

于 2013-07-13T18:14:54.040 に答える