CREATE TABLE with foreign key and primary key

From: "Paulo Roberto Siqueira" <paulo(dot)siqueira(at)usa(dot)net>
To: "PGSQL SQL" <pgsql-sql(at)postgresql(dot)org>
Subject: CREATE TABLE with foreign key and primary key
Date: 2000-07-10 01:49:14
Message-ID: NEBBLMEAPMNMMCFDDILOGECCCBAA.paulo.siqueira@usa.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

I'm trying to create a table that has three fields as primary key. These
fields must exist in two other tables. id_aluno is primary key in table
pessoa, id_curso and id_polo are primary key in table curso_polo. But it
seems it won't work. What am I doing wrong? See definitions below.
Specifically, I didn't understand:
NOTICE: Illegal FOREIGN KEY definition REFERENCES "curso_polo"
ERROR: number of key attributes in referenced table must be equal to
foreign key

I'm using PostgreSQL 7.0

ufgvirtual=# create table matricula (
ufgvirtual(# id_aluno char(15) references pessoa,
ufgvirtual(# id_curso int4 references curso_polo,
ufgvirtual(# id_polo int2 references curso_polo,
ufgvirtual(# local_prova varchar(50) not null,
ufgvirtual(# autorizado bool default 'f' not null,
ufgvirtual(# id_plano_pgto int2 references plano_pgto not null,
ufgvirtual(# data_matricula date default CURRENT_DATE not null,
ufgvirtual(# primary key(id_aluno,id_curso,id_polo));
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index
'matricula_pkey' for table 'matricula'
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY
check(s)
NOTICE: Illegal FOREIGN KEY definition REFERENCES "curso_polo"
ERROR: number of key attributes in referenced table must be equal to
foreign key

Table "pessoa"
Attribute | Type | Modifier
---------------+----------+-------------------------------------------------
login | char(15) | not null
nome | char(50) | not null
.
.
.

Table "curso_polo"
Attribute | Type | Modifier
---------------+----------+----------
id_curso | integer | not null
id_polo | smallint | not null
coordenador | integer | not null
data_limite | date |
id_plano_pgto | smallint |
num_vagas | integer | not null

I have tables pessoa, curso, polo, curso_polo and matricula. Primary key in
curso_polo are id_curso (references curso) and id_polo (references polo). In
table matricula I want as primary key id_pessoa (references pessoa),
id_curso (references curso_polo) and id_polo (references curso_polo).

I hope I have provided enough information. I'm a little confused.

Paulo R. Siqueira

Browse pgsql-sql by date

  From Date Subject
Next Message andrew 2000-07-10 02:48:16 m4 macros plus PostgreSQL anyone?
Previous Message Philip Warner 2000-07-10 01:43:40 Re: [HACKERS] Re: [SQL] MAX() of 0 records.