Найти строку внутри столбца массива в PostgreSQL

Я построил серию представлений в базе данных PostgreSQL, которая включает в себя пару столбцов массива. Определение вида следующее:

create view articles_view as 
  (select articles.*,
   array(select row(people.*)::people 
     from people 
     where articles.spubid=people.spubid and 
       people.stype='Author' and 
       bactive='t' 
     order by people.iorder) as authors,
   array(select row(people.*)::people 
     from people 
     where articles.spubid=people.spubid and 
       people.stype='Editor' and 
       bactive='t' 
     order by people.iorder) as editors,
   array(select row(people.*)::people 
     from people 
     where articles.spubid=people.spubid and 
       people.stype='Reviewer' and 
       bactive='t'
     order by people.iorder) as reviewers,
   array(select row(status.*)::status 
     from status 
     where articles.spubid=status.spubid and 
       bactive='t') as status
  from articles 
  where articles.bactive='t');

По сути, я хочу сделать iLike на колонке 'author', чтобы определить, существует ли определенный идентификатор пользователя в этом массиве. Очевидно, что я не могу использовать iLike на этом типе данных, поэтому мне нужно найти другой подход.

Вот пример данных в массиве 'authors':

{"(2373,t,f,f,\"2011-08-01 11:57:40.696496\",/Pubs/pubs_edit_article.php,\"2011-08-09 15:36:29.281833\",000128343,A00592,Author,1,Nicholas,K.,Kreidberg,\"\",123456789,t,Admin,A,A,A,0,\"\")","(2374,t,f,f,\"2011-08-01 11:57:40.706617\",/Pubs/pubs_edit_article.php,\"2011-08-09 15:36:29.285428\",000128343,A00592,Author,2,John,D.,Doe,\"\",234567890,t,IT,A,A,A,0,\"\")","(2381,t,f,f,\"2011-08-09 14:45:14.870418\",000128343,\"2011-08-09 15:36:29.28854\",000128343,A00592,Author,3,Jane,E,Doe,\"\",345678901,t,Admin,A,A,A,,\"\")","(2383,t,f,f,\"2011-08-09 15:35:11.845283\",567890123,\"2011-08-09 15:36:29.291388\",000128343,A00592,Автор,4,Test,T,Testerton,\"\",TestTesterton,f,N/A,A,A,A,A,\"\")"}

Я хочу, чтобы мне удалось сделать запрос вида и выяснить, существует ли в массиве строка '123456789' (т.е. идентификатор пользователя, присвоенный Николаю Крейдбергу в массиве). Меня не волнует, какому пользователю он назначен и где он появляется в массиве, все, что мне нужно знать, так это появится ли где-нибудь в массиве '123456789'.

Как только я узнаю, как записать запрос, определяющий, что условие, приведенное выше, верно, мое приложение просто выполнит этот запрос, и если строки будут возвращены, то оно будет знать, что идентификатор пользователя, переданный на запрос, является автором для этой публикации, и будет действовать соответственно.

Заранее спасибо за любое понимание, которое может быть предоставлено по этой теме.

11
задан Nicholas Kreidberg 3 September 2011 в 00:28
поделиться