Configurando MONGO_FDW no Postgres pela primeira vez.
A primeira etapa é adicionar a extensão após conectar-se como postgres
usuário padrão:
CREATE EXTENSION mongo_fdw;
O usuário do aplicativo é app_user
, então concedo isso:
GRANT CREATE SERVER TO app_user;
Eu então conecto como app_user
e emito:
CREATE SERVER "app_rem_db"
FOREIGN DATA WRAPPER mongo_fdw
OPTIONS (
address 'localhost',
port '27017'
);
Mas recebo o erro:
ERROR: foreign-data wrapper "mongo_fdw" does not exist
Se, no entanto, eu executar CREATE SERVER
como postgres
funciona.
Como posso permitir que outros usuários criem o servidor?
Continuando com o postgres
usuário, em seguida crio o MAPEAMENTO DE USUÁRIO:
CREATE USER MAPPING FOR app_user
SERVER "app_rem_db"
OPTIONS (username 'app_user_pg', password 'hello123');
Se eu me conectar novamente app_user
e tentar criar uma tabela estrangeira, recebo (o mongoDB possui um banco de dados mongo_test
e uma coleção testcol
):
CREATE FOREIGN TABLE mongo_testtab
(
data JSON
)
SERVER "app_rem_db"
OPTIONS (database 'mongo_test', collection 'testcol');
Novamente recebo um erro:
ERROR: server "app_rem_db" does not exist
Se eu voltar para postgres
o usuário, posso criar a tabela externa.
Mas então, quando tento consultar a tabela, recebo:
select * from mongo_testtab;
ERROR: relation "mongo_testtab" does not exist
LINE 1: select * from mongo_testtab;
A extensão deve ser criada como superusuário, não há como evitar isso. Ao criar a extensão, certifique-se de conectar-se ao banco de dados correto (não ao
postgres
).Depois, há duas opções:
Você concede o
app_user
privilégioUSAGE
no FDW:Então você pode criar o servidor externo como arquivo
app_user
.vantagem: você precisa de menos ações como superusuário
desvantagem: você modifica um objeto que pertence à extensão, que será perdido durante o despejo/restauração
Você cria o servidor externo como superusuário e concede
app_user
oUSAGE
privilégio no servidor externo:vantagem: você não modifica objetos de extensão
desvantagem: mais trabalhos a serem realizados como superusuário