PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Créer une table de deux types dans PostgreSQL

Vous ne pouvez pas créer de prod_id la clé primaire de table1 car les seules colonnes sont les deux types composites info et movie . Vous ne pouvez pas accéder aux types de base de ces types composites dans une PRIMARY KEY clause.

Ce que vous essayez de faire fonctionne avec une contrainte pk sur info ou movie .
Sauf que ce n'est probablement pas ce que vous cherchiez, ce qui n'est pas possible de cette façon.

Vous pourriez implémenter quelque chose comme ceci avec ...

Héritage

Ici, vous pouvez hériter de plusieurs tables parentes (se substituer à vos types). Exemple :

CREATE TABLE info (
  prod_id integer
 ,category integer
);

CREATE TABLE movie (
   title text
  ,actor text
  ,price float
);

CREATE  TABLE movie_info (
   PRIMARY KEY(prod_id)             -- now we can use the base column!
)
INHERITS (info, movie);

INSERT INTO movie_info (prod_id, category, title, actor, price)
VALUES (1, 2, 'who donnit?', 'James Dean', '15.90');

SELECT * FROM movie_info;

-> SQLfiddle démontrant les deux.

Assurez-vous de lire les limitations de l'héritage dans le manuel.