Postgres – Golang 错误:pq: 用户不存在

huangapple go评论116阅读模式
英文:

Postgres - Golang Error: pq: Users does not exists

问题

我正在尝试将Golang连接到一个位于Gcloud上的Postgres数据库,并且我已经允许了网络IP。我正在尝试访问User数据库,然后是public模式下的User表,这是数据库的结构:

我遇到了这个错误:pq: database "Users" does not exist

我将添加代码:

  1. package ports
  2. import (
  3. "database/sql"
  4. "log"
  5. "github.com/gofiber/fiber/v2"
  6. _ "github.com/lib/pq"
  7. )
  8. func OpenConnection(dbName string) (*sql.DB, error) {
  9. connStr := "<addr>" + dbName
  10. db, err := sql.Open("postgres", connStr)
  11. if err != nil {
  12. log.Fatal(err)
  13. }
  14. return db, err
  15. }
  16. func GetUsers(ctx *fiber.Ctx) error {
  17. db, dbErr := OpenConnection("Users")
  18. if dbErr != nil {
  19. log.Fatalln(dbErr)
  20. }
  21. defer db.Close()
  22. rows, err := db.Query("SELECT * FROM Users")
  23. if err != nil {
  24. log.Fatalln(err)
  25. ctx.JSON("An error ocurred")
  26. }
  27. defer rows.Close()
  28. return ctx.Render("/users", fiber.Map{
  29. "Users": rows,
  30. })
  31. }

Postgres – Golang 错误:pq: 用户不存在

英文:

I'm trying to connect Golang to a Postgres DB, it is in Gcloud and I already allowed the network IP. I'm trying to access the User DB and then the User table inside the public schema, this is the database structure:

Postgres – Golang 错误:pq: 用户不存在

I am getting this error: pq: database &quot;Users&quot; does not exist

I'll add the code:

  1. package ports
  2. import (
  3. &quot;database/sql&quot;
  4. &quot;log&quot;
  5. &quot;github.com/gofiber/fiber/v2&quot;
  6. _ &quot;github.com/lib/pq&quot;
  7. )
  8. func OpenConnection(dbName string) (*sql.DB, error) {
  9. connStr := &quot;&lt;addr&gt;&quot; + dbName
  10. db, err := sql.Open(&quot;postgres&quot;, connStr)
  11. if err != nil {
  12. log.Fatal(err)
  13. }
  14. return db, err
  15. }
  16. func GetUsers(ctx *fiber.Ctx) error {
  17. db, dbErr := OpenConnection(&quot;Users&quot;)
  18. if dbErr != nil {
  19. log.Fatalln(dbErr)
  20. }
  21. defer db.Close()
  22. rows, err := db.Query(&quot;SELECT * FROM Users&quot;)
  23. if err != nil {
  24. log.Fatalln(err)
  25. ctx.JSON(&quot;An error ocurred&quot;)
  26. }
  27. defer rows.Close()
  28. return ctx.Render(&quot;/users&quot;, fiber.Map{
  29. &quot;Users&quot;: rows,
  30. })
  31. }

答案1

得分: 0

我刚刚修复了它,问题是两个方面的组合:

  1. 当我硬编码时,我没有正确地组合字符串,这样就解决了数据库错误。
  2. 之后,我遇到了一个错误,它会说表不存在,问题是我发送了一个未引用的表名,我需要它区分大小写,所以我必须用引号将名称包裹起来使其工作。像这样:
  1. package ports
  2. import (
  3. "database/sql"
  4. "log"
  5. "github.com/gofiber/fiber/v2"
  6. _ "github.com/lib/pq"
  7. )
  8. func OpenConnection() (*sql.DB, error) {
  9. connStr := "<connStr>/users"
  10. db, err := sql.Open("postgres", connStr)
  11. if err != nil {
  12. log.Fatal(err)
  13. }
  14. return db, err
  15. }
  16. func GetUsers(ctx *fiber.Ctx, db *sql.DB) error {
  17. defer db.Close()
  18. rows, err := db.Query(`SELECT * FROM "Users"`)
  19. if err != nil {
  20. log.Fatalln(err)
  21. ctx.JSON("An error ocurred")
  22. }
  23. defer rows.Close()
  24. return ctx.Render("/users", fiber.Map{
  25. "Users": rows,
  26. })
  27. }
英文:

I just fixed it and it was a combination of two things:

  1. I wasn't properly combining the strings, when I hardcoded it I got rid of the db error.
  2. After that I encountered an error where it would say the table doesn't exists, the issue is I was sending an unquote table name and I needed it to be case sensitive so I had to wrap the name between quotes to make it work. Like so
  1. package ports
  2. import (
  3. &quot;database/sql&quot;
  4. &quot;log&quot;
  5. &quot;github.com/gofiber/fiber/v2&quot;
  6. _ &quot;github.com/lib/pq&quot;
  7. )
  8. func OpenConnection() (*sql.DB, error) {
  9. connStr := &quot;&lt;connStr&gt;/users&quot;
  10. db, err := sql.Open(&quot;postgres&quot;, connStr)
  11. if err != nil {
  12. log.Fatal(err)
  13. }
  14. return db, err
  15. }
  16. func GetUsers(ctx *fiber.Ctx, db *sql.DB) error {
  17. defer db.Close()
  18. rows, err := db.Query(`SELECT * FROM &quot;Users&quot;`)
  19. if err != nil {
  20. log.Fatalln(err)
  21. ctx.JSON(&quot;An error ocurred&quot;)
  22. }
  23. defer rows.Close()
  24. return ctx.Render(&quot;/users&quot;, fiber.Map{
  25. &quot;Users&quot;: rows,
  26. })
  27. }

huangapple
  • 本文由 发表于 2022年3月31日 23:42:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/71695502.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定