PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Kann ich Ecto dazu bringen, rohes SQL zu protokollieren?

Ecto verwendet nur vorbereitete Anweisungen. Bei Verwendung der ecto-Abfragesyntax ist die Einführung von SQL-Injection nicht möglich. Die Abfragesyntax überprüft zur Kompilierzeit, dass keine SQL-Injection möglich ist.

Das genaue Anzeigen der ausgeführten Abfragen kann aus folgenden Gründen schwierig sein:

  • Postgrex (und damit Ecto) verwendet das postgresql-Binärprotokoll (anstelle des gebräuchlichsten, aber weniger effizienten Textprotokolls), also PREPARE Abfrage existiert nie wirklich als Zeichenfolge.
  • In den meisten Fällen würden Sie nur ein anfängliches PREPARE 64237612638712636123(...) AS ... sehen und später viel EXECUTE 64237612638712636123(...) was nicht so hilfreich ist. Der Versuch, eine Beziehung zueinander herzustellen, wäre schrecklich.

Meiner Erfahrung nach verwendet die meiste Software dieser Art Prepare-Anweisungen und protokolliert sie anstelle von Rohabfragen, da dies viel hilfreicher ist, um das Verhalten des Systems zu verstehen.