PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Crea una tabella di due tipi in PostgreSQL

Non puoi creare prod_id la chiave primaria di table1 perché le uniche colonne sono i due tipi compositi info e movie . Non puoi accedere ai tipi di base di questi tipi compositi in una PRIMARY KEY clausola.

Quello che stavi cercando di fare funziona con un vincolo pk su info o movie .
Tranne che probabilmente non è quello che stavi cercando, il che non è possibile in questo modo.

Potresti implementare qualcosa di come questo con ...

Eredità

Qui puoi ereditare da più tabelle padre (sostituisci i tuoi tipi). Esempio:

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 dimostrando entrambi.

Assicurati di leggere le limitazioni dell'ereditarietà nel manuale.