Почему gorm postgresql выдает ошибку синтаксиса pq: в или около ")"? - PullRequest
0 голосов
/ 21 апреля 2020
SELECT_QUERY = `SELECT * FROM events WHERE c_id = ? AND start_time > ? and
                                    end_time < ?`

query := sr.db.Raw(SELECT_QUERY, request.GetCId(), startTime, endTime)

    var v = request.GetVIds()
    if len(v) > 0 {
        query = query.Where(` v_id IN (?) `, v)
    } //Only this block introduces first ) after end_time

var c = request.GetStatus().String()
    if len(c) > 0 {
        query = query.Where( " status = ? ", c) // this introduces the other opening brace //after AND
    }

Ниже приведен запрос, сгенерированный и найденный в журналах

 SELECT * FROM events WHERE c_id = 1 AND start_time > '2020-04-16 18:42:00' and
                                        end_time < '2020-04-16 18:45:50' ) AND ( v_id IN (1,2)) AND ( status = 'STATUS_MIDDLE_CLASS'  ORDER BY  start_time DESC  LIMIT 5 OFFSET 1

Другое решение в статье stackoverflow и inte rnet не помогает.

PS: Это потому, что я смешиваю db.Raw () и query.Where ()?

1 Ответ

1 голос
/ 22 апреля 2020

Меняется? до $ 1 не решает проблему.

В основном, несколько вещей решали проблему.

1) Смешивание Raw и query.Where было одной проблемой.

После выполнения запроса Raw к sr.db.Where

2)

SELECT_QUERY = `SELECT * FROM events WHERE c_id = ? AND start_time > ? and
                                    end_time < ?`

уже имеет select * from. И затем использование query := sr.db.Raw(SELECT_QUERY, request.GetCId(), startTime, endTime) вводит вложенный select *.

Итак, измененный SELECT_QUERY следующим образом

SELECT_QUERY = `events WHERE c_id = ? AND start_time > ? and
                                    end_time < ?`

решил проблему.

...