barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком schema. Показать все сообщения
Показаны сообщения с ярлыком schema. Показать все сообщения

четверг, 22 августа 2013 г.

Oracle + Weblogic connection pool: задание схемы по-умолчанию

Недавно писал про организацию пула соединения с БД в приложении, развертываемом на Weblogic (http://barbitoff.blogspot.ru/2013/07/weblogic-1035-connection-pooling.html). Xml-конфигурация пула позволяет задать все параметры соединения, кроме имени используемой схемы. Хардкодить имя схемы в SQL-запросах не хочется, как и изобретать велосипед с подтягиванием имени схемы из какого-то своего отдельного конфига. Выход - использовать в SQL схему по-умолчанию (т.е. не задавать имя схемы вообще) и воспользоваться таким параметром пула, как "init-sql". В этом параметре нужно указать SQL-запрос, который при инициализации соединения с БД поменяет схему по-умолчанию на необходимую нам. Этот SQL зависит от используемой СУБД, для Oracle он выглядит так:
  <jdbc-connection-pool-params>
    <max-capacity>20</max-capacity>
    <connection-reserve-timeout-seconds>25</connection-reserve-timeout-seconds>
    <test-table-name>SQL SELECT 1 FROM DUAL</test-table-name>
    <init-sql>SQL ALTER SESSION SET CURRENT_SCHEMA = USR</init-sql>  </jdbc-connection-pool-params>

вторник, 20 марта 2012 г.

Поведение PostgreSQL в случае, когда схема объекта явно не задана

Когда схема, к которой принадлежит объект, используемый в запросе (например, таблица), не указана явно, PostgreSQL ищет объекты в различных схемах, имена которых содержатся в т.н. "search path", посмотреть содержимое которого можно командой:
SHOW search_path;
По-умолчанию search path содержит два значения: "$user" и public. Т.е. сначала постгрес ищет объект в схеме, имя которой совпадает с именем текущего пользователя, а затем - в  схеме public.
Установить search path можно командой:
SET search_path TO my_schema;
Теперь постгрес будет искать объекты только в схеме "my_schema" (эта команда повлияет только на запросы текущего соединения с БД). Можно через запятую перечислить несколько схем.