Announcement

Collapse
No announcement yet.

psql Parameter Übergabe in Bash Script

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • psql Parameter Übergabe in Bash Script

    Hallo,

    ich versuche gerade einem sql file einen Parameter auf den Weg zu geben:
    mysqlfile:
    Code:
    select :'aOutPut', now()
    consolen Aufruf:
    Code:
    user@rechner:/path#su - postgres -c "psql -d mydatabse -v aOutPut=sometestoutput -f /otherpath/mysqlfile.sql"
    Ergebnis:
    Code:
        ?column?    |              now
    ----------------+-------------------------------
     sometestoutput | 2016-11-03 16:24:02.669471+00
    (1 row)
    Soweit so gut.

    Wenn ich den Aufruf nun in ein Bashscript packe, erhalte ich folgende Fehlermeldung:
    Code:
    psql:/otherpath/mysqlfile.sql:1: ERROR:  syntax error at or near ":"
    LINE 1: select :'aOutPut', now()
                   ^
    Ich habe das Ganze schon in diversen Varianten durchgespielt und das hier ist ein abgewandeltes, vereinfachtes Beispiel. Im echten Script soll die Variable aOutPut wiederum durch eine Bash Variable befüllt werden. Dachte zuerst, die Variablenersetzung in der bash läuft falsch, aber selbst mit einer Konstante kommt nichts gescheites raus.

    Danke für tolle Tipps!

    P.S.: Umgebung ist Debian 8.1 und pg 9.4.
    Zuletzt editiert von defo; 03.11.2016, 18:36.
    Gruß, defo

  • #2
    Scheinbar hat sich noch niemand bemüht, der Fehler ist gefunden und mein Post ist Dank "Vereinfachung" auch nicht ganz sauber.

    Das Phänomen und die Ursache des Problems liegt daran, dass die verwendet Parameter Übergabe nur für SQL gedacht ist und nicht für anonyme Blöcke (prozeduralen code), wie ich sie in meinem Originalcode (nicht aber im Post oben ) verwendet habe.
    Was ich mache wollte und was ohne Tricks nicht funktioniert ist hier beschrieben:
    http://stackoverflow.com/questions/2...cedural-script

    Dadurch, dass ich aus einem Bash Script raus die Aufrufe mache, sehen die Aufrufe noch etwas anders aus, aber ich verwende das gleiche Prinzip. Übergabe von externen Parametern an einen anonymen Block mit Hilfe der server side session variables. Das Script besteht zu Anfang aus einem SQL Teil, der die Variablen Übergabe handelt und dann aus einem Code Teil, der die Verarbeitung (mit den Variablen) durchführt.
    Wenn es interessiert, einfach nachfragen.
    Man braucht das allerdings so nur, wenn man keine richtigen Prozeduren einsetzen will / kann.
    Gruß, defo

    Comment

    Working...
    X