Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use (install) dblink in PostgreSQL?

I am used to Oracle and to create a dblink in my schema and then access to a remote database like this: mytable@myremotedb, is there anyway do to the same with PostgreSQL?

Right now I am using dblink like this:

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

When I execute this command I get the following error:

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

Does anybody have an idea ? Do we have to "activate" dblinks or do something before using them?

Is there something to do on the remote database we are going to query? Do we have to activate dblink too? I keep having a could not establish connection. This is the line is type:

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

IP Address is correct and Postgres is running on the remote server. Any idea?

like image 424
Spredzy Avatar asked Oct 05 '10 10:10

Spredzy


People also ask

How does dblink work in PostgreSQL?

Description. dblink executes a query (usually a SELECT , but it can be any SQL statement that returns rows) in a remote database. When two text arguments are given, the first one is first looked up as a persistent connection's name; if found, the command is executed on that connection.

How do you use dblink in pgAdmin?

This is the line is type: SELECT dblink_connect_u('host=x.x.x.x dbname=mydb user=root port=5432'); IP Address is correct and Postgres is running on the remote server.

Does PostgreSQL support dblink?

dblink is a module that supports connections to other PostgreSQL databases from within a database session.

How do I check Postgres dblink?

You can get all open dblink connections using dblink_get_connections() . Those that are not used can only be found by examining your function code like Erwin suggests.


2 Answers

Since PostgreSQL 9.1, installation of additional modules is simple. Registered extensions like dblink can be installed with CREATE EXTENSION:

CREATE EXTENSION dblink; 

Installs into your default schema, which is public by default. Make sure your search_path is set properly before you run the command. The schema must be visible to all roles who have to work with it. See:

  • How does the search_path influence identifier resolution and the "current schema"

Alternatively, you can install to any schema of your choice with:

CREATE EXTENSION dblink SCHEMA extensions; 

See:

  • Best way to install hstore on multiple schemas in a Postgres database?

Run once per database. Or run it in the standard system database template1 to add it to every newly created DB automatically. Details in the manual.

You need to have the files providing the module installed on the server first. For Debian and derivatives this would be the package postgresql-contrib-9.1 - for PostgreSQL 9.1, obviously. Since Postgres 10, there is just a postgresql-contrib metapackage.

like image 98
Erwin Brandstetter Avatar answered Sep 18 '22 18:09

Erwin Brandstetter


I am using DBLINK to connect internal database for cross database queries.

Reference taken from this article.

Install DbLink extension.

CREATE EXTENSION dblink; 

Verify DbLink:

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

Test connection of database:

SELECT dblink_connect('host=localhost user=postgres password=enjoy dbname=postgres'); 
like image 33
Anvesh Avatar answered Sep 21 '22 18:09

Anvesh