为什么 gorm postgresql 在 ")" 或附近抛出 pq: 语法错误?


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和互联网文章中的另一个解决方案没有帮助。

PS:是因为我混合了数据库吗。Raw((和查询。在哪里((?

更改?提高到1美元并不能解决问题。

基本上有几件事解决了这个问题。

1( 将Rawquery.Where混合是一个问题。

sr.db.Where进行Raw查询后

2(

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

已经具有CCD_ 5。然后使用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 < ?`

解决了这个问题。

我找到了一个解决方法来解决我在Go/Gorm解决方案中使用PostgreSQL添加时间戳文件时收到的错误,该解决方案等效于default: now(),即default: time.Now().Format(time.RFC3339)

我收到错误是因为我使用AutoMigrate((在PostgreSQL中创建表。我发现的一个问题是,当试图使用函数的默认值而不是字符串(可以用于固定的时间戳(时。

因此,我不得不进入DataGrid(因为我使用JetBrains,但你可以使用任何PostgreSQL管理工具,如pgAdmin(,手动添加默认值为now()的时间戳字段,或者只更新现有字段添加默认值now()。然后,在Go中进行下一次构建时,错误就会消失。

最新更新