<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ststyle.net &#187; dblink</title>
	<atom:link href="http://www.ststyle.net/weblog/archives/tag/dblink/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ststyle.net/weblog</link>
	<description>Just another ststyle techlog</description>
	<lastBuildDate>Mon, 19 Jul 2010 13:53:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>postgres-dblink インストール</title>
		<link>http://www.ststyle.net/weblog/archives/446</link>
		<comments>http://www.ststyle.net/weblog/archives/446#comments</comments>
		<pubDate>Fri, 23 Oct 2009 07:17:40 +0000</pubDate>
		<dc:creator>ststyle</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[dblink]]></category>

		<guid isPermaLink="false">http://www.ststyle.net/weblog/?p=446</guid>
		<description><![CDATA[postgres-dblinkでは
接続中のPostgreSQLで他のPostgreSQLデータベースのデータにアクセスする為のライブラリ
contribで提供されているdblinkを利用します
postgres-dbl [...]]]></description>
			<content:encoded><![CDATA[<p>postgres-dblinkでは</p>
<p><em>接続中のPostgreSQL</em>で他の<em>PostgreSQL</em>データベースのデータにアクセスする為のライブラリ</p>
<p>contribで提供されている<em>dblink</em>を利用します</p>
<p>postgres-dblinkインストール</p>
<p>postgresのsrcディレクトリ内のcontrib/dblinkへ移動</p>
<pre class="brush: bash; auto-links: false;">

su postgres
make
make install

$ psql -U postgres -d {DBNAME} &amp;lt; dblink.sql
</pre>
<p>※{DBNAME}はdblinkを利用したいデータベース名。<br />
これをtemplate1とすることで今後作成するデータベースで利用できるようになる。</p>
<p>● 使用方法<br />
&#8220;[" と "]&#8221; で括られている接続識別名は省略可能です。<br />
ただし接続識別名を接続時に指定した場合は常に必要です。※ &#8220;[" および "]&#8221; は記述不要。</p>
<p>* アクセスしたいテーブルなどがあるデータベースに接続<br />
select dblink_connect(['{接続識別名}', ]&#8216;{接続文字列}&#8217;);<br />
※    {接続文字列}にはlibpqのPQconnectdb関数で利用するキーワードを記述します。<br />
参照.) PostgreSQLマニュアル &#8211; libpq &#8211; Cライブラリ &#8211; データベース接続制御関数<br />
ex.)<br />
select dblink_connect(&#8217;conn1&#8242;,<br />
&#8216;host=dbsv port=5432 dbname=mydb user=scott password=tiger&#8217;);<br />
* 検索(SELECT)<br />
select *<br />
from dblink(['{接続識別名}', ]<br />
&#8217;select {列名}[, {列名}...]<br />
from {オブジェクト名}&#8217;)<br />
t1({列名} {データ型}[, {列名} {データ型}...]);<br />
ex.)<br />
select *<br />
from dblink(&#8217;conn1&#8242;,<br />
&#8217;select oid, relname<br />
from pg_class&#8217;)<br />
t1(oid oid, relname text);<br />
* 更新(UPDATE/INSERT/DELETE)<br />
select dblink_exec(['{接続識別名}', ]{DML文}[, fail_on_error]);<br />
ex.)<br />
select dblink_exec(&#8217;conn1&#8242;,<br />
&#8216;delete from emp where empno=7800&#8242;);<br />
* データベースから切断<br />
select dblink_disconnect(['{接続識別名}']); ex.)<br />
select dblink_disconnect(&#8217;conn1&#8242;);</p>
<h3>dblinkのテスト</h3>
<p>接続</p>
<pre class="brush: bash; auto-links: false;">

select dblink_connect(&#039;conn1&#039;,&#039;host=XXXXX port=5432 dbname=replication user=XXX password=XXXX&#039;);
</pre>
<p>切断</p>
<pre class="brush: bash; auto-links: false;">

select dblink_disconnect(&#039;conn1&#039;);
</pre>
<p>検索</p>
<pre class="brush: bash; auto-links: false;">

select dblink_connect(&#039;conn1&#039;,&#039;host=データベース1 port=5432 dbname=replication user=XXX password=XXX&#039;);
select * from dblink(&#039;conn1&#039;,&#039;select a from rep&#039;) t1(a integer);
select * from dblink(&#039;conn1&#039;,&#039;select count(*) as cnt from rep&#039;) t1(cnt integer);
select dblink_disconnect(&#039;conn1&#039;);

select dblink_exec(&#039;conn1&#039;,&#039;delete from emp where empno=7800&#039;);

select dblink_connect(&#039;conn1&#039;,&#039;host=データベース1 port=5432 dbname=replication user=XXX password=XXX&#039;);
select dblink_connect(&#039;conn2&#039;,&#039;host=データベース2 port=5432 dbname=replication user=XXX password=XXX&#039;);

select *
from
dblink(&#039;conn1&#039;,&#039;select count(*) as cnt from rep&#039;) t1(cnt integer),
dblink(&#039;conn2&#039;,&#039;select count(*) as cnt from rep&#039;) t2(cnt integer)
;
</pre>
<p>おー素晴らしいー</p>
<p>異なるデータベースをひとつのSQL文で取得できちゃいました。</p>
<pre class="brush: bash; auto-links: false;">
cnt | cnt
-----+-----
10 |&nbsp; 10
(1 row)
</pre>
<p>select dblink_disconnect(&#8217;conn1&#8242;);</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ststyle.net/weblog/archives/446/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
