it-swarm.com.de

Wie installiere ich dblink in PostgreSQL?

Ich bin an Oracle gewöhnt, um in meinem Schema einen Dblink zu erstellen und dann auf eine entfernte Datenbank wie folgt zuzugreifen: [email protected], gibt es sowieso mit PostgreSQL dasselbe?

Im Moment benutze ich dblink so: 

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

Wenn ich diesen Befehl ausführen, erhalte ich die folgende Fehlermeldung:

TIPP: Keine Funktion stimmt mit dem angegebenen Namen und den Argumenttypen überein. Möglicherweise müssen Sie explizite Typumwandlungen hinzufügen.

Hat jemand eine Idee? Müssen wir Dblinks "aktivieren" oder vor der Verwendung etwas tun?

Gibt es etwas zu tun in der entfernten Datenbank, die wir abfragen werden? Müssen wir auch dblink aktivieren? Ich habe immer einen could not establish connection. Dies ist die Zeile Typ:

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

Die IP-Adresse ist korrekt und Postgres läuft auf dem Remote-Server. Irgendeine Idee?

45
Spredzy

Mit PostgreSQL 9.1 oder höher wurde die Installation zusätzlicher Module vereinfacht. Registrierte Erweiterungen (einschließlich dblink) können mit CREATE EXTENSION installiert werden:

CREATE EXTENSION dblink;

Wird in Ihr Standardschema installiert (standardmäßig public). Stellen Sie sicher, dass Ihr search_path richtig eingestellt ist, bevor Sie den Befehl ausführen und das Schema für alle Benutzer sichtbar ist, die damit arbeiten müssen.

Alternativ können Sie ein beliebiges Schema Ihrer Wahl installieren mit:

CREATE EXTENSION dblink SCHEMA extensions;

Sehen:

Führen Sie einmal pro Datenbank aus. Oder führen Sie es in der Standardsystemdatenbank template1 aus, um es automatisch zu jedem neu erstellten DB hinzuzufügen. Details im Handbuch.

Sie müssen zuerst die Dateien, auf denen das Modul installiert ist, auf dem Server installieren. Für Debian und Derivate wäre dies natürlich das Paket postgresql-contrib-9.1 - für PostgreSQL 9.1.

96

Ich verwende DBLINK zum Verbinden der internen Datenbank für datenbankübergreifende Abfragen. 

Referenz aus diesem Artikel.

DbLink-Erweiterung installieren.

CREATE EXTENSION dblink;

DbLink überprüfen:

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

Verbindung der Datenbank testen:

SELECT dblink_connect('Host=localhost user=postgres password=enjoy dbname=postgres');
16
Anvesh

Suchen Sie unter Linux dblink.sql und führen Sie dann in der postgresql-Konsole so etwas aus, um alle erforderlichen Funktionen zu erstellen: 

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

möglicherweise müssen Sie die Contrib-Pakete installieren: Sudo apt-get install postgresql-contrib

11
evgeni

Bei der Installation von Modulen müssen Sie normalerweise ein SQL-Skript ausführen, das in der Datenbankinstallation enthalten ist.

Angenommen ein Linux-ähnliches Betriebssystem

find / -name dblink.sql

Überprüfen Sie den Speicherort und führen Sie ihn aus

4
Unreason

Es kann hinzugefügt werden mit:

$psql -d databaseName -c "CREATE EXTENSION dblink"
2
angelous
# 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
Yordan Georgiev