Предоставление Flyway через sql миграций - не работает - PullRequest
1 голос
/ 23 марта 2020

значения свойств conf:

flyway.defaultSchema= discussions
flyway.schemas= discussions

выполняется миграция, как показано ниже:

+-----------+---------+------------------------------+--------+---------------------+---------+
| Category  | Version | Description                  | Type   | Installed On        | State   |
+-----------+---------+------------------------------+--------+---------------------+---------+
|           |         | << Flyway Schema Creation >> | SCHEMA | 2020-03-23 15:55:38 | Success |
| Versioned | 1       | INITIAL SETUP                | SQL    | 2020-03-23 15:55:38 | Success |
| Versioned | 2       | R INITIAL SETUP              | SQL    |                     | Pending |
| Versioned | 3       | R1 INITIAL SETUP             | SQL    |                     | Pending |
| Versioned | 4       | CREATE TABLE TEMPLATE        | SQL    |                     | Pending |

При первоначальной настройке будет создано табличное пространство

create tablespace tablespace_dts location 'E:\Tablespace\tablespace_dts';

    create tablespace tablespace_mtd location 'E:\Tablespace\tablespace_mtd';

    create tablespace tablespace_ind location 'E:\Tablespace\tablespace_ind';

    create tablespace tablespace_out location 'E:\Tablespace\tablespace_out';

    create tablespace tablespace_temp location 'E:\Tablespace\tablespace_temp';

v2 выполнит следующее

begin

for c  in select 1 where not exists (select 1 from pg_user where  usename = 'app_user' ) loop
    raise notice 'in app_user';
    execute ' create user app_user with password ''adept''';

end loop;       

for c  in select 1 where exists (select 1 from pg_tablespace,pg_user where  spcname = 'tablespace_dts' and usename = 'app_user') loop
    raise notice 'in grant create on tablespace_dts to app_user';
    execute 'grant create on tablespace tablespace_dts to app_user with grant option';

end loop;   

for c  in select 1 where exists (select 1 from pg_tablespace,pg_user where  spcname = 'tablespace_mtd' and usename = 'app_user') loop
    raise notice 'in grant create on tablespace_mtd to app_user';
    execute 'grant create on tablespace tablespace_mtd to app_user with grant option';

end loop;

for c  in select 1 where exists (select 1 from pg_tablespace,pg_user where  spcname = 'tablespace_ind' and usename = 'app_user') loop
    raise notice 'in grant create on tablespace_ind to app_user';
    execute 'grant create on tablespace tablespace_ind to app_user with grant option';

end loop;


for c  in select 1 where exists (select 1 from pg_tablespace,pg_user where  spcname = 'tablespace_out' and usename = 'app_user') loop
    raise notice 'in grant create on tablespace_out to app_user';
    execute 'grant create on tablespace tablespace_out to app_user with grant option';

end loop;


for c  in select 1 where exists (select 1 from pg_tablespace,pg_user where  spcname = 'tablespace_temp' and usename = 'app_user') loop
    raise notice 'in grant create on tablespace_temp to app_user';
    execute 'grant create on tablespace tablespace_temp to app_user with grant option';

end loop;   

обратите внимание, что здесь работы с грантами

v3 будут делать следующее:


grant usage on schema discussions to app_user;

grant select on all tables in schema discussions to app_user;   

grant update on all tables in schema discussions to app_user;

grant insert on all tables in schema discussions to app_user;

grant create on schema discussions to app_user with grant option;

v4 создает таблицу, скажем, webhook_certificate

Поэтому, когда я пытаюсь запросить таблицу webhook_certificate из app_user в обсуждениях схемы. он говорит, что разрешение отклонено, хотя я предоставил в v3.

, если тот же v3 выполняется вручную, он работает и позволяет получить доступ к Discussions.webhook_certificate. Пожалуйста, обратите внимание: v3 помечен как успешный, без сбоев во время перелета. Тогда почему гранты не работают.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 23 марта 2020

Я понял это. Спасибо за вашу поддержку.

V4, т.е. создание таблицы, должно быть выполнено до V3 (сценарий предоставления).

Поскольку предоставление предоставляется для существующих объектов. Таким образом, при каждой миграции мне нужно запускать сценарий предоставления в конце. Для этого я могу использовать afterMigrate - запускается после успешной миграции.

...