2010-10-05 178 views
39

Estoy acostumbrado a Oracle y para crear un dblink en mi esquema y luego acceder a una base de datos remota como esta: [email protected], ¿de todos modos hay lo mismo con PostgreSQL?Cómo usar (instalar) dblink en PostgreSQL?

En este momento estoy usando dblink así:

SELECT logindate FROM dblink('host=dev.toto.com 
           user=toto 
           password=isok 
           dbname=totofamily', 'SELECT logindate FROM loginlog'); 

Cuando ejecuto este comando me sale el siguiente error:

HINT: No function matches the given name and argument types. You might need to add explicit type casts.

¿Alguien tiene una idea? ¿Tenemos que "activar" dblinks o hacer algo antes de usarlos?

¿Hay algo que hacer en la base de datos remota que vamos a consultar? ¿Tenemos que activar también dblink? Sigo teniendo un could not establish connection. Esta es la línea es tipo:

SELECT dblink_connect_u('host=x.x.x.x dbname=mydb user=root port=5432'); 

La dirección IP es correcta y Postgres se está ejecutando en el servidor remoto. ¿Alguna idea?

Respuesta

15
+4

Su primer enlace me ayudó. No sabía que era parte de contrib, así que no sabía que tenía que activarlo. \ i /usr/share/postgresql/8.4/contrib/dblink.sql hizo el truco! Gracias ! – Spredzy

+0

Realmente útil, pero esperemos que los enlaces nunca mueran ... – Alfabravo

4

Montar los módulos por lo general requiere la ejecución de una secuencia de comandos SQL que se incluye con la instalación de bases de datos.

Suponiendo similar a Linux OS

find/-name dblink.sql 

verificar la ubicación y ejecutarlo

10

en Linux, encontrar dblink.sql, a continuación, ejecutar en la consola de PostgreSQL algo como esto para crear todas las funciones necesarias:

\i /usr/share/postgresql/8.4/contrib/dblink.sql 

puede que tenga que instalar los paquetes de contrib: sudo apt-get install postgresql-contrib

+0

Con el paquete 'postgres-contrib-9.3',' dblink.sql' ahora es 'dblink - 1.1.sql'. –

81

Con PostgreSQL 9.1 o posterior, se ha simplificado la instalación de módulos adicionales. Registered extensions (including dblink) se puede instalar con CREATE EXTENSION:

CREATE EXTENSION dblink; 

Se instala en su esquema predeterminado (public por defecto). Asegúrese de que su search_path esté configurado correctamente antes de ejecutar el comando y que el esquema esté visible para todos los usuarios que tengan que trabajar con él.

Como alternativa, se puede instalar en cualquier esquema de su elección con:

CREATE EXTENSION dblink SCHEMA extensions; 

Ver:

Ejecutar una vez por base de datos.O ejecútelo en la base de datos del sistema estándar template1 para agregarlo a cada DB recién creado automáticamente. Details in the manual.

Primero debe tener los archivos que proporcionan el módulo instalado en la máquina local. Para Debian y derivados, este sería el paquete postgresql-contrib-9.1 - para PostgreSQL 9.1, obviamente.

+0

Nada es tan simple con PostgreSQL ... Error "/usr/share/postgresql/9.1/extension/dblink.control": archivo o directorio no encontrado ... ¿Hay un comando simple para arreglarlo? –

+0

... Idem en otro servidor con pg9.3 moderno (en Debian). El mensaje SQL es "ERROR: no se pudo abrir el archivo de control de extensión '/usr/share/postgresql/9.3/extension/dblink.control': No existe ningún archivo o directorio" –

+0

@PeterKrauss: ¿Instaló el paquete contrib como se recomienda? pg 9.3 no está en la versión estable actual (wheezy). Lo obtiene de ** [PostgreSQL Apt Repository] (http://www.postgresql.org/download/linux/debian/) **. –

1

Se pueden añadir mediante el uso de:

$psql -d databaseName -c "CREATE EXTENSION dblink" 
11

estoy usando dblink para conectar base de datos interna para las consultas de bases de datos cruzadas.

Reference taken from this article.

Instalar extensión dblink.

CREATE EXTENSION dblink; 

Compruebe dblink: Conexión

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%'; 

Prueba de base de datos:

SELECT dblink_connect('host=localhost user=postgres password=enjoy dbname=postgres'); 
0
# 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\";'" 
Cuestiones relacionadas