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