【问题标题】:Connect with postgreSQL schema与 postgreSQL 模式连接
【发布时间】:2018-12-29 17:56:15
【问题描述】:

我正在寻找连接和查询到 PostgreSQL。但我只想连接到特定的 Schema

根据文档(JDBC)我们可以使用

jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema

update 从 9.4 开始,您可以使用新的 currentSchema 参数指定 url,如下所示:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema

但我无法使用 golang SQL 驱动程序这样做;

根据文档,我们也可以使用SET search_path TO myschema,public; 但我只想在初始化期间声明一次,但我认为每次新连接都需要执行此操作。

另外我正在使用以下代码,请帮助我确定要传递给它的正确参数,以便仅与架构连接

db, err := sql.Open("postgres", `dbname=`+s.settings.Database+
` user=`+s.settings.Username+` password=`+s.settings.Password+
` host=`+s.settings.Url+` sslmode=disable`) 

添加currentSchema=myschemasearchpath=myschema 无效!

有没有办法我只能连接到 GO 中的特定数据库模式

【问题讨论】:

  • jdbc 是 java,不是 go
  • @Woot4Moo,我知道这就是我提到 根据文档 的原因;抱歉,如果不清楚,但我在下面提到了代码 sn-p 我尝试将这些 currentSchema=myschema 添加到语句中,但它不起作用

标签: postgresql go database-schema


【解决方案1】:

设置 Search_path 是正确的,你只做一次。即:

db, err := sql.Open("postgres",
    "host=localhost dbname=Test sslmode=disable user=postgres password=secret")
if err != nil {
   log.Fatal("cannot connect ...")
}
defer db.Close()
db.Exec(`set search_path='mySchema'`)

rows, err := db.Query(`select blah,blah2 from myTable`)
...

【讨论】:

  • 我正在使用 `db, err := sql.Open("postgres", dbname=+dbName+` user=+username+ password=+password+ host=+host+ sslmode=disable@ 987654326@所以有很多并行连接,我很怀疑或者你能解释一下我会执行这个db.Exec(set search_path='mySchema')会为每个连接设置模式吗?
  • @AbhishekSoni 您正在以不同的方式写我所做的事情。每个连接都需要该 exec 一次。就像您需要 Open() 每个连接一样,您需要对每个数据库执行一次。
  • 我对连接的功能感到困惑,但我确实想知道 db.Exec(set search_path='mySchema') 需要 once 每个 OPEN 而不是每个连接(例如,我将 maxConns 设置为 40,因此需要执行 40 次)?
  • 你为什么不简单地测试一下?
  • @AbhishekSoni 你应该使用事务
【解决方案2】:

您应该将search_path=myschema 添加到dataSourceName

附:最好使用fmt.Sprintf("host=%s port=%d dbname=%s user=%s password='%s' sslmode=disable search_path=%s", ...) 而不是``+``

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2020-04-07
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多