ent에 Upsert 설치(for PostgreSQL, SQLite 3)
5197 단어 ORMGoSQLite3PostgreSQL
ERROR: ON CONFLICT DO UPDATE requires inference specification or constraint name (SQLSTATE 42601)
지금 이런 문제가 발생한 사람은 5이다....로 보면 좋을 것 같다5. Upsert 설치 시
카탈로그
↑ 이 글을 참고하여 쓰면 SQLite3의 경우 기대에 부응할 수 있음
Upsert
Upsert 구현 단계generate.go에 sql/upsert 기능 표지 추가 /ent/generate.go package ent - //go:generate go run -mod=mod entgo.io/ent/cmd/ent generate ./schema + //go:generate go run -mod=mod entgo.io/ent/cmd/ent generate --feature sql/upsert ./schema # generate.goo에 sql/upsert를 추가한 후generate schema를 추가하세요 # "On Conflicct"라는 함수 추가 $ go generate ./... Create(insert 데이터) // client: *ent.Client // User: *ent.UserClient ← schema.Goo 내용에 따라 User 부분이 달라질 수 있어요. //↑ 이 두 개는 schema다.goo의 내용에 따라 자동으로 생성 u, err := client.User. Create(). SetUserID("A0001") SetName("user1"). SetAge(20). Save(ctx) 솔리드 작성 특정 녀석 업데이트 상황 u, err := client.User. UpdateOneID(id). SetUserID("A0001") SetName("user1"). SetAge(24). Save(ctx) // or u, err := client.User. Update(). Where(user.UserID("A0001")). SetName("user1") SetAge(24). Save(ctx) ent docs: ID 지정 업데이트 Upsert 설치 시 Postgres에서 이 쓰기 동작(SQLite에서 동작) conflict가 발생할 때 Update 같은 처리 방법을 진행해야 합니다 id, err := client.User. Create(). SetUserID("A0001")//UserID가 Unique로 지정된 경우 SetAge(24). SetName("user1"). OnConflict(). // 만약 무슨 conflict가 발생하면 Update를 진행합니다 UpdateNewValues(). ID(ctx) Postgres로 수정 Postgres의 경우 conflict가 발생할 수 있는 열을 미리 써서 OnConflict의 매개 변수로 지정해야 한다 다만, 이 작법은default에서 만든create입니다.at 및 업데이트업데이트 id, err := client.User. Create(). SetUserID("A0001")//UserID가 Unique로 지정된 경우 SetName("user1"). SetAge(24). - OnConflict(). + OnConflict( + sql.ConflictColumns(user.FieldUserID), + ). UpdateNewValues(). ID(ctx) Insert의 경우 createat를 설정하고 Update를 실행하면create업데이트하지 않음 at id, err := client.User. Create(). SetUserID("A0001") SetName("user1"). SetAge(24). OnConflict( sql.ConflictColumns(user.FieldUserID), ). - UpdateNewValues(). + Update(func(u *ent.UserUpsert) { + u.SetUserID("A0001") + u.SetName("user1") + u.SetAge("24") + u.UpdateUpdatedAt() + }). ID(ctx) Upsert 1개 총결산 ent를 사용하여 Upset을 설치할 때 conflict가 발생하는 열은 OnConflict에서 지정하는 것이 좋습니다 SQLite 및 Postgres 등 여러 환경에서 동일한 코드 사용 가능 OnConflict( sql.ConflictColumns(user.FieldUserID), ). 업데이트를 원하지 않는 열이 있으면 업데이트할 열만 지정합니다. Update(func(u *ent.UserUpsert) { u.SetUserID("A0001") u.SetName("user1") u.SetAge("24") u.UpdateUpdatedAt() }). 참고 자료
Reference
이 문제에 관하여(ent에 Upsert 설치(for PostgreSQL, SQLite 3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Suzurikawa/items/afcf8e7e63cb2d62a9da텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)