Temos um sistema baseado em PostgreSQL que está instalado em 20 clientes.
Às vezes eu executo uma consulta SQL em todos os sistemas. Até agora eu faço isso com a ferramenta de linha de comando parallel
assim:
parallel -q -j0 ssh {} "echo {}; psql -tAc \"select count(*) from auth_user\";echo" ::: $(ssh j list-systems prod)
Estou perdendo a capacidade de classificar a saída. Eu gostaria de evitar scripts de shell sujos e usar a sabedoria do SQL.
Como obter as consultas N SQL no PostgreSQL, para que eu possa executar o SQL comum nele?
(Sub pergunta: Existe uma tag correspondente para esse tipo de pergunta? Quero dizer, perguntas em que o SQL abrange vários bancos de dados?)
Se você precisar fazer isso com muita frequência e puder se conectar a todos esses servidores diretamente, eu configuraria uma instância do Postgres que atua como uma visão "unificada" em todos os outros servidores.
Para fazer isso, crie um novo banco de dados Postgres (ou servidor) e instale a extensão postgres_fdw .
Em seguida, crie um servidor externo para cada banco de dados que você deseja examinar.
Em seguida, crie uma tabela (vazia) em seu novo banco de dados, que se pareça exatamente com a tabela correspondente nos outros servidores, por exemplo
Então, para cada servidor, crie uma tabela estrangeira, por exemplo:
Provavelmente é uma boa ideia incluir a opção
updatable 'false'
ao definir a tabela externa para evitar atualizações acidentais do servidor de integração para os servidores remotos.As etapas acima podem ser roteirizadas, se necessário.
Depois que todas as tabelas estiverem definidas, você pode fazer um simples:
no seu servidor de "integração" e o Postgres consultará automaticamente todas as tabelas remotas.