[pgsql-jp: 28914] Re: PostgreSQL セッションの切断方法について

らい aspnetjp @ yahoo.co.jp
2003年 2月 4日 (火) 09:56:00 JST


らいです。

> ;;; ただ今開発中のプログラムは前述しましたがADOを使用して
> ;;; 開発しています。デバッグ中に接続をちゃんと切らずに終了して
> ;;; しまった場合等に接続情報が残ってしまいうまくPostgreSQLが
> ;;; 動作しなくなることが最近多々ありまして、困っております。
> ;;;
> ;;; ps -ax というコマンドで確認できると教わったもので確認してみたところ
> ;;; 確かに大量にゴミが残っていました。確認する方法は分かったのですが
> ;;; このセッション(?)をどう削除してよいものかご伝授頂けないでしょうか。
>
>   『残った接続情報』、『うまく PostgreSQL が動作しなくなる』『大量にゴミが
残っ
> ていました』と判断された具体的な例を見せていただくことはできますか?
>
>   例えば、Ether が抜けてクライアントがなくなてしまったがバックエンドがロッ
クさ
> れて残ったような場合に、そのバックエンドのみを終らせる方法はあります。

杉田様返信ありがとうございます。
解決できました! kill コマンドを使用して接続情報をクリアすることができまし
た。
解決できてしまいましたが具体的な例を書いてみました。

VB.NETで下記のようなプログラムがあった場合人為的に End With あたりで
プログラムを止めてしまった場合に接続情報が残るようです。(必ず残るかは未確認
です。)
また、この接続情報が溜まってくると .Execute() でプログラムが待機状態に
なってしまいます。
前のトランのコミットまたはロールバックを待っているのかなと個人的には思ってい
るのですが。。。
※下記ではエラー処理無視しました。

Dim Cnn As ADODB.Connection
Dim Cmm As ADODB.Command

    Cnn = New ADODB.Connection()
    Cnn.ConnectionString = "Provider=MSDASQL;DRIVER=PostgreSQL; _
                                      SERVER=xxx.xxx.xxx.xxx;DATABASE=" &
"test" & "; _
                                      UID=xxx;PWD=xxx;"
    Cnn.Open()
    Cnn.BeginTrans()

    Cmm = New ADODB.Command()

    With oCmm
        .ActiveConnection = Cnn
        .CommandText = "insert into test (aaa,bbb,ccc) values(1,2,3)"
        .CommandType = ADODB.CommandTypeEnum.adCmdText
        .Execute()
    End With

    Cnn.CommitTrans()

    Cnn.close()
    Cmm = Nothing
    Cnn = Nothing

以上です。ありがとうございました。



__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/




pgsql-jp メーリングリストの案内