<?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; Database</title>
	<atom:link href="http://www.ststyle.net/weblog/archives/category/database/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>PostgreSQL::テーブル定義の変更</title>
		<link>http://www.ststyle.net/weblog/archives/467</link>
		<comments>http://www.ststyle.net/weblog/archives/467#comments</comments>
		<pubDate>Wed, 11 Nov 2009 03:50:46 +0000</pubDate>
		<dc:creator>ststyle</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.ststyle.net/weblog/?p=467</guid>
		<description><![CDATA[メモ
]]></description>
			<content:encoded><![CDATA[<p>メモ</p>
<pre class="brush: bash; auto-links: false;">

テーブルの作成
CREATE TABLE テーブル名;
テーブルの削除
DROP TABLE テーブル名;
テーブル名の変更
ALTER TABLE テーブル名 RENAME TO 新テーブル名;
列の追加
ALTER TABLE テーブル名 ADD COLUMN 列の定義;
列の削除
ALTER TABLE テーブル名 DROP COLUMN 列名;
列名の変更
ALTER TABLE テーブル名 RENAME COLUMN 列名 TO 新列名;
制約の追加
ALTER TABLE テーブル名 ADD CONSTRAINT 制約名 UNIQUE ( 列名 [, 列名]... );
NOT-NULL制約の追加
ALTER TABLE テーブル名 ALTER COLUMN 列名 SET NOT NULL;
制約の削除
ALTER TABLE テーブル名 DROP CONSTRAINT 制約名;
NOT-NULL制約の削除
ALTER TABLE テーブル名 ALTER COLUMN 列名 DROP NOT NULL;
デフォルトの追加
ALTER TABLE テーブル名 ALTER COLUMN 列名 SET DEFAULT デフォルト値;
デフォルトの削除
ALTER TABLE テーブル名 ALTER COLUMN 列名 DROP DEFAULT;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ststyle.net/weblog/archives/467/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL Escape Tips</title>
		<link>http://www.ststyle.net/weblog/archives/465</link>
		<comments>http://www.ststyle.net/weblog/archives/465#comments</comments>
		<pubDate>Mon, 09 Nov 2009 02:46:39 +0000</pubDate>
		<dc:creator>ststyle</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.ststyle.net/weblog/?p=465</guid>
		<description><![CDATA[Insert時の時など文字列に改行コード(\r\n)等が含まれる場合に
警告が表示されます。
対応としましては
Hintにあるように文字列の前に&#8221;E&#8221;を付与する
]]></description>
			<content:encoded><![CDATA[<p>Insert時の時など文字列に改行コード(\r\n)等が含まれる場合に</p>
<p>警告が表示されます。</p>
<p>対応としましては</p>
<p>Hintにあるように文字列の前に&#8221;E&#8221;を付与する</p>
<pre class="brush: bash; auto-links: false;">

WARNING:&nbsp; nonstandard use of \\ in a string literal
HINT:&nbsp; Use the escape string syntax for backslashes, e.g., E&#039;\\&#039;.
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ststyle.net/weblog/archives/465/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQl チューニング</title>
		<link>http://www.ststyle.net/weblog/archives/449</link>
		<comments>http://www.ststyle.net/weblog/archives/449#comments</comments>
		<pubDate>Fri, 23 Oct 2009 07:25:21 +0000</pubDate>
		<dc:creator>ststyle</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[tuning]]></category>

		<guid isPermaLink="false">http://www.ststyle.net/weblog/?p=449</guid>
		<description><![CDATA[チューニング(多少の..)
チューニング(多少の&#8230;) （実メモリ1G）
postgreSQlの再起動
PostgreSQLの再起動時に
This error usually means that Postgr [...]]]></description>
			<content:encoded><![CDATA[<p>チューニング(多少の..)</p>
<pre class="brush: bash; auto-links: false;">

ipcs -lm

------ シェアードメモリの制限 --------
max number of segments = 4096
max seg size (kbytes) = 4194303
max total shared memory (kbytes) = 1073741824
min seg size (bytes) = 1

echo $((4194303 / 1024))=4095
echo $((1073741824 / 1024 / 1024)) = 1024:1G
</pre>
<p>チューニング(多少の&#8230;) （実メモリ1G）</p>
<pre class="brush: bash; auto-links: false;">

su postgres
vi /var/pgsql/data/postgresql.conf

同時接続数
max_connections = 50

共有バッファを増やす（物理メモリの 1/4～1/2)
#shared_buffers = 32MB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # min 128kB or max_connections*16kB
&darr;
shared_buffers = 512MB&nbsp;&nbsp;&nbsp; (物理メモリの1/4～1/2(DBが主な仕事の場合))

#参考値
#1000ページ(8MB)
#2000ページ(16MB)
#4000ページ(32MB)
#8000ページ(64MB)
#16000ページ(128MB)
#32000ページ(256MB)
#64000ページ(512MB)
#128000ページ(1024MB)(1G)
#256000ページ(2048MB)(2G)
#512000ページ(4096MB)(4G)
#1024000ページ(8012MB)(8G)

●テンプバッファの調整
#temp_buffers = 8MB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # min 800kB
&darr;
temp_buffers = 16MB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # min 800kB

●ソートメモリ
#work_mem = 1MB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # min 64kB
&darr;
work_mem = 8MB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # min 64kB

●トランザクションログバッファの調整
wal_buffers = 64kB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # min 32kB
&darr;
wal_buffers = 256kB
</pre>
<p>postgreSQlの再起動</p>
<pre class="brush: bash; auto-links: false;">

pg_ctl restart
</pre>
<p>PostgreSQLの再起動時に<br />
<span style="color: #ff0000;">This error usually means that PostgreSQL&#8217;s request for<br />
a shared memory segment exceeded your kernel&#8217;s SHMMAX<br />
parameter.云々<br />
</span>といわれる時は<br />
/proc/sys/kernel/shmmax の値を増やします</p>
<pre class="brush: bash; auto-links: false;">

#echo 130023424 &amp;gt; /proc/sys/kernel/shmmax&nbsp; 等
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ststyle.net/weblog/archives/449/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
		<item>
		<title>pgbench インストール</title>
		<link>http://www.ststyle.net/weblog/archives/443</link>
		<comments>http://www.ststyle.net/weblog/archives/443#comments</comments>
		<pubDate>Fri, 23 Oct 2009 07:04:49 +0000</pubDate>
		<dc:creator>ststyle</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[pgbench]]></category>
		<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://www.ststyle.net/weblog/?p=443</guid>
		<description><![CDATA[pgbenchにてpostgreSQLの
ベンチマークを測定する事ができます
言うまでもありませんがポスグレをインストールしたサーバで行います。
pgbenchのインストール
ベンチマーク用データベースを作成し、初期化
 [...]]]></description>
			<content:encoded><![CDATA[<p>pgbenchにてpostgreSQLの</p>
<p>ベンチマークを測定する事ができます</p>
<p>言うまでもありませんがポスグレをインストールしたサーバで行います。</p>
<h3>pgbenchのインストール</h3>
<pre class="brush: bash; auto-links: false;">
su postgres
cd /usr/local/src/postgresql-8.3.4/contrib/pgbench
make
make install
</pre>
<p>ベンチマーク用データベースを作成し、初期化</p>
<pre class="brush: bash; auto-links: false;">

createdb pgbench
pgbench -i pgbench
</pre>
<h3>測定評価</h3>
<p>tps(trunsaction per second)値が高いほど良い</p>
<p>デフォルトはクライアント数1、トランザクション数10で</p>
<p>SELECT,INSERT,UPDATEが実行される<br />
tpsは1秒間に処理可能なトランザクション数で</p>
<p>数字が大きいほど性能が良いということ<br />
2行の違いは接続の確立に要した時間を含むか含まないか</p>
<p>SELECTのみをクライアント数10、トランザクション数100とする場合は</p>
<pre class="brush: bash; auto-links: false;">

$ pgbench -S -c 10 -t 100 pgbench
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ststyle.net/weblog/archives/443/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
