GolangでPostgreSQLデータベースの場所を特定する方法


  1. 接続文字列を使用してデータベースの場所を特定する方法:
package main
import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)
func main() {
    connStr := "user=your_user password=your_password dbname=your_dbname host=your_host port=your_port sslmode=disable"
    db, err := sql.Open("postgres", connStr)
    if err != nil {
        fmt.Println("データベースに接続できませんでした:", err)
        return
    }
    defer db.Close()
    err = db.Ping()
    if err != nil {
        fmt.Println("データベースに接続できませんでした:", err)
        return
    }
    fmt.Println("データベースの場所:", db.Driver().(*pq.Driver).ConnInfo().Host)
}
  1. PostgreSQLのpg_stat_activityビューを使用してデータベースの場所を特定する方法:
package main
import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)
func main() {
    connStr := "user=your_user password=your_password dbname=your_dbname host=your_host port=your_port sslmode=disable"
    db, err := sql.Open("postgres", connStr)
    if err != nil {
        fmt.Println("データベースに接続できませんでした:", err)
        return
    }
    defer db.Close()
    err = db.Ping()
    if err != nil {
        fmt.Println("データベースに接続できませんでした:", err)
        return
    }
    rows, err := db.Query("SELECT inet_server_addr() AS address, inet_server_port() AS port")
    if err != nil {
        fmt.Println("データベースの場所を取得できませんでした:", err)
        return
    }
    defer rows.Close()
    if rows.Next() {
        var address string
        var port int
        err = rows.Scan(&address, &port)
        if err != nil {
            fmt.Println("データベースの場所を取得できませんでした:", err)
            return
        }
        fmt.Println("データベースの場所:", address, "ポート:", port)
    } else {
        fmt.Println("データベースの場所を取得できませんでした.")
    }
}