首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgresql约束(字段a>字段b)

postgresql约束(字段a>字段b)
EN

Stack Overflow用户
提问于 2014-03-30 13:38:24
回答 1查看 381关注 0票数 0

我正在对我们的讲师给我们的数据做一份乏味的演讲计划。我使用SQL构建表,而不是(PgAdminIII的)图形用户界面。

我有两个:

代码语言:javascript
复制
12   MAX_ORDER_AMT Curr       8      4    max_order_amt > min_order_amt
13   MIN_ORDER_AMT.Curr       8      4    max_order_amt > min_order_amt
...
...

为了创建它,我使用了部分代码

代码语言:javascript
复制
"Max_Order_Amt" money,
"Min_Order_Amt" money,
...
...

为了添加Max_Order_amt > min_order_amt约束,我必须使用什么?

我尝试使用"max_order_amt > min_order_amt“,但失败了。

非常感谢你的帮助

使用的语言: PostegreSQL

图形用户界面 PgAdminIII

编辑:这是完整的创建表代码

代码语言:javascript
复制
CREATE TABLE oltp.customer
("Customer_ID" character (6) NOT NULL,
"Company_Name" character (40) NOT NULL,
"Contact_Name" character (30) NOT NULL,
"Address" character (60),
"City" character (15),
"Region" character(15),
"Postal_Code" character(10),
"Phone" character(24),
"Fax" character(24),
"Max_Order_Amt" money CHECK (Max_Order_Amt > Min_Order_Amt),
"Min_Order_Amt" money CHECK (Max_Order_Amt > Min_Order_Amt),
"Discount" numeric(2) CHECK (Discount >=0),
"Sales_Region" character(4),
CONSTRAINT customers_pkey PRIMARY KEY ("Customer_ID"))
WITH 
( OIDS = FALSE);
alter table oltp.customer
OWNER to postgres;

代码语言:javascript
复制
ERROR:  column "max_order_amt" does not exist

********** Error **********

ERROR: column "max_order_amt" does not exist
SQL state: 42703

下面是Tastrade

代码语言:javascript
复制
CUSTOMER
(Customer Information)
Beware of updating or deleting instances from this table as other tables refer to this table’s PK
Number of data records:       92      
Fd   Field Name    Type   Width    Dec   Notes
 1   CUSTOMER_ID   Char       6          PK, system generated, not null
 2   COMPANY_NAME  Char      40          not null
 3   CONTACT_NAME  Char      30          not null
 4   CONTACT_TITLE Char      40          
 5   ADDRESS       Char      60          
 6   CITY          Char      15          
 7   REGION        Char      15          
 8   POSTAL_CODE   Char      10          
 9   COUNTRY       Char      15          
10   PHONE         Char      24          
11   FAX           Char      24          
12   MAX_ORDER_AMT Curr       8      4    max_order_amt > min_order_amt
13   MIN_ORDER_AMT.Curr       8      4    max_order_amt > min_order_amt
14   DISCOUNT      Nume       2           discount >= 0
15   SALES_REGION  Char       4          
** Total **                       302   

tastarade模式 Lines中,12-14给出了“不存在”错误。我遵守了8.1手册。它停止在Max_Order_Amt,但当我尝试其他,它给了我同样的错误

再来一次

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-30 13:43:22

在创建表时使用check约束,如

代码语言:javascript
复制
"Max_Order_Amt" money CHECK (Max_Order_Amt > Min_Order_Amt)

请参阅有关Check约束的更多信息,此处为http://www.postgresql.org/docs/8.1/static/ddl-constraints.html

编辑:

删除列名周围的"双引号。试着像下面这样

代码语言:javascript
复制
CREATE TABLE customer
(Customer_ID character (6) NOT NULL,
Company_Name character (40) NOT NULL,
Contact_Name character (30) NOT NULL,
Address character (60),
City character (15),
Region character(15),
Postal_Code character(10),
Phone character(24),
Fax character(24),
Max_Order_Amt money CHECK (Max_Order_Amt > Min_Order_Amt),
Min_Order_Amt money,
Discount numeric(2) CHECK (Discount >=0),
Sales_Region character(4),
 CONSTRAINT customers_pkey PRIMARY KEY (Customer_ID));

参见这里的演示小提琴,http://sqlfiddle.com/#!15/60767

EDIT1:

如果您确实希望将"保留在列名(出于某种原因)上,那么将检查约束设置为如下所示

代码语言:javascript
复制
"Max_Order_Amt" money CHECK ("Max_Order_Amt" > "Min_Order_Amt"),
"Min_Order_Amt" money CHECK ("Max_Order_Amt" > "Min_Order_Amt"),
"Discount" numeric(2) CHECK ("Discount" >=0),
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22744632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档