在PostgreSQL中创建表


70

我不明白此查询出了什么问题?查询工具不想在PostgreSQL中创建表。

CREATE TABLE article (
article_id bigint(20) NOT NULL auto_increment,
article_name varchar(20) NOT NULL,
article_desc text NOT NULL,
date_added datetime default NULL,
PRIMARY KEY (article_id)
);

错误:“(”或附近的语法错误SQL状态:42601字符:41

1
我也收到错误:“(”或附近的语法错误:第2行:article_id bigint(20)NOT NULL auto_increment,
mmmmmm 2012年

Answers:


135

首先,bigint(20) not null auto_increment将无法使用,只需使用即可bigserial primary key。然后datetimetimestamp在PostgreSQL中。总而言之:

CREATE TABLE article (
    article_id bigserial primary key,
    article_name varchar(20) NOT NULL,
    article_desc text NOT NULL,
    date_added timestamp default NULL
);

4
关于为什么,auto_increment是MySQL功能。Postgres将serial列用于相同目的。
布拉德·科赫

4
@BradKoch:是和否。PostgreSQL提供serialbigserial。由于Q中包含了bigint(20)我选择bigserial的答案。在这种情况下,这是一个更好的匹配。
2013年

2
给定OP作为博客文章引擎的明显用例,除非他非常多产,否则最大序列大小为20亿个条目(序列)应该足够。;)但是,bigserial仍然与bigint更为匹配。
fatal_error

7
-- Table: "user"

-- DROP TABLE "user";

CREATE TABLE "user"
(
  id bigserial NOT NULL,
  name text NOT NULL,
  email character varying(20) NOT NULL,
  password text NOT NULL,
  CONSTRAINT user_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "user"
  OWNER TO postgres;

3

更换bigint(20) not null auto_incrementbigserial not null并且 datetime通过timestamp


9
然后创建表将成功。
sega_sai 2012年

-4

请尝试以下方法:

CREATE TABLE article (
  article_id bigint(20) NOT NULL serial,
  article_name varchar(20) NOT NULL,
  article_desc text NOT NULL,
  date_added datetime default NULL,
  PRIMARY KEY (article_id)
);

bigint(20) 在Postgres中无效。另外,您不能同时指定bigint serial。有关正确的语法,请参见接受的答案
a_horse_with_no_name
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.