PostgreSQL错误:在"PRIMARY"附近有语法错误。

3

我对PostgreSQL还不熟悉。我一直在尝试在数据库中创建表,但有些查询会出现奇怪的错误。第一个代码片段会抛出语法错误,但当我在有问题的列上添加“serial”时,错误就得到解决了。在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
);
2个回答

4

在PostgreSQL中,是否应该使所有主键自动递增?

不一定。

在第一个语句中,您没有为列指定数据类型。如果您不希望它自动递增,请使用integer:

 songplay_id integer PRIMARY KEY,

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

2

Postgres create table 语法如下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接