【问题标题】:postgresql ERROR: syntax error at or near "PRIMARY"postgresql 错误:“PRIMARY”处或附近的语法错误
【发布时间】:2020-02-28 21:31:10
【问题描述】:

我是 PostgreSQL 新手。我一直在尝试在数据库中创建表,但一些查询给出了奇怪的错误。第一个 sn-p 引发语法错误,但是当我在有问题的列上添加“串行”时,错误得到解决。 PostgreSQL 中的所有主键都应该自动递增吗?

CREATE TABLE songplays(
   songplay_id PRIMARY KEY, --This does not work, it throws syntax error at or near "PRIMARY"
   start_time VARCHAR (50) NOT NULL,
   user_id VARCHAR (50) NOT NULL,
   level VARCHAR (355) UNIQUE NOT NULL,
   song_id VARCHAR (50) NOT NULL NOT NULL,
   artist_id VARCHAR (50) NOT NULL NOT NULL,
   session_id VARCHAR (50) NOT NULL NOT NULL,
   location VARCHAR (50) NOT NULL NOT NULL,
   user_agent VARCHAR (50) NOT NULL NOT NULL
);

这项工作在 songplay_id 上添加了串行约束

CREATE TABLE songplays(
   songplay_id serial PRIMARY KEY,
   start_time VARCHAR (50) NOT NULL,
   user_id VARCHAR (50) NOT NULL,
   level VARCHAR (355) UNIQUE NOT NULL,
   song_id VARCHAR (50) NOT NULL NOT NULL,
   artist_id VARCHAR (50) NOT NULL NOT NULL,
   session_id VARCHAR (50) NOT NULL NOT NULL,
   location VARCHAR (50) NOT NULL NOT NULL,
   user_agent VARCHAR (50) NOT NULL NOT NULL
);

【问题讨论】:

    标签: sql postgresql constraints ddl create-table


    【解决方案1】:

    PostgreSQL 中的所有主键都应该自动递增吗?

    不,不一定。

    在第一个语句中,您没有为列指定数据类型,如果您不希望它是自动增量,只需使用整数:

     songplay_id integer PRIMARY KEY,
    

    请注意,serial 不是“约束”,它是一种数据类型定义,是整数列的快捷方式,从序列中获取其默认值。

    【讨论】:

      【解决方案2】:

      Postgres create table syntax 是:

      CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [
        { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
          | table_constraint
          | LIKE source_table [ like_option ... ] }
          [, ... ]
      ] ) 
      

      每个列定义都以列名开头,后跟数据类型。您的第一条语句中的第一列未能做到这一点:

      songplay_id PRIMARY KEY
      

      如果不使用特殊数据类型SERIAL,还是要提供数据类型,例如:

       songplay_id INTEGER PRIMARY KEY
      

      【讨论】:

        猜你喜欢
        • 2013-09-10
        • 1970-01-01
        • 2020-03-15
        • 2021-01-17
        • 1970-01-01
        • 2016-06-04
        • 2016-11-22
        • 2016-10-30
        • 1970-01-01
        相关资源
        最近更新 更多