2013-04-17 15 views
6

Angenommen, ich möchte eine CSV-Datei von einem Pfad auf demselben Computer importieren, auf dem der Postgres-Server ausgeführt wird.Ist es möglich, innerhalb eines postgres sql-Befehls auf eine Umgebungsvariable zu verweisen?

Es gibt eine Umgebungsvariable MyPath, die am System auf '/path/to/my/csv/file/' eingestellt ist.

Ich könnte leicht diese CSV-Datei wie folgt importieren:

COPY MyTable FROM 
'/path/to/my/csv/file/myTable.csv' 
DELIMITERS ',' 
CSV HEADER; 

Ist es möglich, aus den MyPath Variable verweisen in diesem postgres SQL-Befehl? Etwas in den folgenden Zeilen:

COPY MyTable FROM 
get_environmental_variable('MyPath') || 'myTable.csv' 
DELIMITERS ',' 
CSV HEADER; 

Antwort

3

Wenn Sie PL/R installieren, können Sie die plr_environ() Funktion verwenden, um eine Liste der Umgebungsvariablen und deren Werte als COPY MyTable from (SELECT VALUE FROM plr_environ() WHERE name = 'MyPath') zu erhalten; andere Stored Procedure-Sprachen haben wahrscheinlich ähnliche Möglichkeiten - in plpython könnte ich mir vorstellen, dass man os.environ ['MyPath'] benutzen kann, plperlu hat Zugriff auf den% ENV-Hash und so weiter. Wenn Sie weitere Hilfe benötigen, hinterlassen Sie bitte einen Kommentar und ich freue mich, dies für Sie weiter zu untersuchen.

6

diese während Versuchen

psql --set 'var=foo' -c '\i thesqlscript' 

Und das in der Abfrage

update table set column = :var; 

ab diesem von this question on the forum

genommen wird Wenn Sie eine ältere Version von Postgres verwenden, das wie das aussieht dieselbe Frage gestellt in the postgres forum (obwohl das vor vielen Jahren ist). Es gibt keinen direkten Weg, aber sie haben ein paar Workarounds gegeben.

Verwandte Themen