Триггеры PostgreSQL с интерфейсом LibreOffice Base

У меня есть следующая триггерная функция и триггер в PostgreSQL 12.1:

create or replace function constraint_for_present()
returns trigger
as $$
BEGIN
if
    new.present_status = 'viewing'
    and new.name not in (select viewable_item from sourcing)
then raise exception 'a present_status of "viewing" requires that the viewable item is in sourcing';
end if;
return new;
END;
$$ language plpgsql;

create trigger constraint_for_present
    before insert or update of present_status on viewable_item
    for each row
    execute function constraint_for_present();

Они работают должным образом при вводе данных в клиентах psql и TablePlus. Однако функция выдает ошибку при доступе к базе данных через LibreOffice Base:

pq_driver: [PGRES_FATAL_ERROR]ERROR:  relation "sourcing" does not exist  
LINE 2:   and new.name not in (select viewable_item from sourcing)  
    
QUERY:  SELECT new.present_status = 'viewing'  
    and new.name not in (select viewable_item from sourcing)  
CONTEXT:  PL/pgSQL function viewing.constraint_for_present() line 3 at IF  
(caused by statement 'UPDATE "viewing"."viewable_item" SET "present_status" = 'none' WHERE "name" = 'test4'')

В базе у меня есть простая форма, настроенная для таблицы триггера, в которой каждый столбец внешнего ключа установлен в поле списка, а тип содержимого списка установлен на Sql (также пробовал Sql [Native]). Содержимое списка каждого из них (с соответствующей таблицей и столбцами первичного ключа):

select name from viewing.cv_present_status order by name

(Эта база данных пока использует естественные ключи по организационным политическим причинам.) В поле Bound установлено значение 0, которое является отображаемым столбцом первичного ключа.

Итак... 2 вопроса:

  1. Почему эта проблема возникает только в Base и как ее исправить (или, по крайней мере, лучше устранить неполадки)?
  2. Поскольку поле Bound, по-видимому, принимает только одно целое число, означает ли это, что вы не можете использовать списки для таблиц с многостолбцовыми первичными ключами, по крайней мере, если отображается один столбец?

person libcub    schedule 01.08.2020    source источник


Ответы (1)


В функции триггера вы можете полностью квалифицировать таблицу

...
   and new.name not in (select viewable_item from viewing.sourcing)
...
person JGH    schedule 01.08.2020