PostgreSQL

PostgreSQL 接続先を確認するファンクション

connect_point() 接続先を確認する

個人的には、接続ユーザだれからも利用できるようにpublicスキーマへ作成して使っています。createの際は適宜スキーマ修飾してください。security definerとしないのは、作成者以外のユーザから利用した際、current_user()の結果が作成者になり、意図しない事になるのでinvokerを指定しています。(デフォルトがinvokerなので記載の必要はないのですが、ここではあえて記載してみました)

create or replace function public.connect_point ()
	returns table (
		item_name  text,
		item_value text
	)
	language 'plpgsql'
	-- security definer 
	-- definerにすると作成者以外のユーザから利用した際意図しない事になるのでinvokerを指定する
	security invoker
as $body$
begin
return query
select w.item_name,w.item_value from (
    select 1 as item_no,'current_database' as item_name,cast(current_database() as text) as item_value
    union select 2 as item_no,'version' as item_name,substring(version() from 'PostgreSQL [0-9|.]*') as item_value
    union select 3 as item_no,'inet_server_addr' as item_name,cast(inet_server_addr() as text) as item_value
    union select 4 as item_no,'inet_server_port' as item_name,cast(inet_server_port() as text) as item_value
    union select 5 as item_no,'current_user' as item_name,cast(current_user as text) as item_value
    union select 6 as item_no,'current_schema' as item_name,cast(current_schema() as text) as item_value
    union select 7 as item_no,'inet_client_addr' as item_name,cast(inet_client_addr() as text) as item_value
) as w
order by w.item_no
;
end;
$body$;
実行例
myposdb=# select * from public.connect_point();
    item_name     |   item_value
------------------+-----------------
 current_database | myposdb
 version          | PostgreSQL 13.9
 inet_server_addr | 192.168.3.22/32
 inet_server_port | 5432
 current_user     | sooni
 current_schema   | sooni
 inet_client_addr | 192.168.3.5/32
(7 行)


myposdb=#

標準で提供されている機能だけではサーバのIPしか取得できず(本当はホスト名が欲しい)不満なので以下のようなファンクションを手作りしました。

スポンサーリンク
タイトルとURLをコピーしました