Я представляю Spring для существующего приложения (hibernate уже был там) и столкнулся с проблемой с собственными SQL-запросами.
Пример запроса:
SELECT ST_MAKEPOINT(cast(longitude as float), cast(latitude as float)) FROM
OUR_TABLE;
OUR_TABLE находится в OUR_SCHEMA,
Когда мы подключаемся к БД для OUR_SCHEMA:
spring.datasource.url: jdbc:postgresql://host:port/db_name?currentSchema=OUR_SCHEMA
запрос не выполняется, потому что функция ST_MAKEPOINT не найдена - функция находится в схеме: PUBLIC.
Когдамы подключаемся к БД без указания схемы, ST_MAKEPOINT найден и работает правильно, хотя имя схемы необходимо добавить к имени таблицы в запросе.
Поскольку речь идет о тысячах таких запросов и всехтаблицы расположены в OUR_SCHEMA, есть ли шанс каким-либо образом указать схему по умолчанию, поэтому все еще были видны функции из схемы PUBLIC?
До сих пор я пробовал следующие свойства Springboot - безуспешно:
spring.jpa.properties.hibernate.default_schema: OUR_SCHEMA
spring.datasource.tomcat.initSQL: ALTER SESSION SET CURRENT_SCHEMA=OUR_SCHEMA
spring.datasource.initSQL: ALTER SESSION SET CURRENT_SCHEMA=OUR_SCHEMA
Кроме того, он работал до переключения на конфигурацию springboot - достаточно указать hibernate.default-schema = OUR_SCHEMA в файле persistence.xml.
Стек:
Пружинная загрузка: 2.0.6
Спящий режим: 5.3.1. Окончательный
postgresql: 42.2.5
postgis: 2.2.1