Hello,
I am attaching the solution we used.
Thank you for your answers and help,
Roman
====================================================================
--
-- ALTER SUBSCRIPTION REFRESH TEST CASE / SOLUTION
--
-- 9. install extension dblink + create function/procedure [DESTINATION DATABASE]
\c db2 postgres
create extension dblink;
create function test.dblink_record_execute(TEXT, TEXT)
RETURNS SETOF record LANGUAGE c
PARALLEL RESTRICTED STRICT
AS '$libdir/dblink', $$dblink_record$$
;
create procedure test.dblink_refresh_subscription(sSubName VARCHAR, user_pwd text)
SECURITY DEFINER AS
$$
DECLARE
BEGIN
perform test.dblink_record_execute(
pg_catalog.format('user=%L dbname=%L port=%L password=%L', current_user, pg_catalog.current_database(), (SELECT setting FROM pg_catalog.pg_settings WHERE name = 'port'), user_pwd),
pg_catalog.format('ALTER SUBSCRIPTION %I REFRESH PUBLICATION', sSubName)
);
raise notice 'Subscription % refreshed', sSubName;
END $$ LANGUAGE 'plpgsql';
grant execute on function test.dblink_record_execute(text,text) to usr_db_deploy;
grant execute on procedure test.dblink_refresh_subscription(varchar,text) to usr_db_deploy;
-- 10. disable subscription [DESTINATION DATABASE]
\c db2 usr_db_deploy
call test.disable_subscription('test_sub');
-- 11. change: create new table [SOURCE DATABASE]
\c db1 usr_db_deploy
create table test.tab3 (id int primary key, num int);
grant select on table test.tab3 to usr_db_repl;
insert into test.tab3 values (3, 30);
select * from test.tab3;
-- 12. add table into publication [SOURCE DATABASE]
\c db1 usr_db_deploy
alter publication test_pub add table test.tab3;
select * from pg_publication_tables;
-- 13. create new table on destination side [DESTINATION DATABASE]
\c db2 usr_db_deploy
create table test.tab3 (id int primary key, num int);
-- 14. enable subscription [DESTINATION DATABASE]
\c db2 usr_db_deploy
call test.enable_subscription('test_sub');
-- 15. check new table [DESTINATION DATABASE]
-- Note: no rows, we need REFRESH PUBLICATION
\c db2 usr_db_deploy
select * from test.tab3;
-- 16. refresh subscription [DESTINATION DATABASE]
-- Note: run as non-superuser (usr_db_deploy)
\c db2 usr_db_deploy
call test.dblink_refresh_subscription('test_sub','');
====================================================================