Ich bin nicht sicher, ob es Standard-SQL ist:
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
Was ich suche ist: was ist, wenn TBLA und TBLB sind in verschiedenen DB - Server .
Gibt PostgreSql ein Dienstprogramm an oder verfügt es über Funktionen, die bei der Verwendung hilfreich sind? INSERT query with PGresult struct
Ich meine, ich SELECT id, time FROM tblB ...
werde ein PGresult*
bei Verwendung zurückgeben PQexec
. Ist es möglich, diese Struktur in einer anderen PQexec
zu verwenden, um einen INSERT-Befehl auszuführen?
BEARBEITEN:
Wenn dies nicht möglich ist, würde ich die Werte aus PQresult * extrahieren und eine Syntax für mehrere INSERT-Anweisungen erstellen, wie:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
Ist es möglich, daraus eine vorbereitete Aussage zu machen !! :((
sql
postgresql
insert
dblink
Mayank
quelle
quelle
Antworten:
Wie Henrik schrieb, können Sie dblink verwenden, um eine entfernte Datenbank zu verbinden und das Ergebnis abzurufen. Beispielsweise:
PostgreSQL verfügt über einen Datensatzpseudotyp (nur für das Argument oder den Ergebnistyp der Funktion), mit dem Sie Daten aus einer anderen (unbekannten) Tabelle abfragen können.
Bearbeiten:
Sie können es als vorbereitete Aussage machen, wenn Sie wollen und es funktioniert auch:
Bearbeiten (ja, noch eine):
Ich habe gerade Ihre überarbeitete Frage gesehen (als Duplikat geschlossen oder nur sehr ähnlich).
Wenn mein Verständnis korrekt ist (postgres hat tbla und dbtest hat tblb und Sie möchten eine Remote-Einfügung mit lokaler Auswahl , keine Remote-Auswahl mit lokaler Einfügung wie oben):
Ich mag diesen verschachtelten Dblink nicht, aber AFAIK Ich kann nicht auf tblB im dblink_exec- Body verweisen . Verwenden Sie LIMIT, um die obersten 20 Zeilen anzugeben, aber ich denke, Sie müssen sie zuerst mit der ORDER BY-Klausel sortieren.
quelle
INSERT INTO tblA SELECT id, time FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB') AS t(id integer, time integer) WHERE time > 1000;
Kann ich daraus eine vorbereitete Aussage machen?Wenn Sie in die angegebene Spalte einfügen möchten:
quelle
Mit dblink können Sie eine Ansicht erstellen, die in einer anderen Datenbank aufgelöst wird. Diese Datenbank befindet sich möglicherweise auf einem anderen Server.
quelle
INSERT INTO ... (SELECT FROM ...)
es mit dblink funktionieren wird. Ich mussINSERT INTO ...
in einer dblink-Sitzung mit einem anderen DB-Server ausgeführt werden, jedoch(SELECT FROM ...)
in meiner aktuellen Sitzung.Diese Notation (zuerst gesehen hier ) sieht auch nützlich:
quelle
quelle
Hier ist eine alternative Lösung ohne Verwendung
dblink
.Angenommen, B repräsentiert die Quellendatenbank und A repräsentiert die Zieldatenbank: Dann
Tabelle von Quell-DB in Ziel-DB kopieren:
Öffnen Sie die psql-Eingabeaufforderung, stellen Sie eine Verbindung zu target_db her und verwenden Sie eine einfache Funktion
insert
:Löschen Sie am Ende die Kopie von source_table , die Sie in target_table erstellt haben .
quelle