Luke Pascoe wrote: > Hi, I have a table that references itself to create a tree-like structure, > eg: > CREATE TABLE tree ( > id SERIAL NOT NULL, > name VARCHAR(255) NOT NULL, > parent INT NULL, > customer IN NOT NULL, > CONSTRAINT parent_key... > CONSTRAINT customer_fk FOREIGN KEY (customer) REFERENCES customer > ); > ALTER TABLE tree ADD CONSTRAINT FOREIGN KEY (parent) REFERENCES tree; > > As you can see tree also references the customer table. > > What I need is a CHECK that will ensuer that any given "tree" row has the > same customer as its parent. > Remember that "parent" can also be NULL. > > Or would this be better done as a trigger?
Good question. I don't think you can do actualy SQL lookups in a CHECK. I think you will need a trigger, either in pl/pgsql or in C using SPI to issue the lookup queries. You can have a CHECK clause that deals with multiple columns: CREATE TABLE friend2 ( firstname CHAR(15), lastname CHAR(20), city CHAR(15), state CHAR(2) CHECK (length(trim(state)) = 2), age INTEGER CHECK (age >= 0), gender CHAR(1) CHECK (gender IN ('M','F')), last_met DATE CHECK (last_met BETWEEN '1950-01-01' AND CURRENT_DATE), CHECK (upper(trim(firstname)) != 'ED' OR upper(trim(lastname)) != 'RIVERS') ); However, that doesn't help you because you can't reference a column in another row of the same table. -- Bruce Momjian | http://candle.pha.pa.us [EMAIL PROTECTED] | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])