【问题标题】:postgresql syntax error when creating a table创建表时postgresql语法错误
【发布时间】:2014-03-13 01:43:47
【问题描述】:

大家好,我在创建表格方面需要一些帮助。我有下面的脚本,它创建了几个表。当我尝试运行脚本时,它给了我这个错误:

psql:script.sql:10: ERROR:  syntax error at or near "Group"
LINE 6: CREATE TABLE Group(

谁能告诉我这是怎么回事?

CREATE TABLE Group(
    name        varchar(40) PRIMARY KEY    NOT NULL
);

CREATE TABLE Artist(
    name        varchar(30) PRIMARY KEY    NOT NULL,
        birthplace  varchar(20)                NOT NULL,
        age     int                        NOT NULL   CHECK (age > 0),
        style       varchar(20)                NOT NULL
);

CREATE TABLE Artwork(
    title      varchar(40) PRIMARY KEY     NOT NULL,
        artist     varchar(30)                 NOT NULL   references Artist(name),
        group_name varchar(40)                 NOT NULL   references Group(name),
        year       int                         NOT NULL   CHECK (year > 0),
        type       varchar(30)                 NOT NULL,
        price      money                       NOT NULL,
);

CREATE TABLE Customer(
    cust_id      int PRIMARY KEY   NOT NULL,
    name         varchar(40)       NOT NULL,
        address      varcahr(60)       NOT NULL,
        amount       money             NOT NULL    CHECK(amount > 0),
        like_artist  varchar(30)       NOT NULL    references Artist(name),
        like_group   varchar(40)       NOT NULL    references Group(name)
);

【问题讨论】:

  • 由于参照完整性约束 psql:script.sql:16: ERROR: 关系“艺术家”已经存在 psql:script.sql:25: ERROR: syntax error at或“组”附近 LINE 4: ...varchar(40) NOT NULL references group(name... ^ psql:script.sql:34: ERROR: syntax error at or near "group" LINE 7: ..._group varchar(40) NOT NULL 引用组(名称...
  • Group是SQL中的reserved keyword,需要引用为"Group"
  • 该死,它应该抛出 reserved keyword error 而不是 syntax error

标签: sql postgresql create-table


【解决方案1】:

它有很多问题 这对我有用。在 postgres 中,不是全小写的名称需要双引号。还有你的一些表名是保留字,money不能是>和int,还有一个逗号不合适。

CREATE TABLE "group"( name varchar(40) PRIMARY KEY NOT NULL );

CREATE TABLE artist( name varchar(30) PRIMARY KEY NOT NULL, birthplace varchar(20) NOT NULL, age int NOT NULL CHECK (age > 0), style varchar(20) NOT NULL );

CREATE TABLE artwork( title varchar(40) PRIMARY KEY NOT NULL, artist varchar(30) NOT NULL references artist(name), 
group_name varchar(40) NOT NULL references "group"(name), year int NOT NULL CHECK (year > 0), type varchar(30) NOT NULL, price money NOT NULL );

CREATE TABLE customer( cust_id int PRIMARY KEY NOT NULL, name varchar(40) NOT NULL, address varchar(60) NOT NULL, 
amount money NOT NULL CHECK(amount > cast(0.0 as money)), like_artist varchar(30) NOT NULL references artist(name), like_group varchar(40) NOT NULL references "group"(name) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多