0

如何为列创建具有预先指定值的表。

类似的东西enum,但不是enum,因为它适用于 8.3 Postgres,我需要一些适用于 8.1 及更高版本的东西。

例如

CREATE TABLE (
    cars ('bmw', 'audi');
)

而且在向汽车列插入值时,我应该无法插入除 bmw 和 audi 之外的任何其他内容。

4

2 回答 2

2

我认为您正在寻找的是CHECK约束。

create table mydata(
cars char(4)CONSTRAINT limit_cars_to CHECK (cars in ('bmw', 'audi'))
);

insert into mydata values('bmw'); /*this insert works*/
insert into mydata values('xxx');/*this insert fails msg: ERROR: new row for relation "mydata" violates check constraint "limit_cars_to": insert into mydata values('xxx')
*/

我已经用 PostgreSQL 8.3 对此进行了测试(因为那是 SQL Fiddle 上可用的)。可能只适用于 PostgreSQL 8.1。试试看。

资料来源:http ://www.postgresql.org/docs/8.1/static/ddl-constraints.html

于 2013-10-01T08:20:39.483 回答
0

有两种方法可以解决这个问题。

第一种是使用检查约束,Sashikanth 的回答对此进行了描述。如果允许值不变,则应使用此方法。如果它们确实发生了变化,您需要更新在许多组织中可能需要很长时间才能投入生产的约束。

第二种是对另一个列出允许值的表使用外键:

create table cars (
    car varchar(10) primary key
);

create table mydata (
   id serial primary key,
   car varchar(10) references cars
);

如果您希望值发生变化,或者用户需要能够添加值,则应使用此方法。

于 2013-10-01T08:35:08.080 回答