セッションIDの調べ方

このQ&Aのポイント
  • PostgreSQL上でのセッションID(SPID)の調べ方について教えてください。
  • MS SQL2000のストアド・プロシージャをPostgreSQLに書き換える際に、現在のユーザーのセッションIDを調べる方法を教えてください。
  • マニュアルのシステムカタログを確認しても、PostgreSQL上でのセッションIDの調べ方が分かりません。解決策を教えてください。
回答を見る
  • ベストアンサー

セッションID(?)の調べ方

初めてこちらで質問させていただきます。 PostgreSQLを使い始めました。(Ver. 8.3.5 を使用しています。) 今やろうとしている事は、MS SQL2000 のストアド・プロシージャを PostgreSQL用に書き換える事です。 MS SQL2000 用のストアド・プロシージャに、 select @lockid=rtrim(ltrim(loginname))+'@'+rtrim(ltrim(hostname)) from master dbo.sysprocesses where spid=@@spid というSQL文があり、 どのようにこれ(現在アクセスしているユーザIDを調べる) をPostgreSQL上で実現するかで頭を悩ませています。 問題は、現在のユーザーのプロセスのセッション ID(SQL2000 では @@SPID) をPostgreSQLでどのように調べるかなのですが、マニュアルのシステムカタログ の辺りを目を通してるのですが、なかなか見つけられず困っています。 ここを読め。や、こういうのを使うんだ。など解決への糸口、光を指さして、 情報を教えていただける方はいないでしょうか?どうか宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Dodonpa2
  • ベストアンサー率82% (19/23)
回答No.1

こんにちは。 pg_stat_activityビューあたりが該当するのかな? 詳しくはドキュメントの「第 26章データベース活動状況の監視」 (8.3.4の場合)をごらんください。

dbbeginner
質問者

お礼

有り難う御座います。早速教えて頂いた箇所のマニュアルを読んできます!

