>백엔드 개발 >Golang >JSON 배열을 포함한 복잡한 구조체를 PostgreSQL 데이터베이스에 직접 삽입하려면 어떻게 해야 합니까?

JSON 배열을 포함한 복잡한 구조체를 PostgreSQL 데이터베이스에 직접 삽입하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-03 17:55:03772검색

How can I insert complex structs, including JSON arrays, directly into a PostgreSQL database?

PostgreSQL DB에 구조체를 직접 삽입할 수 있나요?

PostgreSQL에서는 구조체 필드가 ​​복잡하거나 JSON을 포함하는 경우 구조체를 데이터베이스에 직접 삽입하는 것이 간단하지 않습니다. 배열. 그러나 외부 라이브러리를 활용하면 보다 효율적인 방식으로 삽입 기능을 구현할 수 있습니다.

sqlx 라이브러리를 사용한 솔루션

sqlx 라이브러리(github.com/jmoiron/sqlx)는 우아한 솔루션을 제공합니다. 이 문제에. 이를 사용하려면 먼저 각 구조체 필드에 db 태그를 지정하여 데이터베이스 필드 이름을 지정하세요.

<code class="go">type ApplyLeave1 struct {
    LeaveId           int       `db:"leaveid"`
    EmpId             string    `db:"empid"`
    SupervisorEmpId   string    `db:"supervisorid"`
    // ... other fields
}</code>

그런 다음 sqlx에서 NamedExec 함수를 사용하여 전체 구조체를 데이터베이스에 삽입하세요.

<code class="go">import (
    "github.com/jmoiron/sqlx"
    "log"
)

query := `INSERT INTO TABLENAME(leaveid, empid, supervisorid, ...) VALUES(:leaveid, :empid, :supervisorid, ...)`

var leave1 ApplyLeave1

db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
if err != nil {
    log.Fatalln(err)
}

_, err = db.NamedExec(query, leave1)
if err != nil {
    log.Fatalln(err)
}</code>

JSON 배열 삽입

구조체에서 JSON 배열을 처리하려면 필드에 db:"array" 태그를 지정하여 PostgreSQL의 배열 데이터 유형을 사용할 수 있습니다.

<code class="go">type CertificateInfo struct {
    Id           int64  `db:"id"`
    FileName     string `db:"filename"`
    FileType     string `db:"filetype"`
    FileLocation string `db:"filelocation"`
}

type ApplyLeave1 struct {
    // ... other fields
    Certificates   []CertificateInfo  `db:"certificates,array"`
}</code>

이러한 단계를 따르면 JSON 배열을 포함한 복잡한 구조체를 PostgreSQL 데이터베이스에 원활하게 삽입하여 코드를 단순화하고 데이터 삽입 효율성을 높일 수 있습니다.

위 내용은 JSON 배열을 포함한 복잡한 구조체를 PostgreSQL 데이터베이스에 직접 삽입하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.