In order to execute a raw query we need to use the function YourApp.Repo.query which wraps Ecto.Adapters.SQL.query.Repo. In most cases it's better to rely on Ecto's composable query syntax and there are very few queries where I would reach for this particular option, however there are times when the ability to execute a query directly is necessary and yields a better result.

Example Usage:

alias YourApp.Repo

{:ok, result} = Repo.query("select * from table_name order by id asc")

> 
 %Postgrex.Result{
   columns: ["id", "name","inserted_at", "updated_at"],
   command: :select,
   connection_id: 00001,
   num_rows: 1,
   rows: [
      [
       6,
       "test name",
       {{2019, 6, 18}, {22, 40, 56, 0}},
       {{2019, 6, 18}, {2, 23, 4, 0}}
     ]
    ]

Note: The results returned will be a postgrex result struct and may require some transformation.