【问题标题】:create table in postgreSQL在 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,

标签: postgresql create-table


【解决方案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 提供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。请参阅接受的答案以了解正确的语法
    猜你喜欢
    • 2015-09-28
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多