вызов postgres магазин процедуры в мультитенюсе - PullRequest
0 голосов
/ 09 января 2020

В моей базе данных Postgres есть несколько схем (schema1, schema2).

Я использую liquibase и объявляю процедуру создания в каждой схеме. В моем примере процедуры только команда select name from users;

Psql \df показывает мне функцию в каждой схеме. Кажется, все хорошо

Теперь в java, когда я вызываю свою процедуру с помощью jdbctemplate со схемой schema1, выполнение выполнено, но у меня нет пользователей таблиц. Я не знаю почему, потому что пользователи таблиц существуют в каждой схеме. Я добавил имя схемы в качестве параметра к моей процедуре и установил search_path для имени схемы в начале моей процедуры, и все работает нормально.

Но зачем мне устанавливать search_path в моей процедуре? Моя процедура уже определена для каждой схемы, и я установил имя схемы в вызове jdbctemplate? Почему моя таблица пользователей не найдена, если я не установил search_path?

1 Ответ

0 голосов
/ 09 января 2020

Если вы не хотите устанавливать search_path, вы должны ссылаться на таблицу с ее полным именем. Это schema_name.table_name. Это потому, что search_path по умолчанию равно "$user", public, поэтому в вашем случае (если у вас нет схемы, соответствующей вашему имени пользователя)

select name from users;

разрешается как

select name from public.users;

вместо

select name from schema1.users;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...