Выполните несколько запросов (SELECT * from emp; Select * from adm;) для postgres и получите результат в двух разных структурах IN GO(GOLANG)

Я использую Go 1.13 Postgres 11 и GraphQL

Я пытаюсь выполнить три разных запроса: 1. Чтобы получить подробную информацию о нескольких сотрудниках, когда выполняется какое-то условие. 2. Получить подробную информацию обо всех сотрудниках. 3. Чтобы получить все данные о сотруднике при совпадении с Empid.

Когда я запускаю свой код, он успешно компилируется

Но когда я вызываю API для (2 и 3), он говорит, что не удалось получить. API для 1 работает успешно.

При поиске решения и попытке найти место возникновения ошибки оно сходится в функции rows.Scan().

Когда я комментирую строку rows.Scan(), она запускается без предоставления данных, но когда запускается после комментирования

Показывает ошибку: не удалось получить.

Итак, ошибка связана с rows.Scan()

Возможно, у нас не может быть более одной rows.Scan() в проекте. Думая об этом, я создал функцию, которая принимает запрос и возвращает интерфейс.

Но это тоже не сработало.

    connStr := fmt.Sprintf("port=%d host=%s user=%s password=%s dbname=%s sslmode=disable", hostport, hostname, username, password, databaseName)
    db, err := sql.Open("postgres", connStr)

    if err != nil {
        fmt.Println(`Could not connect to db`)
        panic(err)
    }
    defer db.Close()

    rows, err := db.Query(query)
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    for rows.Next() {
        row := models.Universal{}
        if num == 1 {
            if err := rows.Scan(&row.AdhaarNo, &row.PersonalMobile, &row.Branch, &row.EmpID, &row.EmpName, &row.DOB, &row.DOJ, &row.Gender, &row.LocAdd1, &row.LocAdd2, &row.LocCity, &row.LocState, &row.LocCountry, &row.PerAdd1, &row.PerAdd2, &row.PerCity, &row.PerState, &row.PerCountry, &row.OfficeMail, &row.OfficeMobile, &row.LocPIN, &row.PerPIN, &row.MotherName, &row.PFNo, &row.BloodGroup, &row.PAN, &row.PersonalEmail, &row.FatherName, &row.EmergencyNo, &row.BankAcNo, &row.EmpBank, &row.IFSC, &row.Designation, &row.OnboardingStatus); err != nil {
                log.Fatal(err)
            }
            models.AllUniversal = append(models.AllUniversal, row)
        } else if num == 2 {
            if err := rows.Scan(&row.AdhaarNo, &row.PersonalMobile, &row.Branch, &row.EmpID, &row.EmpName, &row.DOB, &row.DOJ, &row.Gender, &row.LocAdd1, &row.LocAdd2, &row.LocCity, &row.LocState, &row.LocCountry, &row.PerAdd1, &row.PerAdd2, &row.PerCity, &row.PerState, &row.PerCountry, &row.OfficeMail, &row.OfficeMobile, &row.LocPIN, &row.PerPIN, &row.MotherName, &row.ESINo, &row.PAN, &row.VisaNo, &row.VisaExpiry, &row.IntegreationRef, &row.OrgID, &row.DeptID, &row.SectionID, &row.JobTypeID, &row.GradeID, &row.DesignationID, &row.CustomGroup1ID, &row.CustomGroup2ID, &row.CustomGroup3ID, &row.Card1, &row.Card2, &row.ScheduleGroupID, &row.StartShift, &row.PersonalEmail, &row.WeakOffGropuID, &row.LeaveGroup, &row.Field1, &row.PFNo, &row.BloodGroup, &row.SerialNo, &row.PassportNo, &row.PassportExpiry, &row.Dept, &row.JobType, &row.Level, &row.CostCenter, &row.FatherName, &row.EmergencyNo, &row.ConfirmationPeriod, &row.PFDate, &row.CTC, &row.FBP, &row.VarPay, &row.AdminBank, &row.EmpBank, &row.IFSC, &row.PayMode, &row.RepManager, &row.RepManEmail, &row.MaritalStatus, &row.SalaryTemp, &row.IsRepMan, &row.SpouseName, &row.Relation, &row.IsMetro, &row.HasESS, &row.HasPF, &row.PFUAN, &row.IsEPFEntitled, &row.HasESI, &row.IsPFRestricted, &row.BankAcNo, &row.Designation, &row.DeptCode, &row.Role, &row.JobTitle, &row.CustomField, &row.OnboardingStatus); err != nil {
                log.Fatal(err)
            }
            models.AllUniversal = append(models.AllUniversal, row)
        } else {
            if err := rows.Scan(&row.AdhaarNo, &row.Gender, &row.Branch, &row.EmpName, &row.DOB, &row.DOJ, &row.Gender, &row.LocAdd1, &row.LocAdd2, &row.LocCity, &row.LocState, &row.LocCountry, &row.PerAdd1, &row.PerAdd2, &row.PerCity, &row.PerState, &row.PerCountry, &row.OfficeMail, &row.OfficeMobile, &row.LocPIN, &row.PerPIN, &row.MotherName, &row.ESINo, &row.PAN, &row.VisaNo, &row.VisaExpiry, &row.IntegreationRef, &row.OrgID, &row.DeptID, &row.SectionID, &row.JobTypeID, &row.GradeID, &row.DesignationID, &row.CustomGroup1ID, &row.CustomGroup2ID, &row.CustomGroup3ID, &row.Card1, &row.Card2, &row.ScheduleGroupID, &row.StartShift, &row.PersonalEmail, &row.WeakOffGropuID, &row.LeaveGroup, &row.Field1, &row.PFNo, &row.BloodGroup, &row.SerialNo, &row.PassportNo, &row.PassportExpiry, &row.Dept, &row.JobType, &row.Level, &row.CostCenter, &row.FatherName, &row.EmergencyNo, &row.ConfirmationPeriod, &row.PFDate, &row.CTC, &row.FBP, &row.VarPay, &row.AdminBank, &row.EmpBank, &row.IFSC, &row.PayMode, &row.RepManager, &row.RepManEmail, &row.MaritalStatus, &row.SalaryTemp, &row.IsRepMan, &row.SpouseName, &row.Relation, &row.IsMetro, &row.HasESS, &row.HasPF, &row.PFUAN, &row.IsEPFEntitled, &row.HasESI, &row.IsPFRestricted, &row.BankAcNo, &row.Designation, &row.DeptCode, &row.Role, &row.JobTitle, &row.CustomField, &row.OnboardingStatus); err != nil {
                log.Fatal(err)
            }
            models.AllUniversal = append(models.AllUniversal, row)
        }
    }

    return models.AllUniversal
}

1 ответ

У меня была ошибка "Failed to Fetch" ​​из-за запроса, который я использовал для извлечения записей из БД.

Поскольку было несколько столбцов, в которых не было сохраненного значения, они вызывали ошибку. Затем я использовал технику "case", чтобы решить эту ошибку.

Хотя тот же запрос работал в консоли запросов pgadmin.

Случай был необходим, потому что я использовал graphql в середине, а graphql не мог обработать это пустое поле, поэтому я возвращал "N/A", если значение поля было нулевым.

И до всего этого я передавал несколько запросов одной пользовательской функции, но позже я сделал другую функцию для запросов, которые возвращают одну строку и несколько строк.

Эта штука сработала и решила все ошибки.

Спасибо.

Другие вопросы по тегам