首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Postgres:如何使用组合键?

Postgres:如何使用组合键?
EN

Stack Overflow用户
提问于 2009-08-17 02:36:14
回答 2查看 176.6K关注 0票数 132

我无法理解创建组合键时的语法错误。这可能是一个逻辑错误,因为我已经测试了许多变体。

如何在Postgres中创建组合键?

代码语言:javascript
复制
CREATE TABLE tags
     (
              (question_id, tag_id) NOT NULL,
              question_id INTEGER NOT NULL,
              tag_id SERIAL NOT NULL,
              tag1 VARCHAR(20),
              tag2 VARCHAR(20),
              tag3 VARCHAR(20),
              PRIMARY KEY(question_id, tag_id),
              CONSTRAINT no_duplicate_tag UNIQUE (question_id, tag_id)
     );
    ERROR:  syntax error at or near "("
    LINE 3:               (question_id, tag_id) NOT NULL,
                          ^
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-17 02:59:58

您的复合PRIMARY KEY规范已经做了您想要的事情。省略给出语法错误的那一行,也省略冗余的CONSTRAINT (已经暗示):

代码语言:javascript
复制
 CREATE TABLE tags
      (
               question_id INTEGER NOT NULL,
               tag_id SERIAL NOT NULL,
               tag1 VARCHAR(20),
               tag2 VARCHAR(20),
               tag3 VARCHAR(20),
               PRIMARY KEY(question_id, tag_id)
      );

NOTICE:  CREATE TABLE will create implicit sequence "tags_tag_id_seq" for serial column "tags.tag_id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tags_pkey" for table "tags"
    CREATE TABLE
    pg=> \d tags
                                         Table "public.tags"
       Column    |         Type          |                       Modifiers       
    -------------+-----------------------+-------------------------------------------------------
     question_id | integer               | not null
     tag_id      | integer               | not null default nextval('tags_tag_id_seq'::regclass)
     tag1        | character varying(20) |
     tag2        | character varying(20) |
     tag3        | character varying(20) |
    Indexes:
        "tags_pkey" PRIMARY KEY, btree (question_id, tag_id)
票数 208
EN

Stack Overflow用户

发布于 2009-08-17 09:58:05

您得到的错误在第3行。即它不在

代码语言:javascript
复制
CONSTRAINT no_duplicate_tag UNIQUE (question_id, tag_id)

但早些时候:

代码语言:javascript
复制
CREATE TABLE tags
     (
              (question_id, tag_id) NOT NULL,

正确的表定义就像pilcrow显示的那样。

如果你想在tag1,tag2,tag3 (听起来很可疑)上添加唯一的,那么语法是:

代码语言:javascript
复制
CREATE TABLE tags (
    question_id INTEGER NOT NULL,
    tag_id SERIAL NOT NULL,
    tag1 VARCHAR(20),
    tag2 VARCHAR(20),
    tag3 VARCHAR(20),
    PRIMARY KEY(question_id, tag_id),
    UNIQUE (tag1, tag2, tag3)
);

或者,如果您希望根据自己的意愿为约束命名:

代码语言:javascript
复制
CREATE TABLE tags (
    question_id INTEGER NOT NULL,
    tag_id SERIAL NOT NULL,
    tag1 VARCHAR(20),
    tag2 VARCHAR(20),
    tag3 VARCHAR(20),
    PRIMARY KEY(question_id, tag_id),
    CONSTRAINT some_name UNIQUE (tag1, tag2, tag3)
);
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1285967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档