Table Constraint CHECK(SELECT()) alternative?

Поиск
Список
Период
Сортировка
От Robert D. Kennedy
Тема Table Constraint CHECK(SELECT()) alternative?
Дата
Msg-id 4319F05A.30300@fnal.gov
обсуждение исходный текст
Ответы Re: Table Constraint CHECK(SELECT()) alternative?  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
Re: Table Constraint CHECK(SELECT()) alternative?  ("Dinesh Pandey" <dpandey@secf.com>)
Список pgsql-sql
Hello,
I have seen in another thread that sub-queries in a CHECK constraint have implementation ramifications that make them
awkwardto implement and support. OK, fair enough, c'est la vie.
 

ERROR:  cannot use subquery in check constraint

is the result. I have a model which seems to BEG for just such a feature though. What alternatives are there to the use
ofCHECK(SELECT()) in this model?
 
I am implementing a basic tree of nodes. There are leafs and directories... node types. Each node in a directory has a
uniquename, and the node type ids point to a table with node type names. Each node points to a valid node (its parent).
Thereis more... but now to my question. I wish to constrain parent nodes to only be directories type nodes. Leafs
cannotbe parents.
 
                                       Table "public.raw_pnfs_nodes"    Column     |         Type          |
                 Modifiers
 
----------------+-----------------------+---------------------------------------------------------------------node_id
    | integer               | not null default nextval('public.raw_pnfs_nodes_node_id_seq'::text)parent_node_id |
integer              | not nullnode_name      | character varying(80) | not nullnode_type_id   | smallint
|not null
 
Indexes:   "raw_pnfs_nodes_pkey" primary key, btree (node_id)   "raw_pnfs_nodes_node_name_key" unique, btree
(node_name,parent_node_id)
 
Foreign-key constraints:   "parent_refersto_node" FOREIGN KEY (parent_node_id) REFERENCES raw_pnfs_nodes(node_id) ON
UPDATERESTRICT ON DELETE RESTRICT   "raw_pnfs_nodes" FOREIGN KEY (node_type_id) REFERENCES node_types(node_type_id) ON
UPDATERESTRICT ON DELETE RESTRICT
 


What I WANT to write is the table constraint:
 CONSTRAINT parents_are_dirs_check CHECK( (SELECT A.node_type_id FROM raw_pnfs_nodes A, raw_pnfs_nodes B WHERE
A.node_id= B.parent_node_id) = 1)
 

where "1" is the id for directory node types (ok, this is not polished yet) Hopefully this illustrates the idea. The
nodetype of a node that is a parent to another node must be the directory node type. Is there another way to express
thisin SQL? I would like to avoid putting this into the business logic layer.
 

Thanks much,
RDK





В списке pgsql-sql по дате отправления:

Предыдущее
От: "DownLoad X"
Дата:
Сообщение: Searching for results with an unknown amount of data
Следующее
От: Joÿffffffffffe3o Carvalho
Дата:
Сообщение: SQL queries