我是PostgreSQL的新手。我一直在尝试在数据库中创建表,但是一些查询给出了奇怪的错误。第一个代码段引发语法错误,但是当我在有问题的列上添加“序列”约束时,该错误得以解决。 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
);
PostgreSQL中所有主键都应该自动递增吗?
不,不一定。
在第一条语句中,您没有为列指定数据类型,如果您不希望它是自动增量,只需使用整数:
songplay_id integer PRIMARY KEY,
请注意,serial
不是“约束”,它是数据类型定义,它是整数列的快捷方式,该整数列从序列中获取其默认值。
Postgres create table
syntax是:
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