Como usar (Instalar) dblink no PostgreSQL?
estou habituada à Oracle e a criar um dblink no meu esquema e depois aceder a uma base de dados remota como esta: mytable@myremotedb
, Existe alguma maneira de fazer o mesmo com o PostgreSQL?
SELECT logindate FROM dblink('host=dev.toto.com
user=toto
password=isok
dbname=totofamily', 'SELECT logindate FROM loginlog');
Quando executo este comando, recebo o seguinte erro:
Alguém tem uma ideia ? Temos de "activar" dblinks ou fazer alguma coisa antes de usá-los? Há alguma coisa a fazer na base de dados remota que vamos interrogar? Também temos de activar o dblink? Continuo a ter um. Esta é a linha é tipo:dica: nenhuma função corresponde ao nome e aos tipos de argumentos indicados. Você pode precisar adicionar moldes de tipo explícitos.
SELECT dblink_connect_u('host=x.x.x.x dbname=mydb user=root port=5432');
o endereço IP está correcto e o Postgres está a correr no servidor remoto. Alguma ideia?
6 answers
Com PostgreSQL 9.1 ou posterior , a instalação de módulos adicionais foi simplificada. as extensões registadas (incluindo dblink) podem ser instaladas com CREATE EXTENSION
:
CREATE EXTENSION dblink;
Instala - se no seu esquema predefinido (public
por omissão). Certifique-se de que search_path
é configurado corretamente antes de executar o comando e o esquema é visível para todos os usuários que têm que trabalhar com ele.
Em alternativa, pode instalar em qualquer esquema à sua escolha com:
CREATE EXTENSION dblink SCHEMA extensions;
Ver:
Execute uma vez por base de dados. Ou executá-lo na base de dados do sistema padrãotemplate1
para adicioná-lo a cada DB recém-criado automaticamente. detalhes no manual.
Você precisa ter os arquivos que fornecem o módulo instalado no servidor primeiro. Para Debian e derivados este seria o pacote postgresql-contrib-9.1 - para o PostgreSQL 9.1, obviamente.
Estou a usar o DBLINK para ligar a base de dados interna às consultas de bases de dados cruzadas.
Referência extraída deste artigo.
Instalar extensão DbLink.
CREATE EXTENSION dblink;
Verificar A Ligação DB:
SELECT pg_namespace.nspname, pg_proc.proname
FROM pg_proc, pg_namespace
WHERE pg_proc.pronamespace=pg_namespace.oid
AND pg_proc.proname LIKE '%dblink%';
Testar a ligação da base de dados:
SELECT dblink_connect('host=localhost user=postgres password=enjoy dbname=postgres');
No linux, encontre o dblink.sql, então execute na consola postgresql algo assim para criar todas as funções necessárias:
\i /usr/share/postgresql/8.4/contrib/dblink.sql
Pode ser necessário instalar os pacotes de contrib: sudo apt-get install postgresql-contrib
A instalação de módulos requer normalmente que execute um programa sql que está incluído na instalação da base de dados.
Assumindo que o OS
é semelhante ao linuxfind / -name dblink.sql
Verifique a localização e execute-a
Pode ser adicionado utilizando:
$psql -d databaseName -c "CREATE EXTENSION dblink"
# or even faster copy paste answer if you have sudo on the host
sudo su - postgres -c "psql template1 -c 'CREATE EXTENSION IF NOT EXISTS \"dblink\";'"