2016-11-18 5 views
0

Die Abfrage, die ausgeführt werden muss, ist wie unten einfach -Wie können Sie eine Aktualisierung für eine Tabelle in einer anderen Datenbank mit Postgres dblink durchführen?

Update employee set is_done=true; 

Die Tabelle, die ich nur in einer anderen Datenbank vorhanden aktualisieren möchten.

Ich habe diese Arten von dblink Abfragen verwendet.

INSERT Into mytable select * from 
dblink('host=10.1.1.1 
user=user 
password=password 
dbname=oat', 'SELECT * from employee') tt(
    user_id integer, 
    is_done boolean 

) on conflict(user_id) do nothing; 

Wie kann ich ein Feld der Mitarbeitertabelle aktualisieren, das sich in einer anderen Datenbank befindet?

Ich möchte auch wissen, ob wir auch in ähnlicher Weise eine löschen erreichen kann tun - löschen Sie eine ganze Zeile für eine gegebene id

Auch was ist, wenn ich einen Join mit der aktuellen Datenbanktabelle zu tun hatte in der Aktualisierungsabfrage?

+0

Eine Fremddatenverpackung lokalen war wäre eine bessere Lösung –

+0

@a_horse_with_no_name Könnten Sie bitte ein Beispiel dank – Tisha

+0

bieten https://www.postgresql.org/docs/current /static/contrib-dblink-exec.html am unteren Beispiel –

Antwort

1
SELECT dblink_connect('host=10.1.1.1 
user=user 
password=password 
dbname=oat'); 

SELECT dblink_exec('Update employee set is_done=true'); 

Und ich empfehle Ihnen FDW auch verwenden, besonders wenn Sie auf 9.6

Update sind

für dblink Sie qry "wrap" und senden Sie es. Daher ist die einzige Möglichkeit, die umschlossene Abfrage zu "verbinden", dynamischer SQL in DO Block. Was sehr hässlich wäre. Concider FOREIGN TABLE zu schaffen - es erlaubt Ihnen, von der lokalen Tabelle leicht

Update zwei

https://www.postgresql.org/docs/current/static/sql-createserver.html https://www.postgresql.org/docs/current/static/sql-createusermapping.html https://www.postgresql.org/docs/current/static/sql-createforeigntable.html

Sie so erstellen Server, Karte Benutzer zu aktualisieren und eine Fremdtabelle erstellen.

nach dem Update abgeschlossen, als ob es

+0

Danke. Ich denke, das würde auch funktionieren. Können Sie auch Ihre Antwort für die letzte Frage in meiner Beschreibung über die Erstellung einer Verbindung bearbeiten – Tisha

+0

Ich verwende 9.5.2 – Tisha

+0

gut, 9.6 würde Ihnen Remote-Joins ermöglichen. und in Bezug auf Ihre letzte Frage - meinst du, Sie wollen mit CTE Join aktualisieren? .. –

0

Das funktionierte für mich.

select * from dblink('host=10.1.1.1 
    user=user 
    password=password 
    dbname=oat','Update employee set is_done =true') tt(
    updated text); 
Verwandte Themen