PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen Sie in PostgreSQL eine Tabelle mit zwei Typen

Sie können prod_id nicht erstellen der Primärschlüssel von table1 weil die einzigen Spalten die beiden zusammengesetzten Typen info sind und movie . Sie können nicht auf die Basistypen dieser zusammengesetzten Typen in einem PRIMARY KEY zugreifen Klausel.

Was Sie versucht haben, funktioniert mit einer pk-Einschränkung für info oder movie .
Außer, dass es wahrscheinlich nicht das ist, wonach Sie gesucht haben, was auf diese Weise nicht möglich ist.

Sie könnten so etwas wie implementieren dies mit ...

Vererbung

Hier können Sie von mehreren übergeordneten Tabellen erben (Ersatz für Ihre Typen). Beispiel:

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 demonstriert beides.

Lesen Sie unbedingt im Handbuch über die Einschränkungen der Vererbung nach.