Postgresqlで接続先を動的変更できるDBLINKのサンプル
DBLINKの基本的な構文例。
1 2 3 4 5 6 | SELECT * FROM DBLINK('host=XXX port=5432 dbname=XXX user=XXX password=XXX' ,'SELECT col1, col2 FROM target') AS T1 (col1 text, col2 text) ORDER BY T1.col2 ; |
接続先を動的に変更する為、接続先情報をテーブルで管理する。
1 2 3 4 5 6 7 | CREATE TABLE linktest ( key character varying(1) NOT NULL, value character varying(200) NOT NULL, CONSTRAINT linktest_pk PRIMARY KEY (key) ) ; |
接続先情報を取得する為のPL/pgSQLを定義。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | -- Function: get_dblinkstr(character varying) -- DROP FUNCTION get_dblinkstr(character varying); CREATE OR REPLACE FUNCTION get_dblinkstr(argkey character varying) RETURNS character varying AS $BODY$ DECLARE -- <TITLE>DBLINK接続文字列取得</TITLE> -- <REMARKS> -- keyに一致するDBLINK接続文字列を取得する -- </REMARKS> fldvalue linktest.value%TYPE; BEGIN BEGIN SELECT value INTO fldvalue FROM linktest WHERE key = argkey; EXCEPTION WHEN OTHERS THEN RETURN NULL; END; RETURN fldvalue; END; $BODY$ LANGUAGE plpgsql VOLATILE ; |
接続先情報取得関数の利用方法。
1 | SELECT * FROM get_dblinkstr('1'); |
接続先情報取得関数を利用したDBLINKを行うVIEWの定義。
1 2 3 4 5 6 | CREATE VIEW view_test AS SELECT * FROM DBLINK(get_dblinkstr('1') ,'SELECT col1, col2 FROM target') AS T1 (col1 text, col2 text) ; |
接続先情報取得関数を利用したDBLINKを行うVIEWの参照。
1 | SELECT * FROM view_test ORDER BY col1; |