Existe uma maneira de um usuário não administrador do PostgreSQL descobrir quais bancos de dados ele pode acessar no servidor ao qual está conectado, mais especificamente quais desses bancos de dados possuem uma tabela com um nome específico que o usuário tem permissões suficientes para ver (e possivelmente consulta)?
Tanto quanto eu posso dizer, o equivalente do MySQL seria algo como:
SELECT t.TABLE_SCHEMA FROM information_schema.`TABLES` AS t
WHERE t.TABLE_NAME = 'the_table_name'
(Isso seria preferencialmente para PostgreSQL 8.4, mas também estou interessado em soluções para 9.1 se isso mudou.)
Não em uma única consulta. A
information_schema.tables
exibição e apg_catalog.pg_class
tabela são por banco de dados. Você não pode consultar tabelas em vários bancos de dados no PostgreSQL sem hacks como o DBLink.Um banco de dados PostgreSQL é um pouco mais como um servidor MySQL independente, e um esquema PostgreSQL é mais como um banco de dados MySQL. Se você deseja consultar vários namespaces no PostgreSQL, crie todos eles como esquemas em um banco de dados, em vez de vários bancos de dados.
Para listar tabelas em todos os bancos de dados deve-se conectar a cada banco de dados de interesse. Você pode listá-los de
select * from pg_catalog.pg_database where datistemplate = 'f';
. Apg_catalog.pg_database
tabela é global em todos os bancos de dados, portanto, os mesmos resultados são obtidos conectando-se a qualquer banco de dados.