Elixir Today: Ecto를 사용하여 PostgreSQL에서 중복 행 제거
소개
이 튜토리얼에서는 Ecto를 사용하여 스키마에서 중복 행을 제거하는 방법을 공유하고자 합니다.
준비
CREATE TABLE(:student_teacher, primary_key: false) do
add :id, :uuid, primary_key: true
add :student_id, references(:students, type: :uuid)
add :teacher_id, references(:teachers, type: :uuid)
end
student = insert(:student)
teacher = insert(:teacher)
insert_list(100, :student_teacher, student: student, teacher: teacher)
IEx를 사용하여 중복 행 확인
콘솔에서
iex -S mix
를 실행하고 중복 행이 있는지 확인하십시오.iex) query = SELECT COUNT(*), student_id, teacher_id FROM
student_teacher group by student_id, teacher_id having count(*) > 1;
iex) Ecto.Adapter.SQL.query!(Repo, query)
iex) %Postgrex.Result{
columns: ["count", "student_id", "teacher_id"],
command: :select
num_rows: 1,
rows: [
[
100,
<<student_id>>,
<<teacher_id>>
],
]
}
쿼리를 실행하여 중복 행 삭제
Repo.transaction(
fn ->
query = """
DELETE FROM student_teacher s1
USING student_teacher s2
where s1.id < s2.id
AND s1.student_id = s2.student_id
AND s1.teacher_id = s2.teacher_id
"""
Ecto.Adapters.SQL.query!(Repo, query)
end,
timeout: :infinity
)
Happy Coding!
Reference
이 문제에 관하여(Elixir Today: Ecto를 사용하여 PostgreSQL에서 중복 행 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paugramming/elixir-today-remove-duplicate-rows-in-postgresql-using-ecto-4emb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)