PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Crie uma tabela de dois tipos no PostgreSQL


Você não pode fazer prod_id a chave primária de table1 porque as únicas colunas são os dois tipos compostos info e movie . Você não pode acessar os tipos base desses tipos compostos em uma PRIMARY KEY cláusula.

O que você estava tentando fazer funciona com uma restrição pk em info ou movie .
Exceto, provavelmente não é o que você estava procurando, o que não é possível desta forma.

Você poderia implementar algo como isso com...

Herança


Aqui você pode herdar de várias tabelas pai (substituto para seus tipos). Exemplo:
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 demonstrando ambos.

Certifique-se de ler sobre as limitações de herança no manual.