2016-06-29 6 views
3

私は、別のテーブルのユーザー名列に外部キー制約を持つ列を持つテーブルのグループを持っています。私は、アクティビティログのようなものから情報を静かに失いたくないので、ON UPDATE CASCADEをテーブル定義に追加しないように指示されました。この1つのインスタンスでは、明示的にカスケードしたいだけです。私はクエリでそれを行う方法の例を見つけることができませんでした。私はそれが何かのように見えると思いますカスケード更新を行う方法は?

UPDATE "MySchema"."MyTable" CASCADE 
SET user_name = "John Smith" 
WHERE user_id = 1 

これは可能ですか?

答えて

3

Postgres(および他のRDBM)では、カスケード更新は排他的に外部キーに適用されます。例:

create table groups (
    group_id int primary key 
); 

create table users (
    user_id int primary key, 
    group_id int references groups on update cascade 
); 

insert into groups values (1); 
insert into users values (1, 1); 
update groups set group_id = 10 where group_id = 1; 

select * from users; 

user_id | group_id 
---------+---------- 
     1 |  10 
(1 row) 

実際、他のオプションは必要ありません。外来キーではない列に対してこれを行う必要があると感じる場合は、モデルが不適切に設計されていることを意味します(normalizedではありません)。

+0

この回答は役に立ちましたが、この方法を既に知っていましたが、他の人がカスケード更新を混乱させるのを混乱させるのに役立ちます。 –

+0

虚偽または誤解を招く情報が含まれていますか? downvotingに値する? – klin

+0

私はそれをupvoted。なぜ誰かがそれを落としたのか分かりません。 –

関連する問題