У меня есть следующая триггерная функция и триггер в 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 вопроса:
- Почему эта проблема возникает только в Base, и как я могу ее исправить (или, по крайней мере, лучше устранение неполадок)?
- Поскольку связанное поле, кажется, принимает только одно целое число, означает ли это, что вы не можете использовать списки для таблиц с многоколоночными первичными ключами, по крайней мере, если есть один отображаемый столбец?