Вывести список всех сторонних серверов во всех базах данных на текущем сервере с помощью запроса PL / pg sql dynamici c - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь перечислить ВСЕХ Внешних Серверов во ВСЕХ базах данных на сервере.

С информационной схемой я могу перечислить все базы данных, но я не нашел информационную схему, которая перечисляет все FS. Тот, который существует, просто списки для текущей базы данных.

Я могу сделать это ТОЛЬКО из PL / pg sql. Поэтому я думал о создании динамического c запроса, но, похоже, я не могу переключать контекст БД в запросах.

В T SQL, просто.

Разве это невозможно сделать в PostgreSQL через запрос, или я что-то упустил?

И да, я знаю, что могу использовать DB_Link, но тогда мне придется создать ссылку на БД для каждой БД, не приятно.

Ответы [ 2 ]

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

Вот что я придумала на случай, если кто-нибудь найдет это полезным:

do
$$
declare link_arr text[];
declare tmp_arr text[];
declare cmd text;
declare db_arr text[];
declare d text;
begin
db_arr = array(SELECT array_agg(distinct datname) FROM pg_database WHERE datistemplate = false);
foreach d in array db_arr
loop
    if d= 'rdsadmin' then continue; end if;
    cmd = format($cmd$select array_agg((db, link)) from dblink('dbname=%s user=me password=pass', 'select foreign_server_catalog as db, foreign_server_name as link from information_schema.foreign_servers;') as t(db text,link text)$cmd$, d);

    execute cmd into tmp_arr;
    if tmp_arr is null then continue; end if; 

    link_arr = (select array_cat(link_arr, tmp_arr));
end loop;

raise INFO '%', link_arr;

end
$$
0 голосов
/ 11 марта 2020

Таблица каталогов, определяющая сторонние серверы, не является общим каталогом, она существует отдельно в каждой базе данных. Вам нужно будет подключиться к каждой базе данных по очереди, чтобы получить эту информацию. То, как T SQL делает что-то, мало поможет вам в достижении цели в PostgreSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...