2016-04-29 6 views
1

Ich muß remote Leistung vergleichen von vielen postgresql Sklavenpsql Timing von bash

Ich kann nicht einen guten Weg finden, so etwas wie zu schreiben:

echo "\timing on  select now() ; " | ssh [email protected] "psql foo_db" 

mit einigen ‚-en‘ für Echo versucht , einige ‚\‘,

bekomme ich nur ‚Timing ist auf‘ und einige zusätzliche Argumente ‚xxxx‘ ignoriert

Antwort

2

auf meinem System ist ssh überhaupt nicht durch die Standardeingabe übergeben, so habe ich t Die ganze Pipeline in das Argument. Was ich am Ende mit, war dies:

ssh [email protected] "echo \"\timing on \\\\\ select now();\" | psql foo_db" 

Die \" innerhalb der Zeichenfolge erlauben Sie mir 'strings' in der SQL selbst zu verwenden, wenn nötig. Die ungeschickte \\\\\ Sequenz läuft darauf hinaus, wie folgt:

  • die äußere Strings in doppelten Anführungszeichen (to ssh bestanden) jedes \\ zu \ reduziert, \\\, wobei für echo "timing on \\\ select now();"
  • die innere Strings in doppelten Anführungszeichen (auf den übergebenen Fern echo) wieder reduziert, um \\, gibt timing on \\ select now();
  • Diese uns psql Metacommands und SQL ohne mehrere Linien zu mischen erlaubt, wie im Handbuch beschrieben:

Die spezielle Sequenz \\ (zwei umgekehrte Schrägstriche) markiert das Ende der Argumente und parst gegebenenfalls SQL-Befehle weiter. Auf diese Weise können SQL- und PSQL-Befehle in einer Zeile frei gemischt werden.

+0

nice! Es klappt :-) – Overnuts