Как liquibase выбирает схему, если она не указана явно? - PullRequest
0 голосов
/ 20 февраля 2019

Я хотел бы использовать предварительное условие columnExists для своего набора изменений, но указание точной схемы невозможно, так как мы собираемся запустить его в нескольких средах, а имена схем могут отличаться.

Вопрос в том,, будет ли выбранная схема ликвидазой эквивалентна

select sys_context('USERENV', 'CURRENT_SCHEMA') from dual;

Мы говорим об Oracle здесь, если это имеет значение.

1 Ответ

0 голосов
/ 20 февраля 2019

В Oracle существует взаимно-однозначное отношение между пользователем и схемой.

Учетная запись пользователя, которую вы используете для входа в Oracle, является схемой по умолчанию, если вы не изменили ее в сеансе.

Я собирался ответить «просто опустить схему», пока не увидел, что Liquibase требует schemaName для предусловия columnExists (что, на мой взгляд, глупо)

Таквы не можете использовать columnExists, и вам вместо этого понадобится <sqlCheck>:

<preConditions onFail="HALT">
  <sqlCheck expectedResult="1">
    select count(*) 
    from user_tab_columns 
    where column_name = 'SOME_COLUMN' 
      and table_name = 'SOME_TABLE'
  </sqlCheck>
</preConditions>

user_tab_columns содержит столбцы таблиц, которыми владеет текущий пользователь (т.е.создано).

...