【问题标题】:Basic syntax for CREATE TABLE in PostgreSQLPostgreSQL 中 CREATE TABLE 的基本语法
【发布时间】:2015-11-21 19:40:08
【问题描述】:

我是第一次使用 PostgreSQL。我有这样的声明:

CREATE TABLE IF NOT EXISTS sequences (
  SEQU_NK   SERIAL PRIMARY KEY NOT NULL UNIQUE,
  NOM_SEQU varchar(30) NOT NULL,
  PROCHAIN bigint NOT NULL,
  PRIMARY KEY (SEQU_NK),
  UNIQUE KEY IDX_SEQU_NOM (NOM_SEQU)
)

当我运行它时,我得到:

ERROR:  syntax error at or near "KEY"
LINE 6:   UNIQUE KEY IDX_SEQU_NOM (NOM_SEQU)
                 ^
********** Error **********

ERROR: syntax error at or near "KEY"

【问题讨论】:

标签: sql postgresql ddl postgresql-8.4 unique-key


【解决方案1】:
CREATE TABLE sequences (
  sequ_nk  serial PRIMARY KEY,
  nom_sequ varchar(30) NOT NULL UNIQUE,
  prochain bigint NOT NULL
);

它是 UNIQUE,而不是 UNIQUE KEY
只能有 一个 PRIMARY KEY
PRIMARY KEY 列自动为 UNIQUENOT NULL
Read the manual.
Or, better yet, read the manual for your actual Postgres version 8.4 - 它告诉您 IF NOT EXISTS 尚未在 8.4 版中实现(等待 9.1)。
或者,更好的是,升级到当前版本的 Postgres。 Version 8.4 has reached EOL last year.
另外:不要使用带引号的大写标识符,否则您必须始终引用它们。

【讨论】:

    【解决方案2】:

    试试这样:

    CREATE TABLE IF NOT EXISTS sequences (
      SEQU_NK   SERIAL PRIMARY KEY NOT NULL UNIQUE,
      NOM_SEQU varchar(30) NOT NULL,
      PROCHAIN bigint NOT NULL,
      CONSTRAINT "IDX_SEQU_NOM" UNIQUE (NOM_SEQU)
    ) 
    

    SQLFIDDLE DEMO

    【讨论】:

    • 请解释一下?
    • @xavxav:- 您的查询中有两个问题。 1)您已经定义了两次不正确的主键。 (PRIMARY KEY (SEQU_NK) 不是必需的) 2) 创建 UNIQUE 约束的语法不正确。希望这会有所帮助:)
    • 谢谢拉胡尔..还有一个问题:我们可以像这样在 PostGre 中编写 cmets:“PASSE varchar(40) COLLATE latin1_general_ci NOT NULL COMMENT 'md5'”,
    • @xavxav:它是 Postgres 或 PostgreSQL,但绝不是“postgre”。关于您指定 cmets 的问题:请参阅 the manualthis question
    • @xavxav:请针对您的新问题开始一个新的问题。评论不是地方。
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 2018-06-06
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多