如何在包含数组的PostgreSQL中创建视图?
我有一个问题,我目前正在使用Postgres数据库,我想做的是从两个表创建一个视图。 问题是其中一个表包含类型为“varchar ARRAY”的列。 此列包含某种ID,我可以使用它从第二个表中获取信息 我有以下资料: 表1:人如何在包含数组的PostgreSQL中创建视图?,postgresql,database-design,sql-view,Postgresql,Database Design,Sql View,我有一个问题,我目前正在使用Postgres数据库,我想做的是从两个表创建一个视图。 问题是其中一个表包含类型为“varchar ARRAY”的列。 此列包含某种ID,我可以使用它从第二个表中获取信息 我有以下资料: 表1:人 主要名称:varchar 已知的_标题:varchar数组(t_常量数组) 表2: 表2:电影 t_const:varchar 主要标题:varchar 我想创建一个如下所示的视图(actorView): -主要名称:varchar -著名的:varchar数
- 主要名称:varchar
- 已知的_标题:varchar数组(t_常量数组) 表2:
- t_const:varchar
- 主要标题:varchar
CREATE or REPLACE VIEW actorView AS
SELECT p.primary_name,
array_agg(t.primary_title) as famous_titles
FROM person p JOIN title t
ON t.t_const = any(p.known_for_titles)
group by primary_name
当我尝试SQL语句的select部分时,它只是在一个无休止的循环中搜索,我必须终止查询
当我使用整个语句时,也会发生同样的情况。它以某种方式创建了表,但我无法搜索任何内容。我对您的代码进行了以下修改:
- 将表名更改为小写
- 使t_const成为主键,允许在pgAdmin中输入数据
- 添加了一个bigint id作为person的主键
create or replace view actor_view as
SELECT p.primary_name,
array_agg(t.primary_title) as famous_titles
FROM person p JOIN movie t
ON t.t_const = any(p.known_for_titles)
group by primary_name
为我成功运行
你的解决方案和我的解决方案之间唯一的实质性区别是主键——我想,其余的都是你的帖子中的打字错误。我不知道这些PK是否起作用,但拥有它们也没什么坏处。请看@TAM的答案。如果你不将所有内容都用小写字母命名,你可能会在PostgreSQL中遇到问题。请看一些d细节。