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: [email protected]
, 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 dblink
kunnen worden geïnstalleerd met CREATE EXTENSION
:
CREATE EXTENSION dblink;
Installeert in uw standaardschema, dat standaard public
is. Zorg ervoor dat uw search_path
correct 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 template1
om 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-contrib
metapakket.
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\";'"