Как создать представление в PostgreSQL, содержащее ARRAY? - PullRequest
0 голосов
/ 04 октября 2019

У меня проблема, я сейчас работаю с базой данных Postgres и хочу создать представление из двух таблиц. Проблема в том, что в одной из таблиц есть столбец типа «varchar ARRAY». Этот столбец содержит какой-то идентификатор, который я могу использовать для получения информации из второй таблицы.

У меня есть следующее:

Таблица 1: Персона

  • primary_name: varchar
  • known_for_titles: varchar ARRAY (массив t_const) Таблица 2:

Таблица 2: Фильм

  • t_const: varchar
  • primary_title: varchar

Я хочу создать представление (actorView), которое выглядит следующим образом: -primary_name: varchar -famous_for: varchar ARRAY (массив заголовков)

У меня есть это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, он просто завершает поиск в бесконечном цикле, и я должен завершить запрос.

То же самое происходит, когда я использую весь оператор. Каким-то образом удается создать таблицу, но я ничего не могу найти.

1 Ответ

1 голос
/ 04 октября 2019

Я внес следующие изменения в ваш код:

  • Изменил имена таблиц на строчные,
  • сделал t_const первичным ключом, чтобы разрешить ввод данных в pgAdmin
  • добавил идентификатор bigint в качестве первичного ключа для личности.

Кроме того, мне пришлось изменить название заголовка на фильм, чтобы подтвердить имена таблиц. (Вероятно, ваши описания таблиц в публикации не были точными :-()

Затем фраза

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

успешно выполняется для меня.

Единственная существенная разница междуВаше и мое решение - это первичные ключи - остальные, я полагаю, были просто опечатками в вашем сообщении. Я не знаю, имеют ли эти ПК значение, но в любом случае их не повредит.

...