Elixir Ecto:Postgresqlにバイナリデータを挿入する


本稿では、データベースに保存する画像情報を例に、Postgresqlにバイナリデータを挿入する方法を示す.
まず、Postgresqlの唯一のバイナリデータのタイプはbyteaであり、 または を表すことを知る.OracleおよびMySQLのblobに対応します.
次に例を示します
defmodule Bytea.Model.Test do
  import Ecto.Changeset
  use Ecto.Schema
  alias Bytea.Repo
  schema "tests" do
    field :photo, :binary
    timestamps()
  end

  def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:photo])
    |> validate_required([:photo])
  end

  def insert(map) do
    Map.merge(%__MODULE__{}, map) |> Repo.insert
  end

  def test_insert do
    {:ok, contents} = File.read("/tmp/FB7D22A5-924E-4DA5-AC93-5D815FA1AEA8.png")
    insert(%{photo: contents})
  end
end

移行スクリプト
defmodule Bytea.Repo.Migrations.CreateTest do
  use Ecto.Migration

  def change do
    create table(:tests) do
      #        :binary,        mix ecto.migrate     :photo       :bytea
      add :photo, :bytea

      timestamps()
    end

  end
end

もちろん、Wordドキュメント、PDFドキュメントなど、画像ファイルのほかに、他のフォーマットのバイナリファイルを格納することもできます.
じっけんステップ
  • mix phoenix.new bytea --no-brunchプロジェクトを作成し、ダウンロード依存を提示し、Y
  • を入力する.
  • mix compileコンパイルプロジェクト
  • vi config/dev.exsデータベースを構成し、デフォルトで生成されたユーザー名とパスワードはpostgresなので、テスト時にあなたのデータベースのユーザー名とパスワードをpostgresに設定するのは便利です.
  • mix ecto.setupデータベースとテーブルを作成します.このコマンドは、実際にはmix.exsで定義された別名で、複数のサブコマンド
  • を含む.
  • iex -S mix phoenix.server起動テスト
  • サンプルアドレス
    https://github.com/developerw...
    テスト時に任意のファイルを探してこの場所に置くことができます"/tmp/FB7D22A5-924E-4DA5-AC93-5D815FA1AEA8.png"