在 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_incrementmysql 的一个特性。 Postgres 将serial 列用于相同目的。 @BradKoch:是的,也不是。 PostgreSQL 提供serialbigserial。由于 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 nulldatetimetimestamp

【讨论】:

那么创建表就成功了。【参考方案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 中创建表的主要内容,如果未能解决你的问题,请参考以下文章

在 postgreSQL 中创建表

在 postgres 8.1 中创建表时出错

Spring Boot 不在 Postgres 中创建表

如何在 postgres 中创建表并插入具有动态值的数据

在 PostgreSQL 中创建表时向列添加注释?

在 Postgres 中创建表时将空列设置为带时区的时间戳