如何使用预先指定的列值创建表。
类似于enum
,但不是enum
,因为它适用于8.3 Postgres
,我需要使用8.1及更高版本的东西。
例如
CREATE TABLE (
cars ('bmw', 'audi');
)
在将值插入汽车列时,我不能插入除bmw和audi之外的任何其他内容。
答案 0 :(得分: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
答案 1 :(得分:0)
有两种方法可以解决这个问题。
第一种是使用检查约束,Sashikanth的答案描述了它。 如果允许值不变,则应使用此方法。如果它们确实发生了变化,则需要更新约束,在许多组织中,这种约束可能需要很长的流程才能投入生产。
第二种是使用外键到另一个列出允许值的表:
create table cars (
car varchar(10) primary key
);
create table mydata (
id serial primary key,
car varchar(10) references cars
);
如果您希望更改值,或者用户需要能够添加值,则应使用此方法。