sql >> Database >  >> RDS >> PostgreSQL

Kan ik Ecto ertoe brengen om onbewerkte SQL te loggen?

Ecto gebruikt alleen voorbereide verklaringen. Bij gebruik van de ecto-querysyntaxis is het invoeren van SQL-injectie niet mogelijk. De querysyntaxis verifieert tijdens het compileren dat er geen SQL-injectie mogelijk is.

Het exact weergeven van de uitgevoerde zoekopdrachten kan om een ​​aantal redenen moeilijk zijn:

  • Postgrex (en dus Ecto) gebruikt het postgresql binaire protocol (in plaats van het meest gebruikelijke, maar minder efficiënte, tekstprotocol), dus de PREPARE query bestaat nooit echt als een tekenreeks.
  • In de meeste gevallen ziet u alleen een eerste PREPARE 64237612638712636123(...) AS ... en later veel EXECUTE 64237612638712636123(...) wat niet zo handig is. Proberen om een ​​relatie met elkaar aan te gaan zou verschrikkelijk zijn.

Mijn ervaring is dat de meeste van dit soort software 'prepareer'-statements gebruiken en ze loggen in plaats van onbewerkte query's, omdat het veel nuttiger is om het gedrag van het systeem te begrijpen.



  1. Dynamische tabelnamen in de functie voor opgeslagen procedures

  2. SQL rij-retourvolgorde

  3. Grote MySQL InnoDB-tabellen wijzigen

  4. Deelnemen aan tabellen van twee verschillende servers