Задать вопрос

Как правильно написать условие для представления Postgresql?

Здравствуйте, друзья.
СУБД Postgresql 9.3.
Создаю представление с множественным условием
CREATE OR REPLACE VIEW rastitelnos_line_10000 AS 
 SELECT *
   FROM rastitelnos_line
  WHERE (rastitelnos_line.objectkey !~ 'L0071131000') OR (rastitelnos_line.objectkey !~ 'L0071131100') OR (rastitelnos_line.objectkey !~ 'L0071224000') OR (rastitelnos_line.objectkey IS NULL);

ALTER TABLE rastitelnos_line_10000
  OWNER TO alimuradov;
GRANT ALL ON TABLE rastitelnos_line_10000 TO alimuradov;


Если в исходную таблицу добавить запись со значением, указанным в фильтре
WHERE (rastitelnos_line.objectkey !~ 'L0071131000') OR (rastitelnos_line.objectkey !~ 'L0071131100') OR (rastitelnos_line.objectkey !~ 'L0071224000') OR (rastitelnos_line.objectkey IS NULL);

то в представлении эта запись не отображается, если же в фильтре оставить только одно условие, например
WHERE rastitelnos_line.objectkey !~ 'L0071224000' OR rastitelnos_line.objectkey IS NULL;


и внести запись со значением этого условия, то запись в представлении отображается. Полагаю, ошибка в синтаксисе.
  • Вопрос задан
  • 3309 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
lesovsky
@lesovsky
System engineer and PostgreSQL DBA
да, любопытное поведение...
попробуйте сделать так
CREATE OR REPLACE VIEW rastitelnos_line_10000 AS 
 SELECT *
   FROM rastitelnos_line
  WHERE rastitelnos_line.objectkey NOT IN ('L0071131000','L0071131100','L0071224000') OR rastitelnos_line.objectkey IS NULL;
Ответ написан
Комментировать
mgis
@mgis Автор вопроса
Создал условие с тем запросом, что вы написали, теперь в представлении не отображается ни одна запись, более того при просмотре представления из pgadmin, фильтр условия имеет странный вид
WHERE (rastitelnos_line.objectkey::text <> ALL (ARRAY['L0071131000'::character varying, 'L0071131100'::character varying, 'L0071224000'::character varying]::text[])) OR rastitelnos_line.objectkey IS NULL;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы