小编典典

在PostgreSQL中创建两种类型的表

sql

我创建了两种类型:

Create  Type info_typ_1 AS (
Prod_id integer, 
category integer);

Create Type movie_typ AS(
title varchar(50),
actor varchar(50),
price float);

我想创建一个包含这两种类型的表。我知道对于由一种类型组成的表,它是:

CREATE TABLE Table1 of type1
(
  primary key(prod_id)
);

对于我上面创建的两种类型,有什么方法可以做到这一点?

我尝试做的(错误的)是创建包含前两个的第三种类型:

Create Type info_ AS (
info info_typ_1,
movie movie_typ);

然后创建表:

CREATE TABLE table1 of info_
(
  primary key(Prod_id)
);

但这是行不通的。我收到此错误:

ERROR:  column "prod_id" named in key does not exist
LINE 3:   primary key(Prod_id)
          ^
********** Error **********

ERROR: column "prod_id" named in key does not exist
SQL state: 42703
Character: 43

阅读 216

收藏
2021-05-05

共1个答案

小编典典

您不能成为prod_id的主键,table1因为唯一的列是两种复合类型infomovie。您不能在PRIMARY KEY子句中访问这些复合类型的基本类型。

您尝试执行的操作在info或上有pk约束movie
除此以外,可能不是您要找的东西,这种方式是不可能的。

你可以实现的东西 这样用…

遗产

在这里,您可以继承多个父表(替代您的类型)。例子:

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;
2021-05-05