2014-02-13 113 views
2

嘿,大家我需要一些幫助來創建表。我有下面的腳本,它創建了幾個表。當我嘗試運行腳本時,它給了我這個錯誤:創建表時postgresql語法錯誤

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) 
); 
+0

它也給了我這些錯誤,因爲參照完整性約束 PSQL:script.sql:16:ERROR:關於 「藝術家」 已經存在 PSQL:script.sql:25:錯誤:語法錯誤處或附近 「基團」 LINE 4:... VARCHAR(40)NOT NULL引用組(名稱... ^ PSQL:script.sql:34:錯誤:在語法錯誤或近 「基團」 LINE 7 :..._ group varchar(40)NOT NULL references group(name ... – alpal

+2

'Group'' [保留關鍵字](http://www.postgresql.org/docs/7.3/static/sql-keywords-appendix) .html),並且需要引用爲「Group」。 –

回答

10

它有很多問題 這對我有效。在postgres中,不是全部小寫的名字都需要雙引號。還有一些你的表名是保留字,錢不能是>和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)); 
+0

非常感謝你的工作出色! – alpal