Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在包含数组的PostgreSQL中创建视图?_Postgresql_Database Design_Sql View - Fatal编程技术网

如何在包含数组的PostgreSQL中创建视图?

如何在包含数组的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数

我有一个问题,我目前正在使用Postgres数据库,我想做的是从两个表创建一个视图。
问题是其中一个表包含类型为“varchar ARRAY”的列。
此列包含某种ID,我可以使用它从第二个表中获取信息

我有以下资料:

表1:人


  • 主要名称:varchar
  • 已知的_标题:varchar数组(t_常量数组)

表2:
表2:电影

  • t_const:varchar
  • 主要标题:varchar
我想创建一个如下所示的视图(actorView): -主要名称:varchar -著名的:varchar数组(标题数组)

我有一个SQL不能正常工作,我设法创建了视图,但我不能单独使用select语句,也不能对视图进行查询

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的主键
此外,我还必须将名称标题更改为movie,以确认您的表名。(可能您在帖子中的表格描述不准确:-()

然后,这个短语

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细节。