Elixir Ecto: Postgresql에 바이너리 데이터 삽입

1784 단어 postgresqlectoelixir
본고는 데이터베이스에 이미지 정보를 저장하는 것을 예로 삼아 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"

    좋은 웹페이지 즐겨찾기