53

チェック制約でSQLサブクエリを作成できますか?

列のあるpostテーブルがあります列id, owner
のある別のテーブルがactionあります列のあるuser_id, post_id
テーブルuserid

post_id -> post.idそしてuser_id -> user.idまたpost.owner -> user.id

post(post_id).id != user_id今、私はテーブルに制約したいaction

そんなことがあるものか ?

4

1 に答える 1

86

CHECK制約で現在の行を超えて検索することはサポートされていません。

http://www.postgresql.org/docs/9.1/interactive/sql-createtable.htmlによると:

列制約として指定されたチェック制約は、その列の値のみを参照する必要がありますが、テーブル制約に表示される式は、複数の列を参照できます。

現在、CHECK式にサブクエリを含めることも、現在の行の列以外の変数を参照することもできません。

この制限には十分な理由がありますが、交通量の多い一輪車に乗っているときに燃えるような松明をジャグリングしたい場合は、関数を使用して制限を解除できます。これがあなたを噛むために戻ってこない状況はまれです。代わりに、トリガーコードで不変条件を適用する方がはるかに安全です。

http://www.postgresql.org/docs/9.1/interactive/triggers.html

于 2012-04-16T18:13:04.367 に答える