2012-04-20 14 views
-1

こんにちは私は現在2つのテーブルを持っている通常のメンバーテーブル。postgreSQLプライマリ/外部キーに準拠していません

メンバー表

member_id SERIAL, 
first_name varchar(20) 
last_name varchar(20). 

私は2番目のテーブルに

プランナー

day as varchar 
time as varchar 
activity varchar 
member bigint 

を持っている私は、私はそれを持って、主キー、NOT NULLとユニークな

としてMEMBER_IDを定義しそのメンバーがmember_idのforeginキーであることも設定してください

これでメンバーのID番号だけをプランナに入力できるようにする必要がありますか?

私は現在、member_idが1から4までの4人のメンバーを持っています。 これを試しても、plannerテーブルのデータを挿入することはできません。動作するはずです私に

INSERT INTO planner VALUES ('monday','09:00','Rowing',2); 

が、私は、このエラーが発生します:

DETAIL Key (member)=(2) is not present in the table "members". 

ので、私は任意のヘルプは非常に参考に感謝あなたのすべてになり、現在は困惑しています。

+3

を動作させるためのルールを作成する必要がありましたPostgreSQLの

のこの現在のバージョンでは、私たちの完全な 'CREATE TABLE'文を表示して下さい外部キーの定義が含まれています。 –

+1

'member_id SERIAL'は、あなたのFKが' member bigint'の間に 'integer'型です。これは、Pgがbigintを整数にキャストする方法を知っているので、FK制約の操作に害を与えるべきではありませんが、実際には、同じ基本型、メンバ整数またはmember_idの 'bigserial'を定義する必要があります。 – dbenhur

+1

少なくともあなたが提供した情報に基づいて動作するので、あなたにはわからないことがあります。以下を参照してください:http://pastebin.com/YrdLLG1Q –

答えて

1

外部キーで継承がうまく機能しないため、機能しませんでした。私はそれは代わりに省略テーブル記述の

create rule fake_ref 
as on insert to planner 
where new.member not in (select member_id from members) 
do instead nothing; 
+0

最初から関連するすべてのテーブルの 'CREATE TABLE'ステートメントを表示していればすぐに明らかになりました。 –

関連する問題