Hoe dblink gebruiken (installeren) in PostgreSQL?

Ik ben gewend aan Oracle en om een ​​dblink in mijn schema te maken en vervolgens toegang te krijgen tot een externe database zoals deze: mytable@myremotedb, is er hoe dan ook hetzelfde te doen met PostgreSQL?

Op dit moment gebruik ik dblink als volgt:

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

Als ik deze opdracht uitvoer, krijg ik de volgende foutmelding:

HINT: Geen enkele functie komt overeen met de opgegeven naam en argumenttypes. Mogelijk moet u expliciete typecasts toevoegen.

Heeft iemand een idee? Moeten we dblinks “activeren” of iets doen voordat we ze gebruiken?

Is er iets te doen aan de externe database die we gaan opvragen? Moeten we dblink ook activeren? Ik krijg steeds een could not establish connection. Dit is de regel is type:

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

IP-adres is correct en Postgres draait op de externe server. Enig idee?


Antwoord 1, autoriteit 100%

Sinds PostgreSQL 9.1is de installatie van extra modules eenvoudig. Geregistreerde extensies zoals dblinkkunnen worden geïnstalleerd met CREATE EXTENSION:

CREATE EXTENSION dblink;

Installeert in uw standaardschema, dat standaard publicis. Zorg ervoor dat uw search_pathcorrect is ingesteld voordat u de opdracht uitvoert. Het schema moet zichtbaar zijn voor alle rollen die ermee moeten werken. Zie:

U kunt ook naar elk schema van uw keuze installeren met:

CREATE EXTENSION dblink SCHEMA extensions;

Zie:

Eenmaal uitvoeren per database. Of voer het uit in de standaard systeemdatabase template1om het automatisch toe te voegen aan elkenieuw aangemaakte database. Details in de handleiding.

U moet eerst de bestanden van de module op de server hebben geïnstalleerd. Voor Debian en derivaten is dit het pakket postgresql-contrib-9.1– voor PostgreSQL 9.1, duidelijk. Sinds Postgres 10 is er slechts een postgresql-contribmetapakket.


Antwoord 2, autoriteit 22%

Ik gebruik DBLINK om een ​​interne database te verbinden voor query’s op meerdere databases.

Referentie overgenomen uit dit artikel.

Installeer de DbLink-extensie.

CREATE EXTENSION dblink;

Verifieer 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 verbinding met database:

SELECT dblink_connect('host=localhost user=postgres password=enjoy dbname=postgres');

Antwoord 3, autoriteit 9%

Zoek op linux dblink.sql en voer in de postgresql-console zoiets als dit uit om alle vereiste functies te creëren:

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

mogelijk moet u de contrib-pakketten installeren: sudo apt-get install postgresql-contrib


Antwoord 4, autoriteit 3%

Voor het installeren van modules moet u meestal een sql-script uitvoeren dat bij de database-installatie wordt geleverd.

Uitgaande van een Linux-achtig besturingssysteem

find / -name dblink.sql

Verifieer de locatie en voer deze uit


Antwoord 5, autoriteit 2%

Het kan worden toegevoegd met:

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

Antwoord 6

# 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\";'"

Other episodes