2017-01-30 7 views
1

aus einer anderen Datenbank auswählen Um Ich versuche dblink oder fdw Erweiterung von Postgres zu verwenden, wie folgt aus:Select * From Tabelle als Tabelle dblink

CREATE EXTENSION dblink; 

SELECT * FROM 
dblink ('dbname = bd_name port = 5432 host = 10.6.6.6 user = username password = password', 
'SELECT id, code FROM sch_schema.table') 
AS new_table(id INTEGER, code character varying); 

Das funktioniert gut, wenn ich welche Spalten Ich möchte wählen angeben.

Mein Problem ist: Wie kann ich wählen Sie alle Spalten?

Ich habe versucht, dieses:

SELECT * FROM 
dblink ('dbname = bd_name port = 5432 host = 10.6.6.6 user = username password = password', 
'SELECT * FROM sch_schema.table'); 

Aber das funktioniert nicht. Wie kann ich dieses Problem lösen?

+0

Oh wirklich? Jeder mit einem angemessenen Ruf könnte eine Frage schließen, die nicht bedeutet, dass ich es getan habe. –

+0

Mit FDWs gibt es einen Befehl "IMPORT FOREIGN SCHEMA" (https://www.postgresql.org/docs/current/static/sql-importforeignschema.html) von PostgreSQL 9.5 +, aber nichts Ähnliches in "dblink" . – pozs

+0

danke @ Pozs für Ihre vorschlagen –

Antwort

1

Das ist nicht möglich, da PostgreSQL zum Zeitpunkt der Abfrageplanung wissen muss, wie die Spalten lauten.

Aber es sollte kein Problem sein, die Spalten anzugeben, und in den meisten Fällen ist es ratsam, die “ * ” in SQL zu vermeiden.

1

DBLink gibt einen generischen Datenzeilentyp zurück. Eine der ärgerlichen Dinge daran ist, dass Sie die Ausgabestruktur angeben müssen, um es zu verwenden. Vielleicht wird in zukünftigen Versionen von PostgreSQL diese Einschränkung des Mangels an Introspektion von generischen Zeilentypen bestrahlt werden. Der Mangel an Introspektion ist ein Problem, nicht nur für DbLink, sondern auch für andere generische Zeilentyp zurückgebende Funktionen wie TableFunc Cross Tab Funktionen

+0

danke @ Danish shaikh für die Klarstellung –

Verwandte Themen