質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

2回答

755閲覧

DBへの接続確認をしたい

moshi

総合スコア90

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2018/10/15 05:31

前提・実現したいこと

golangでDB(Postgres)に接続できるかの確認をしたいです。

試したこと

import ( "database/sql" "fmt" _ "github.com/lib/pq" _ "github.com/nakagami/firebirdsql" ) func exec2() { db, err := sql.Open("postgres", "host=127.0.0.1 port=5432 user=postgres password=pass dbname=postgres sslmode=disable") defer db.Close() if err != nil { fmt.Println(err) } }

を呼び出して接続できればerrに何も入らず、接続できなければerrを表示してくれるのかと思っていたのですが
DBを停止した状態/パスワードを変更した状態でもerrには何も入りませんでした。
どうすれば接続できたことの確認ができるでしょうか?
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

Windows
Postgres
golang

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

外してたら申し訳ありませんが、判定の前にdb.Close()してるからじゃないでしょうか?

追記

DBへの接続は実際に必要になった場合に行うようです。
ですので、エラーにはならないのだと思われます。

Go database/sql チュートリアル 03 - データベースへのアクセス

sql.Open()はデータベースへの接続を確立しませんし、ドライバの接続パラメータの検証もしません。
その代わりに、後で使用される抽象化されたデータベースの準備をするだけです。
実データストアへの実際のコネクションは、必要になった時に初めて、遅延して確立されるでしょう。
データベースが利用可能でアクセス可能かどうか、すぐに確認したい場合はdb.Ping()を使ってください。(例えば、ネットワーク接続ができログイン可能かどうかチェックする場合)
その際はエラーチェックを忘れないでください。

投稿2018/10/15 05:48

編集2018/10/15 07:45
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moshi

2018/10/15 05:51

defer がついているのでdb.Close()は最後に行われます。 念のため処理の順番を変えましたがダメでした。。
sazi

2018/10/15 05:59

正常に接続されるケースは確認されていますか?
moshi

2018/10/15 06:04

正常に接続できることを上記の方法で確認しようとしたのですが、異常系と結果が変わらないので困っているところです。 でも異常系とおなじなので「そもそも接続できていない」のような気はしています。
sazi

2018/10/15 06:09

fmt.Println("Failed to connected DB: ", err) のようにリテラルを埋めた方が分かりやすいと思います
moshi

2018/10/15 06:12

出力文字についてはそのようにします。
moshi

2018/10/15 07:51

勉強不足でした。 必要にならないと接続はされないんですね! 大変ためになりました、ありがとうござます!
guest

0

うーん。

たとえば、func exec2()func main() に変えてみたり、接続文字列を

db, err := sql.Open("postgres", "postgres://postgres:pass@127.0.0.1/postgres?sslmode= disable")

に変えてみたり、127.0.0.1localhost に変えてみたりした場合、何か変化ありますか?

投稿2018/10/15 06:05

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moshi

2018/10/15 06:11

すべて試しましたが何も変化はありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問