PostgreSQL триггеров с интерфейсом LibreOffice Base - PullRequest
1 голос
/ 01 августа 2020

У меня есть следующая триггерная функция и триггер в 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'')

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

select name from viewing.cv_present_status order by name

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

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

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

1 Ответ

1 голос
/ 01 августа 2020

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

...
   and new.name not in (select viewable_item from viewing.sourcing)
...
...