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?

Neste momento, estou a usar o dblink assim.
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:

dica: nenhuma função corresponde ao nome e aos tipos de argumentos indicados. Você pode precisar adicionar moldes de tipo explícitos.

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:

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?

Author: Erwin Brandstetter, 2010-10-05

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ão template1 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.

 89
Author: Erwin Brandstetter, 2018-04-22 11:23:02

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');
 13
Author: Anvesh, 2016-03-30 04:57:48

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

 10
Author: evgeni, 2011-03-03 02:16:17

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 linux
find / -name dblink.sql

Verifique a localização e execute-a

 4
Author: Unreason, 2010-10-05 10:20:55

Pode ser adicionado utilizando:

$psql -d databaseName -c "CREATE EXTENSION dblink"
 1
Author: angelous, 2014-10-09 13:11:38
# 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\";'"
 0
Author: Yordan Georgiev, 2017-07-28 15:14:42