<?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:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>ryo.com &#187; postgresql</title>
	<atom:link href="http://www.ryo.com/tag/postgresql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ryo.com</link>
	<description>by Ryosuke Hosoi</description>
	<pubDate>Thu, 20 Nov 2008 07:00:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>ja</language>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ryo.com/tag/postgresql/feed/" />
		<item>
		<title>ludia.max_n_sort_resultを使うときの注意</title>
		<link>http://www.ryo.com/2008/10/16/613/</link>
		<comments>http://www.ryo.com/2008/10/16/613/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 14:51:52 +0000</pubDate>
		<dc:creator>りょすけ</dc:creator>
		
		<category><![CDATA[IT関連]]></category>

		<category><![CDATA[ludia]]></category>

		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.ryo.com/?p=613</guid>
		<description><![CDATA[関口さんのブログで紹介されてる通り、ludia.max_n_sort_resultパラメータを適切に設定してやることによりludiaのパフォーマンスは大幅に向上します。
が、このパラメーターをSETコマンドで変更しようと [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lucene.jugem.jp/?eid=205" onclick="javascript:pageTracker._trackPageview('/outbound/article/lucene.jugem.jp');">関口さんのブログで紹介されてる通り</a>、ludia.max_n_sort_resultパラメータを適切に設定してやることによりludiaのパフォーマンスは大幅に向上します。</p>
<p>が、このパラメーターをSETコマンドで変更しようとすると<br />
<code>ryo=# SET ludia.max_n_sort_result TO 1000;<br />
ERROR:  unrecognized configuration parameter "ludia.max_n_sort_result"</code><br />
と怒られてしまうことがあります。</p>
<p>これはどうやら、postgresql.confに<a href="http://ludia.sourceforge.jp/cgi-bin/moin.cgi/LudiaReadme#id11" onclick="javascript:pageTracker._trackPageview('/outbound/article/ludia.sourceforge.jp');">デフォルト設定</a>の<br />
<code>custom_variable_classes = 'ludia'<br />
ludia.max_n_sort_result = 10000<br />
ludia.enable_seqscan = on<br />
ludia.seqscan_flags = 1<br />
ludia.sen_index_flags = 31<br />
ludia.max_n_index_cache = 16<br />
ludia.initial_n_segments = 512</code><br />
をちゃんと書いておかないと、このエラーになってしまう模様です。</p>
<p>このデフォルトのパラメーターを書かなくてもインデックス作成も検索動くので、ちょっと嵌るかもしれません。<br />
<h3>関連記事</h3>
<ul class="related_post">
<li><a href="http://www.ryo.com/2008/03/26/457/"  title="PostgreSQLで特定のテーブルのみautovacuumの対象外にする">PostgreSQLで特定のテーブルのみautovacuumの対象外にする</a></li>
<li><a href="http://www.ryo.com/2007/10/19/354/"  title="Ludiaメモ">Ludiaメモ</a></li>
<li><a href="http://www.ryo.com/2008/01/19/363/"  title="PostgreSQL使ったWebサイトのDBでありがちなこと">PostgreSQL使ったWebサイトのDBでありがちなこと</a></li>
<li><a href="http://www.ryo.com/2005/10/17/114/"  title="[勝手にCLI Magic]readlineと暮らす">[勝手にCLI Magic]readlineと暮らす</a></li>
<li><a href="http://www.ryo.com/2008/07/21/543/"  title="OSC関西2008楽しかった">OSC関西2008楽しかった</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ryo.com/2008/10/16/613/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ryo.com/2008/10/16/613/" />
	</item>
		<item>
		<title>OSC関西2008楽しかった</title>
		<link>http://www.ryo.com/2008/07/21/543/</link>
		<comments>http://www.ryo.com/2008/07/21/543/#comments</comments>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<dc:creator>りょすけ</dc:creator>
		
		<category><![CDATA[IT関連]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[osc-kansai-2008]]></category>

		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.ryo.com/?p=543</guid>
		<description><![CDATA[Google Tech Talk京都に続いて、OSC関西2008にも行ってきました。行ったのは１９日の土曜日のみですが、興味あるセミナーはかたっぱしから見てきました。
JPUG活動のご紹介/EC-CUBEとPostgre [...]]]></description>
			<content:encoded><![CDATA[<p>Google Tech Talk京都に続いて、<a href="http://www.ospn.jp/osc2008-kansai/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ospn.jp');">OSC関西2008</a>にも行ってきました。行ったのは１９日の土曜日のみですが、興味あるセミナーはかたっぱしから見てきました。</p>
<h3>JPUG活動のご紹介/EC-CUBEとPostgreSQL</h3>
<p>京都駅から会場までが予想以上に時間かかってしまい、ちょっと遅刻しましたが、興味のあった<a href="http://www.ec-cube.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ec-cube.net');">EC-CUBE</a>の話がきけてよかったです。<br />
個人的に気になった話（というか自分で質問して開発者の中川さんに答えて頂いたんですが）としては、EC-CUBEでやってるPostgreSQLとMySQLの両対応で、実際のコードはどう切り分けてるかってことで<br />
- DDL(データ定義のSQL)はPostgreSQLとMySQLで別のものを書いて用意している<br />
- ほとんどのSQLがそのまま通るのでそのまま使ってるが、MySQLだとVIEWがないだとかの制約があるので、クラスの内部で切り分けてで吸収している<br />
なるほどって思うのは簡単なんですが、最初から考えてたわけではなくて、もともとPostgreSQLでしか動かなかったものにMySQL対応を追加したそうで、このパワーはホントに凄いと思いました。これでインストール数は確実に増えるでしょうしね！<br />
と、いいつつも「もともとPostgreSQLでつくってて、MySQLではなんとか動くレベルなので、PostgreSQLのほうが速いしオススメ」だそうです（笑）</p>
<h3>脱Accessは、まず脱Baseから － オフィスアプリのOpenOffice.orgへの移行</h3>
<p>すっかりオフィスアプリから遠ざかってしまってるんですが、はるか昔Accessでオフィスアプリをつくってた記憶があるので、なんとなく興味本位で受けてみました。<br />
内容がけっこう密でほとんどついていけませんでしたが＾＾；AccessなんかでつくったオフィスアプリをOOoに移行するってのは、脱MS-Officeするには必須ですからねぇ・・・<br />
そういえばGoogle Tech Talk京都では、powerpointじゃなくてImpressが使われてた気がしたんですが・・・<br />
ちなみに僕はちょうど一昨日から、クリップアートやテンプレートがいっぱいついてる<a href="http://sourceforge.net/projects/ooop" onclick="javascript:pageTracker._trackPageview('/outbound/article/sourceforge.net');">OxygenOffice Professional</a>ってのをインストールしてつかってます。</p>
<h3>Linkstation / 玄箱をハックしよう</h3>
<p>gnspoolの山下さん・・・、いや、今はLinkStation/玄箱をハックしまくりの<a href="http://www.yamasita.jp/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.yamasita.jp');">山下さん</a>のセミナーです。<br />
「GLAN Tank使いが浮気してんじゃねーよ！？」って言われるような気がしないでもないですが、実は次にNAS買うならLinkStationにしようと思ってるのです。<br />
それにしても山下さんのお話は面白くて、完全にファンになってしまいました！<br />
ハックという「苦労と試行」の先にある満足感・達成感はほんとにいいもんですよね。</p>
<h3>はてなのバックエンドシステムと開発手法、過去と今</h3>
<p>大規模トラフィックをさばくのに、サーバーを増やすわけですが、サーバー増やせば増やすほど大変になるわけです。<br />
で、klabさんと出会ってLVSを活用するようになって相当よくなったというお話がメイン（だったハズ）。<br />
LVSはWebサーバーだけじゃなく、MySQLスレーブにもLVSが利くそうで、オススメだとのこと。<br />
# しかしMySQLスレーブが落ちるってのは、やっぱりMyISAMのロック競合が激しすぎってこと？<br />
それにしても<strong>MySQLマスタのリダンダンシーの確保をkwsk</strong>って気がしまくりでした。今度出る本に書いてるのかな？</p>
<h3>Geeklogで開発しよう</h3>
<p>WordPress使ってるんですがWordPressのコードにうんざり・・・ってわけじゃないけど、CMSとしてのGeeklogにも興味があるので受講しました。<br />
これは凄いと思ったのが<a href="http://hiroron.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/hiroron.com');">wkyInstaller</a>。GeeklogみたいなWebサーバー型アプリで、アーカイブの取得・サーバーへの転送・アーカイブの展開・ファイルパーミッションの設定・DBアカウントの設定とDBの作成、あたりのインストール作業を全部やってくれるWindowsアプリで、Geeklogはこれに対応していて、ワンクリックでインストールが完了してしまうというものです。<br />
こんなのあったらレンタルサーバーでのインストール数は、ものすごく伸びるんじゃないでしょうか？<br />
Geeklogについては、DBのテーブル情報ドキュメントが表示されるだとか、開発ツールが整ってるらしく、プラグイン開発がWPよりいい感じなら乗り換えちゃおうかなというぐらいの気持ちが出てきました・・・</p>
<h3>懇親会</h3>
<p>回りの席の方にもめぐまれ、たいへん楽しく過ごすことができました:)<br />
お名刺交換させて頂いた方にはボチボチメールさせてもらいますです。</p>
<p>あ、ftp.jaist.ac.jpでダウンロードができないって北陸先端大に電話するの禁止ね！<br />
<h3>関連記事</h3>
<ul class="related_post">
<li><a href="http://www.ryo.com/2007/10/19/354/"  title="Ludiaメモ">Ludiaメモ</a></li>
<li><a href="http://www.ryo.com/2005/10/17/114/"  title="[勝手にCLI Magic]readlineと暮らす">[勝手にCLI Magic]readlineと暮らす</a></li>
<li><a href="http://www.ryo.com/2008/11/17/659/"  title="続 エコぶってみる">続 エコぶってみる</a></li>
<li><a href="http://www.ryo.com/2008/10/27/636/"  title="ubuntu8.10リリース直前のubuntu8.04インストールメモ">ubuntu8.10リリース直前のubuntu8.04インストールメモ</a></li>
<li><a href="http://www.ryo.com/2008/10/17/621/"  title="ubuntuインストール前の準備:USBメモリにインストーラーを用意">ubuntuインストール前の準備:USBメモリにインストーラーを用意</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ryo.com/2008/07/21/543/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ryo.com/2008/07/21/543/" />
	</item>
		<item>
		<title>PostgreSQLで特定のテーブルのみautovacuumの対象外にする</title>
		<link>http://www.ryo.com/2008/03/26/457/</link>
		<comments>http://www.ryo.com/2008/03/26/457/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 09:15:02 +0000</pubDate>
		<dc:creator>りょすけ</dc:creator>
		
		<category><![CDATA[IT関連]]></category>

		<category><![CDATA[autovacuum]]></category>

		<category><![CDATA[ludia]]></category>

		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.ryo.com/2008/03/26/457/</guid>
		<description><![CDATA[
 photo credit: isriya
PostgreSQLの8.3に対応のLudiaの1.5がリリースされたのですが、8.3で利用するとvacuum非対応になり、vacuum後はREINDEXが必要になっていまし [...]]]></description>
			<content:encoded><![CDATA[<p style="float: right; margin-left: 1em"><a href="http://www.flickr.com/photos/isriya/2288735297/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.flickr.com');"><img src="http://farm3.static.flickr.com/2122/2288735297_62b9c0c60e_m.jpg" alt="PostgreSQL" border="0" /></a><br />
<small><a href="http://www.photodropper.com/creative-commons/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.photodropper.com');" title="creative commons"><img src="http://www.ryo.com/wp-content/plugins/photo_dropper/images/cc.png" alt="Creative Commons License" align="middle" border="0" height="16" width="16" /></a> <a href="http://www.photodropper.com/photos/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.photodropper.com');">photo</a> credit: <a href="http://www.flickr.com/people/isriya/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.flickr.com');" title="isriya">isriya</a></small></p>
<p>PostgreSQLの8.3に対応の<a href="http://sourceforge.jp/projects/ludia/" onclick="javascript:pageTracker._trackPageview('/outbound/article/sourceforge.jp');">Ludia</a>の1.5がリリースされたのですが、8.3で利用するとvacuum非対応になり、vacuum後はREINDEXが必要になっていましました。<br />
これは8.3でのHOTがらみの変更で、以前と同じ仕組みだと対応できないということなのでとりあえずは仕方ないのですが、運用上はなんとか対応する必要があります。</p>
<p>ひとつはautovacuumをoffにして運用する方法です。</p>
<p>もうひとつは、Ludiaのインデックスを使用しているテーブルだけautovacuumの対象外にして運用する方法です。</p>
<p>どちらにしても、Ludiaのインデックスはvacuum実行後にreindexを行う必要がありますが、Ludiaのインデックスを使用しているのは一部のテーブルのみという場合、そこだけautovacuumの対象外にして、（たとえ、それがスクリプトの仕事だとしても）定期メンテナンスを行うのが楽です。</p>
<p>特定のテーブルをautovacuumの対象外にするには、以下のようにシステムカタログpg_autovacuumにレコードを作成します。</p>
<p>まず、テーブルのpg_class.oidを調べます。<br />
<code>ryo=# select oid,relname from pg_class where relname = 'groups';<br />
oid  | relname<br />
-------+---------<br />
19123 | groups<br />
(1 row)</code></p>
<p>pg_autovacuum.enabled=falseとしてレコードを作成します。<br />
<code>ryo=# insert into pg_autovacuum values (19123, false, -1, -1, -1, -1,<br />
-1, -1, -1, -1);<br />
INSERT 0 1<br />
Time: 88.973 ms</code></p>
<p>autovacuumとpg_autovacuumについてはドキュメントの<br />
<a href="http://www.postgresql.jp/document/pg830doc/html/routine-vacuuming.html#AUTOVACUUM" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.postgresql.jp');">23.1. 定常的なバキューム作業 - 23.1.4. 自動バキュームデーモン</a><br />
<a href="http://www.postgresql.jp/document/pg830doc/html/catalog-pg-autovacuum.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.postgresql.jp');">44.10. pg_autovacuum</a><br />
を参考にどうぞ。<br />
<h3>関連記事</h3>
<ul class="related_post">
<li><a href="http://www.ryo.com/2008/10/16/613/"  title="ludia.max_n_sort_resultを使うときの注意">ludia.max_n_sort_resultを使うときの注意</a></li>
<li><a href="http://www.ryo.com/2007/10/19/354/"  title="Ludiaメモ">Ludiaメモ</a></li>
<li><a href="http://www.ryo.com/2008/01/19/363/"  title="PostgreSQL使ったWebサイトのDBでありがちなこと">PostgreSQL使ったWebサイトのDBでありがちなこと</a></li>
<li><a href="http://www.ryo.com/2005/10/17/114/"  title="[勝手にCLI Magic]readlineと暮らす">[勝手にCLI Magic]readlineと暮らす</a></li>
<li><a href="http://www.ryo.com/2008/07/21/543/"  title="OSC関西2008楽しかった">OSC関西2008楽しかった</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ryo.com/2008/03/26/457/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ryo.com/2008/03/26/457/" />
	</item>
		<item>
		<title>PostgreSQL使ったWebサイトのDBでありがちなこと</title>
		<link>http://www.ryo.com/2008/01/19/363/</link>
		<comments>http://www.ryo.com/2008/01/19/363/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 13:29:46 +0000</pubDate>
		<dc:creator>りょすけ</dc:creator>
		
		<category><![CDATA[IT関連]]></category>

		<category><![CDATA[ddl]]></category>

		<category><![CDATA[postgresql]]></category>

		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.ryo.com/ryo/?p=363</guid>
		<description><![CDATA[ユーザーアカウントのテーブルのログインIDで
login_name VARCHAR(256) NOT NULL UNIQUE
なんて指定でユニークキーを貼ったのはいいが、Case SensitiveなIDになってしまい、 [...]]]></description>
			<content:encoded><![CDATA[<p>ユーザーアカウントのテーブルのログインIDで<br />
<code>login_name VARCHAR(256) NOT NULL UNIQUE</code><br />
なんて指定でユニークキーを貼ったのはいいが、<a href="http://subtech.g.hatena.ne.jp/miyagawa/20070401" onclick="javascript:pageTracker._trackPageview('/outbound/article/subtech.g.hatena.ne.jp');">Case SensitiveなID</a>になってしまい、気が付いたら大文字小文字を使い分けられてｇｄｇｄになる<br />
# だけど「はてな」はMySQLじゃなかったの？って知らないけど<br />
# どちらにせよはてながPostgreSQLだとは思ってません。もしかしてDBM？;)<br />
<span id="more-363"></span><br />
解決策は<strong>関数インデックス</strong>を使って<br />
<code>CREATE UNIQUE INDEX <em>indexname</em> ON <em>usertable</em> (<strong>lower(login_name)</strong>);</code><br />
とすると、「Ryo」があるとき「ryo」はINSERTできなくなります。<br />
けど、これじゃ「Ryo」がINSERTできちゃうんで、CHECK句を使って<br />
<code>login_name VARCHAR(256) NOT NULL UNIQUE <strong>CHECK (login_name = lower(login_name))</strong></code><br />
ってのもいいかも。<br />
<h3>関連記事</h3>
<ul class="related_post">
<li><a href="http://www.ryo.com/2008/10/16/613/"  title="ludia.max_n_sort_resultを使うときの注意">ludia.max_n_sort_resultを使うときの注意</a></li>
<li><a href="http://www.ryo.com/2008/04/08/479/"  title="Webサイトの分類">Webサイトの分類</a></li>
<li><a href="http://www.ryo.com/2008/04/07/476/"  title="地域ポータル考">地域ポータル考</a></li>
<li><a href="http://www.ryo.com/2008/03/26/457/"  title="PostgreSQLで特定のテーブルのみautovacuumの対象外にする">PostgreSQLで特定のテーブルのみautovacuumの対象外にする</a></li>
<li><a href="http://www.ryo.com/2008/02/28/409/"  title="初めて見たUA">初めて見たUA</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ryo.com/2008/01/19/363/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ryo.com/2008/01/19/363/" />
	</item>
		<item>
		<title>Ludiaメモ</title>
		<link>http://www.ryo.com/2007/10/19/354/</link>
		<comments>http://www.ryo.com/2007/10/19/354/#comments</comments>
		<pubDate>Thu, 18 Oct 2007 15:04:56 +0000</pubDate>
		<dc:creator>りょすけ</dc:creator>
		
		<category><![CDATA[IT関連]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[ludia]]></category>

		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.ryo.com/ryo/?p=354</guid>
		<description><![CDATA[みんな大好きPostgreSQLにSennaを組み込むLudiaのREADME見ながらひととおりやったときのメモ

インデックスアクセスメソッドの登録
RPM版のpostgresqlにインストールしたときには、Ludia [...]]]></description>
			<content:encoded><![CDATA[<p>みんな大好きPostgreSQLにSennaを組み込む<a href="http://ludia.sourceforge.jp/cgi-bin/moin.cgi/LudiaReadme" onclick="javascript:pageTracker._trackPageview('/outbound/article/ludia.sourceforge.jp');">LudiaのREADME</a>見ながらひととおりやったときのメモ<br />
<span id="more-354"></span><br />
<strong>インデックスアクセスメソッドの登録</strong><br />
RPM版のpostgresqlにインストールしたときには、Ludiaの登録に使用するファイルは<br />
/usr/share/pgsql/pgsenna2.sql<br />
になる<br />
インストールはpsql内から<br />
<code>mydb=# \i /usr/share/pgsql/pgsenna2.sql</code><br />
でOK</p>
<p><strong>分かち書きより2-gramがいいかも</strong><br />
たとえば<br />
-まだまだ<br />
-まだまだまだ<br />
-まだまだまだまだ<br />
を、「まだ」で検索すると、分かち書きだと２つめしかヒットしない</p>
<p><strong>スコアの取得</strong><br />
pgs2getscore(TABLE.ctid, &#8216;indexname&#8217;)<br />
だが、ここでctidはレコードの物理位置TIDを表すもので、全てのテーブルで同じ書き方で良い<br />
何故かスコアが全て0になるときは、下記REINDEXを行う必要があると思われ</p>
<p><strong>REINDEX<strike>が必要</strike>は不要</strong><br />
sennaインデックス内ではレコードのTIDを保持している<br />
<strike>TIDはVACUUM FULLやCLUSTERで変更されるため、そういう時はREINDEXが必要<br />
ちなみにautovacuumはfull vacuumを行わないので大丈夫なハズ</strike><br />
最近のLudiaはVACUUM FULLやCLUSTERに対応しており、特にREINDEXを必要としない<br />
<h3>関連記事</h3>
<ul class="related_post">
<li><a href="http://www.ryo.com/2008/10/16/613/"  title="ludia.max_n_sort_resultを使うときの注意">ludia.max_n_sort_resultを使うときの注意</a></li>
<li><a href="http://www.ryo.com/2008/03/26/457/"  title="PostgreSQLで特定のテーブルのみautovacuumの対象外にする">PostgreSQLで特定のテーブルのみautovacuumの対象外にする</a></li>
<li><a href="http://www.ryo.com/2005/10/17/114/"  title="[勝手にCLI Magic]readlineと暮らす">[勝手にCLI Magic]readlineと暮らす</a></li>
<li><a href="http://www.ryo.com/2008/07/21/543/"  title="OSC関西2008楽しかった">OSC関西2008楽しかった</a></li>
<li><a href="http://www.ryo.com/2008/11/17/659/"  title="続 エコぶってみる">続 エコぶってみる</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ryo.com/2007/10/19/354/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ryo.com/2007/10/19/354/" />
	</item>
		<item>
		<title>[勝手にCLI Magic]readlineと暮らす</title>
		<link>http://www.ryo.com/2005/10/17/114/</link>
		<comments>http://www.ryo.com/2005/10/17/114/#comments</comments>
		<pubDate>Tue, 18 Oct 2005 01:56:24 +0000</pubDate>
		<dc:creator>りょすけ</dc:creator>
		
		<category><![CDATA[IT関連]]></category>

		<category><![CDATA[cli]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[postgresql]]></category>

		<category><![CDATA[readline]]></category>

		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.ryo.com/ryo/?p=114</guid>
		<description><![CDATA[bashやpsql、mysqlといったコマンドラインインターフェースと暮らすのは、実はreadlineと暮らすことなのです。
readlineってのはコマンドラインでの編集機能を提供するGNUライブラリで、前述のコマンド [...]]]></description>
			<content:encoded><![CDATA[<p>bashやpsql、mysqlといったコマンドラインインターフェースと暮らすのは、実はreadlineと暮らすことなのです。</p>
<p>readlineってのはコマンドラインでの編集機能を提供するGNUライブラリで、前述のコマンドを含め、たいていのフリーソフトではサポートされているので、基本編集コマンドは是非覚えときましょう。ってことで、俺が日常的に使ってるのをピックアップしてみますた。<br />
上矢印キーを押して履歴が呼び出しできるのを、なんとなく使っている人は多いかもしれませんが、もうちょっとショートカットを覚えとけばかなり便利になります。<br />
Emacs使いには当たり前っぽいショートカットですが、Emacs使わない人にはさっぱりかもしれません。<br />
# 表中ALTとなってるのはホントはMETAなんだけど、実質ALTだろってことで</p>
<table summary="readlineショートカットキー">
<tr>
<th colspan="2">カーソル移動系</th>
</tr>
<tr>
<th>行頭へ</th>
<td>CTRL+a</td>
<th>行末へ</th>
<td>CTRL+e</td>
</tr>
<tr>
<th>一文字進む</th>
<td>CTRL+f</td>
<th>一文字戻る</th>
<td>CTRL+b</td>
</tr>
<tr>
<th>一語進む</th>
<td>ALT+f</td>
<th>一語戻る</th>
<td>ALT+b</td>
</tr>
</table>
<p>ForwardとBackのfとbを覚えましょう。<br />
CTRL+aやALT+bがすぐ使えるようになると、カーソル移動時に矢印キーに手を伸ばし連打する苦行から開放されます。</p>
<table summary="readlineショートカットキー">
<tr>
<th colspan="2">編集系</th>
</tr>
<tr>
<th>(前の)一文字削除</th>
<td>CTRL+h</td>
<th>(後ろの)一文字消去</th>
<td>CTRL+d</td>
</tr>
<tr>
<th>(前の)一語削除</th>
<td>CTRL+w</td>
<th>行末まで削除</th>
<td>CTRL+k</td>
</tr>
</table>
<p>CTRL+hとCTRL+dはバックスペースとDELキー相当です。バックスペースやDELキーは、キーボードによって位置がマチマチなんで、やはりCTRL+hとCTRL+dを覚えておくのがイイかと。<br />
CTRL+wとCTRL+kを覚えれば、呼び出したコマンドの引数を変更して実行なんてのはとてもカンタンになります。</p>
<table summary="readlineショートカットキー">
<tr>
<th colspan="2">ヒストリ系</th>
</tr>
<tr>
<th>前のヒストリ呼び出し</th>
<td>CTRL+p</td>
<th>次のヒストリ呼び出し</th>
<td>CTRL+n</td>
</tr>
<tr>
<th>前方インクリメンタル検索</th>
<td>CTRL+r</td>
<th>後方インクリメンタル検索</th>
<td>CTRL+s</td>
</tr>
</table>
<p>CTRL+pとCTRL+nで、履歴をぐるぐるめくることができます。PreviousとNextって覚えてね。<br />
なかなか使いでがあるのが検索機能です。たとえばpsqlで<br />
<strong>CTRL+r SELECT CTRL+r CTRL+r</strong><br />
なんてすると、以前入力したSELECT文が順番に呼び出せます。途中でCTRL+sを押すと戻れますし、CTRL+gを押すと検索自体をキャンセルします。<br />
# CTRL+sはttyのstopに割り当てられてるので気をつけてね。&#8221;stty stop undef&#8221;しておくか、使わないか、です。</p>
<p>これだけ覚えれば、ターミナルでの操作性が<abbr title="テム・レイエンジンぐらい">３倍</abbr>ぐらいになってるハズだ！<br />
<h3>関連記事</h3>
<ul class="related_post">
<li><a href="http://www.ryo.com/2008/02/28/407/"  title="GMT時刻を知る">GMT時刻を知る</a></li>
<li><a href="http://www.ryo.com/2007/10/19/354/"  title="Ludiaメモ">Ludiaメモ</a></li>
<li><a href="http://www.ryo.com/2007/10/10/351/"  title="UNIX MAGAZINE Classic with DVD">UNIX MAGAZINE Classic with DVD</a></li>
<li><a href="http://www.ryo.com/2008/07/21/543/"  title="OSC関西2008楽しかった">OSC関西2008楽しかった</a></li>
<li><a href="http://www.ryo.com/2008/11/17/659/"  title="続 エコぶってみる">続 エコぶってみる</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ryo.com/2005/10/17/114/feed/</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ryo.com/2005/10/17/114/" />
	</item>
	</channel>
</rss>