関連するQ&A

  • PostgreSQLでストアドプロシージャについて

    皆さんのお陰でストアドファンクションを作成する事ができました。 ここで1つ、疑問が・・・ ネットでPostgreSQLの「CREATE PROCEDURE」を検索しても私が望んでいる情報を得る事ができませんでした。 申し訳ありませんがここで質問があります。 PostgreSQLで「CREATE PROCEDURE」はないんでしょうか。 PostgreSQLではストアドプロシージャとストアドファンクションは一緒なのでしょうか。 MySQLやSQL Serverではストアドプロシージャとストアドファンクションは別だった気がしますが・・・ ※違っていたらすみません。 どなたか私の疑問を解決していただけませんでしょうか。 宜しくお願いします。

  • T-SQLで一時テーブルの名前を毎回変更できるストアドを作りたい

    お世話になります。 初歩的な質問で恐縮ですがご教示いただければ幸いです。 T-SQLでグローバル一時テーブルの名前を毎回変更できるストアドを作り、Access2003アプリから実行させる予定です。 ストアドに、CREATE TABLE [dbo].[@tablename]のように書き、 ストアド実行時に@tablenameの値を ##ABC のように入力したのですが、テーブルはtempdbではなく、しかもテーブル名は@tablenameでテーブルが作成されてしまいます。 CREATE TABLE [dbo].@tablename のように[]をとると ストアド自体を作成できずエラーになってしまいます。 宜しくお願いします。 create PROCEDURE [dbo].[ストアドプロシージャー名] (@tablename nvarchar(255)) AS BEGIN from SET NOCOUNT ON; CREATE TABLE [dbo].[@tablename] <以下省略>

  • ストアドプロシージャについて

    お世話になります。 SQLServseのストアドプロシージャで、あるテーブルのテストデータを100件ほど作成したいと思っています。 しかし、プロシージャを実行すると「プライマリキーが重複しています」とエラーが出ます。 テーブル内にはすでにCODE='0001'と'0101'の2件が存在します。そのため挿入開始コードは'0002'としたのですが・・・。まだ同じエラーが発生します。 テーブル名:MST_USER  CODE char(4) ←キー  KBN  char(2)  NAME varchar(40)  PASS varchar(10) 作成したプロシージャ CREATE PROCEDURE dbo.test_update_USER AS declare @count int declare @kbn int set @count = 2 set @kbn = 0 while 1 = 1 begin update MST_USER set CODE = right('0000' + ltrim(str@count)), 4), KBN = right('00' + ltrim(str(@kbn)), 2), NAME = 'test' + ltrim(str(@count)), PASS = 'test' + ltrim(str(@count)) set @count = @count + 1 if (@count > 100) break if (@kbn > 3) set @kbn = 0 else set @kbn = @kbn + 1 end GO 何か間違えているのか自分ではわからなくなっている状態です。 どなたかご指摘いただけると幸いです。

  • ストアドプロシージャでcsvファイルへデータにエクスポート

    いつも勉強させていただいています。 ストアドプロシージャの勉強をし始めて間もない素人ですがよろしくお願いします。 SQL-server2005でテーブルをCSVファイルに、ストアドプロシージャを使ってそのままエクスポートする、と言うことをやっています。 以下作成したストアドプロシージャです。 ******************************************* CREATE PROCEDURE [ストプロ名] AS DECLARE @command VARCHAR(200) BEGIN SET @command = ' bcp [データベース名].[スキーマ].[テーブル] out C:\XXXX\aaa.txt -PXXXXXX -UXXXXXX -SXXXXXX' EXECUTE master.dbo.xp_cmdshell @command END **************************************** 解析ボタン、実行ボタンをクリックしてもエラーは出ません。 「ストアドプロシージャの実行」を選択して実行させても、 アラーは表示されず、ファイルも作成されません。 xp_cmdshell が有効になるように設定もしました。 残念ながら検討すらつかない状態です。ぜひご教授お願いします。

  • ユーザーが定義したストアドプロシージャ一覧の取得

    SQL Server 2005で、 db内のストアドプロシージャ一覧を取得したいと思っています。 select o.* from syscomments c , sysobjects o where c.id = o.id and o.type='P' order by o.name といったように記述すれば一覧は取得できるようですが、 これだとシステムストアドプロシージャも表示されてしまいます。 ユーザーで定義したストアドプロシージャのみ取得したいのですが、可能でしょうか? 何か良い手段をご存じの方がいらっしゃいましたらアドバイス頂けますと嬉しいです。 どうぞよろしくお願いいたします。

  • PL/SQLとPL/pgSQLの違い

    こんにちは。 現在の環境がOracle8iで、次のシステムがPostgreSQLで構築されることになりました。 今後に向けてPL/SQLを勉強しようと思ったのですが、PostgreSQLにはPL/pgSQLというストアドプロシージャが有ると言うことを知りました。 そこで質問なのですが、PL/SQLとPL/pgSQLは何か大きな違いは有るのでしょうか? PL/SQLの勉強をすれば、PL/pgSQLも出来るようになるのかを教えていただけますでしょうか。

  • セッション

    phplibを使わないでユーザ認証を用いたwebサイトを作ろうと思います。 shinki.php => login.php => contents1.php=> contents2.php .... のような流れの構造で、直接contents1.phpなどに入られないようにセッションを使用したいと思います。 ユーザが持っているセッション名と、サーバー側のセッション名が一致するという条件だけでログインしたユーザと考えていいのでしょうか? 現在はこのような感じになっています。 まずshinki.phpでユーザー登録します。この時ユーザ情報と暗号化されたパスワードをDBに保存。 login.phpでユーザIDとパスワードを入力し、DBのデータと一致するとcontents1.phpに進む。この時セッションを発行し、idと暗号化されたパスワードをセッションに記憶させる。 contents(1 | 2).phpのコード <? session_start(); // PostgreSQL 接続 if (!($cn = pg_connect("dbname=****"))){die;} // SQL文 $sql = "select * from ***** where id='$_SESSION[id]'"; if (!($rs = pg_exec($sql))) {die;} $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $array = pg_fetch_array($rs, $i); } // セッションのパスワードとデータベースのパスワードが一致 if($_SESSION[pass] == $array['pass']){ login_html(); }else{ print "ログインしてください。"; } // PostgreSQL 切断 pg_close($cn); function login_html(){ print "<html><head><title><title></head><body>"; .... .... } ?> このような構造には、セキュリティー的な問題はあるのでしょうか? おそらくいろいろ問題があると思いますので、ご指導お願いします。 一般的なパスワード制のページではどのような処理をしているのでしょうか? よろしくお願いします。 os:linux httpd:apache1.3.27 postgreSQL php4.x.x

    • ベストアンサー
    • PHP
  • SQLServer2005のストアドプロシージャのデバックの設定方法をご教示ください

    SQLServer2005でストアドプロシージャを作成しました。 VisualStudioを使用すればデバッグ(一行ずつ実行して、変数の中身や動作を確認)できるということですが、設定がうまくできません。 ストアドプロシージャ作成は初めてで、周りにも経験者がいないため解決策がわからない状態です。 ご存知の方、気がついたことがある方は、ぜひご教示ください。 ■■ マシン環境 ■■ OS:Windows2003Server DB:SQLServer2005 ■■ 試した方法 ■■ 1.DBサーバマシンのVisualStdio2005を使用 上記マシンに、SQLServer2005をインストールしたとき、  VisualStudio2005が自動的にインストールされたので これを使用することを考えました。 VisualStudio2005の「サーバーエクスプローラー」に、 今回作成したストアドプロシージャを表示するところまではできたのですが、 デバッグ実行できません。 メニューから「ストアドプロシージャのステップイン」を選択してデバッグウインドウを表示するらしいのですが メニューには、以下のものしか表示されません。  新しいプロシージャの追加 / 開く / 実行 ためしに実行すると、ストアドプロシージャは動作します (テーブルへのデータINSERTをストアドでコーディングしており、実行後に指定値が入っていたため) しかし、デバッグポイントを設定できず、ステップ実行もできません。 2.別マシンのVisualStdio2003を使用 私の開発マシンにはVisual Studio 2003が入っているため、 DBサーバマシンとリモートで接続して、上記と同様の設定を行いました (このVisual Studio2003はC#開発用にインストールしたものです)。 こちらは、メニューに「ストアドプロシージャのステップイン」が出ました。しかし……。 メニューから「ストアドプロシージャのステップイン」を選択してデバッグウインドウが表示されたときに、以下のメッセージボックスが出ます。 「SQL Server データベースが正しくセットアップされていないか、またはユーザーに master.sp_sdidebug を実行する権限がないため、ストアド プロシージャをデバッグできません。」 デバッグウインドウ上でデバッグポイントは設定できますが、 ストアドプロシージャを実行してもデバッグポイントでとまらず ステップ実行もできません。 (同様にINSERTしたテーブル値から、ストアド自体は動作していると判断) なお、1.2.共にSA認証でSQLServer2005にログオンしています。 SQLServer のデバッグできるのは、sysadminサーバロールを持つユーザだけらしいですが、 SA認証で使用しているユーザには「sysadmin」のサーバロールは設定しています。 ■■ 質問 ■■ 1) QLServer2005インストールで自動的にインストールされるVisualStudioでは、 ストアドプロシージャのデバッグはできないのでしょうか? それとも、SQLServer2005インストール時に、開発環境等の追加設定や、 別途VisualStudio2005をインストールする必要があるのでしょうか? それとも、別にSQLServer management Studioや構成ツール等で設定が必要なのでしょうか? または、メニューに「ストアドプロシージャのステップイン」を出す設定(方法)をご存知の方、ご教示をお願いします。 2) 「SQL Server データベースが正しくセットアップされていないか、またはユーザーに master.sp_sdidebug を実行する権限がないため、ストアド プロシージャをデバッグできません。」 このメッセージはどうすれば回避できるのでしょうか? SQL Server データベースが正しくセットアップされていないということですが、 これまで特に支障がないため問題はないと思っているのですが……。 検索で以下のサイトを見つけましたが、SQLServer2000のため参考になるかは疑問です。   http://support.microsoft.com/kb/839280/ja   http://support.microsoft.com/kb/886680/ja 以下のサイトは、どうすれば原因回避できるのかわかりませんでした(勉強不足を感じております)   http://msdn2.microsoft.com/ja-jp/library/ms164014.aspx master.sp_sdidebug を実行する権限の設定方法をご存知の方、ご教示いただけませんでしょうか? 3) Visual Studio以外で、SQLServer2005のストアドプロシージャをデバッグする方法がありましたらご教示ください。 変数の途中の値を一時テーブルにINSERTして確認するくらいしか方法はありませんでしょうか? 申し訳ございませんが、もしご存知の方、ご教示いただけませんでしょうか? なお、設定やマシン環境で記述不足等ありましたら、ご指摘いただければと思います。 以上です。よろしくお願いします

  • ストアドプロシージャ関連のおすすめ書籍

    SQL SERVER2005 EXPRESS EDITIONとMS ACCESSを使用したデータベース を開発しておりますが、ストアドプロシージャに関する専門書籍があり ましたら是非ご紹介下さい。 宜しくお願い致します。

  • PostgreSQL(8.4.2)のユーザ定義関数(ストアドプロシージ

    PostgreSQL(8.4.2)のユーザ定義関数(ストアドプロシージャ)を、 ODBC経由でVisualStudio2005から利用したいのですが、 サーバーエクスプローラーからユーザ定義関数を参照することが出来なくて悩んでいます。 ユーザ定義関数はpgAdminIIIで作成しました。 cse(Common SQL Environment)などのフリーのツールからは問題なく参照できます。 VisualStudioにユーザ定義関数として認識させるための何かおまじない的な物が必要なのでしょうか。 それともPostgreSQLとVisualStudioとの相性が悪いのでしょうか。 なおユーザ定義関数以外であるテーブルやビューは、 サーバーエクスプローラーから参照できます。