在 postgreSQL 中创建表
Posted
技术标签:
【中文标题】在 postgreSQL 中创建表【英文标题】:create table in postgreSQL 【发布时间】:2012-04-07 06:47:36 【问题描述】:我不明白这个查询有什么问题?查询工具不想在 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 我也得到 ERROR: syntax error at or near "(" LINE 2: article_id bigint(20) NOT NULL auto_increment, 【参考方案1】:首先bigint(20) not null auto_increment
不起作用,只需使用bigserial primary key
。那么datetime
在PostgreSQL 中就是timestamp
。总而言之:
CREATE TABLE article (
article_id bigserial primary key,
article_name varchar(20) NOT NULL,
article_desc text NOT NULL,
date_added timestamp default NULL
);
【讨论】:
为什么,auto_increment
是 mysql 的一个特性。 Postgres 将serial
列用于相同目的。
@BradKoch:是的,也不是。 PostgreSQL 提供serial
和bigserial
。由于 Q 包含bigint(20)
,我在回答中选择了bigserial
。在这种情况下这是一个更好的匹配。
鉴于 OP 作为博客文章引擎的明显用例,除非他非常多产,否则最多 20 亿个条目(串行)就足够了。 ;) 但是,bigserial 仍然更接近 bigint。【参考方案2】:
-- 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_increment
替换为bigserial not null
和
datetime
timestamp
【讨论】:
那么创建表就成功了。【参考方案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
。请参阅接受的答案以了解正确的语法以上是关于在 postgreSQL 中创建表的主要内容,如果未能解决你的问题,请参考以下文章