<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="ja" xml:base="http://hrgs.xrea.jp/wp-atom.php">
	<title type="text">GASOLINE STAND</title>
	<subtitle type="text">Just another WordPress weblog</subtitle>

	<updated>2008-12-23T12:16:22Z</updated>

	<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp" />
	<id>http://hrgs.xrea.jp/feed/atom</id>
	

	<generator uri="http://wordpress.org/" version="3.2.1">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jp/hrgs" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="jp/hrgs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[PHPで月末の日付を取得する]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2008/12/23/php%e3%81%a7%e6%9c%88%e6%9c%ab%e3%81%ae%e6%97%a5%e4%bb%98%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b" />
		<id>http://hrgs.xrea.jp/2008/12/23/php%e3%81%a7%e6%9c%88%e6%9c%ab%e3%81%ae%e6%97%a5%e4%bb%98%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b</id>
		<updated>2008-12-23T12:16:22Z</updated>
		<published>2008-12-23T12:05:51Z</published>
		<category scheme="http://hrgs.xrea.jp" term="PHP" />		<summary type="html"><![CDATA[今まで知らなかったんですが以下の方法で取得できるそうです。 date('y-m-t'); date()関数の日付部分に「t」を指定するだけ。もちろん第2パラメータで指定された日付に従った月末日を返します。 echo date('y-m-t', strtotime('2008-02-01')); //2008-02-29]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2008/12/23/php%e3%81%a7%e6%9c%88%e6%9c%ab%e3%81%ae%e6%97%a5%e4%bb%98%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b">&lt;p&gt;今まで知らなかったんですが以下の方法で取得できるそうです。&lt;/p&gt;
&lt;pre&gt;date('y-m-t');&lt;/pre&gt;
&lt;p&gt;date()関数の日付部分に「t」を指定するだけ。もちろん第2パラメータで指定された日付に従った月末日を返します。&lt;/p&gt;
&lt;pre&gt;
echo date('y-m-t', strtotime('2008-02-01'));
//2008-02-29
&lt;/pre&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=LyI98G-BGQE:iS-L9nJGvXg:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=LyI98G-BGQE:iS-L9nJGvXg:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=LyI98G-BGQE:iS-L9nJGvXg:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=LyI98G-BGQE:iS-L9nJGvXg:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=LyI98G-BGQE:iS-L9nJGvXg:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2008/12/23/php%e3%81%a7%e6%9c%88%e6%9c%ab%e3%81%ae%e6%97%a5%e4%bb%98%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2008/12/23/php%e3%81%a7%e6%9c%88%e6%9c%ab%e3%81%ae%e6%97%a5%e4%bb%98%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[超久々の更新]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2008/07/28/hisabisa" />
		<id>http://hrgs.xrea.jp/?p=182</id>
		<updated>2008-07-27T16:09:35Z</updated>
		<published>2008-07-27T16:09:35Z</published>
		<category scheme="http://hrgs.xrea.jp" term="Information" />		<summary type="html"><![CDATA[超久々の更新です。書く事があんまりなかったりコメントスパムの対処が面倒くさかったり、Wordpressのバージョンアップをさぼってたらいつの間にか自動アップデートが出来なくなっていたり(さすがに2.0→2.6はいきなりは無理だった)で、モチベーションが下がりきっていたんですが、 今日、重い腰を上げて手作業で2.0から2.6へ移行させてみました。CMS側がかなりリッチになってます。コメントスパム対策もばっちりです(実はWordpressには標準でそういうプラグインが入っていた・・・)。 大分環境が快適になったので、相変わらず書く事があまりないけどそのうちまた更新しようと思います。 とりあえず今日は簡単な近況報告。 新しくWebアプリを作ってみようと思います。今は企画中。アイデアが固まってきたら記事にするつもりです 会社でやっているJavaの勉強会に参加する事になりました。ちょっとずつ覚えて行こうと思います]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2008/07/28/hisabisa">&lt;p&gt;超久々の更新です。書く事があんまりなかったりコメントスパムの対処が面倒くさかったり、Wordpressのバージョンアップをさぼってたらいつの間にか自動アップデートが出来なくなっていたり(さすがに2.0→2.6はいきなりは無理だった)で、モチベーションが下がりきっていたんですが、&lt;br /&gt;
今日、重い腰を上げて手作業で2.0から2.6へ移行させてみました。CMS側がかなりリッチになってます。コメントスパム対策もばっちりです(実はWordpressには標準でそういうプラグインが入っていた・・・)。&lt;br /&gt;
大分環境が快適になったので、相変わらず書く事があまりないけどそのうちまた更新しようと思います。&lt;/p&gt;
&lt;p&gt;とりあえず今日は簡単な近況報告。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新しくWebアプリを作ってみようと思います。今は企画中。アイデアが固まってきたら記事にするつもりです&lt;/li&gt;
&lt;li&gt;会社でやっているJavaの勉強会に参加する事になりました。ちょっとずつ覚えて行こうと思います&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=xmAjI_Cx4IA:ty9v-HS2T9s:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=xmAjI_Cx4IA:ty9v-HS2T9s:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=xmAjI_Cx4IA:ty9v-HS2T9s:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=xmAjI_Cx4IA:ty9v-HS2T9s:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=xmAjI_Cx4IA:ty9v-HS2T9s:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2008/07/28/hisabisa#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2008/07/28/hisabisa/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[「2&gt;&amp;1 &gt;/dev/null」は間違い]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2007/09/11/about_misunderstand_of_shell_redirecting" />
		<id>http://hrgs.s221.xrea.com/wordpress/?p=151</id>
		<updated>2008-07-27T12:41:15Z</updated>
		<published>2007-09-11T14:56:03Z</published>
		<category scheme="http://hrgs.xrea.jp" term="Linux" /><category scheme="http://hrgs.xrea.jp" term="Bash" /><category scheme="http://hrgs.xrea.jp" term="Shell" />		<summary type="html"><![CDATA[出力結果を完全に破棄するシェルスクリプトを書く時、よく /usr/bin/php -q xxx.php 2>&#038;1 > /dev/null という具合に書いていたんですが、そうやって破棄し続けている筈のデータがなぜか/var/spool/mail/rootに溜まり続けていました。 おかしいと思って調べてみたら、やっぱり間違ってました。 正解は以下の通り。 /usr/bin/php -q xxx.php > /dev/null 2>&#038;1 今回は以下のサイトを参考にさせてもらいました。 シェルのリダイレクトにまつわる失敗]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2007/09/11/about_misunderstand_of_shell_redirecting">&lt;p&gt;出力結果を完全に破棄するシェルスクリプトを書く時、よく&lt;/p&gt;
&lt;pre&gt;/usr/bin/php -q xxx.php 2&gt;&amp;#038;1 &gt; /dev/null&lt;/pre&gt;
&lt;p&gt;という具合に書いていたんですが、そうやって破棄し続けている筈のデータがなぜか/var/spool/mail/rootに溜まり続けていました。&lt;br /&gt;
おかしいと思って調べてみたら、やっぱり間違ってました。&lt;/p&gt;
&lt;p&gt;正解は以下の通り。&lt;/p&gt;
&lt;pre&gt;/usr/bin/php -q xxx.php &gt; /dev/null 2&gt;&amp;#038;1&lt;/pre&gt;
&lt;p&gt;今回は以下のサイトを参考にさせてもらいました。&lt;br /&gt;
&lt;a href="http://sonic64.com/2004-03-28.html"&gt;シェルのリダイレクトにまつわる失敗&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=M538Bxm-uJg:X8vQ8wAL-uU:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=M538Bxm-uJg:X8vQ8wAL-uU:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=M538Bxm-uJg:X8vQ8wAL-uU:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=M538Bxm-uJg:X8vQ8wAL-uU:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=M538Bxm-uJg:X8vQ8wAL-uU:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2007/09/11/about_misunderstand_of_shell_redirecting#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2007/09/11/about_misunderstand_of_shell_redirecting/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[MySQL、SSHの認証が重い、遅い]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2007/09/03/mysql_name_resolving_trouble" />
		<id>http://hrgs.s221.xrea.com/wordpress/?p=149</id>
		<updated>2008-07-27T12:39:49Z</updated>
		<published>2007-09-02T16:18:22Z</published>
		<category scheme="http://hrgs.xrea.jp" term="MySQL" /><category scheme="http://hrgs.xrea.jp" term="Network" /><category scheme="http://hrgs.xrea.jp" term="SSH" />		<summary type="html"><![CDATA[先日、朝出社してみたら突然お客さんの使ってるシステムにアクセスできなくなるという問題が起きました。 DBに接続しないページは見れるので原因はDBサーバーにあるだろうと思い話を聞いてみると、何でもWEBシステム上(WEBサーバー)から繋ごうとするとNGだとか。 付け焼刃的な対応ですんなり直ったことは直ったんですが、原因が意外で驚いたのでメモ。 ググってみたら同じような問題に遭遇した人が何人かいたため参考にさせてもらいました。 CentOS5にApache(2.2)+MySQL(5.0.22)を導入しWEBシステムの開発をしています。 5.5.5. MySQL の DNS の使用 sshのログインが遅い MySQLが認証時にクライアントのIPアドレスの逆引きを行っているのに、クライアントのIPの逆引き設定が行われていないことが原因だったようで、名前解決だけで10秒以上かかる状態のため、認証待ちの接続が溜まり過ぎてWEBシステムにアクセス出来なくなっていたようです。 max_clientの設定値は1000とかに設定していたんですが、実際には100～200程度でアクセスできない状態となっていました(この辺りは&#8221;mysqladmin processlist&#8221;で確認できるらしい)。 とりあえず、MySQLの場合はuserテーブル内でホスト名に&#8221;xxx.com&#8221;のようにドメイン名を使わなければ問題なさそうで、幾らか接続のオーバーヘッドも解消できるようなのでmy.cnfに&#8221;skip-name-resolve&#8221;を付け、再起動して対応しました。 後から気が付いたんですがSSHも同様でした。 今後認証周りが極端に遅い時は名前解決に問題がないかも疑ってみよう。と思いました。]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2007/09/03/mysql_name_resolving_trouble">&lt;p&gt;先日、朝出社してみたら突然お客さんの使ってるシステムにアクセスできなくなるという問題が起きました。&lt;br /&gt;
DBに接続しないページは見れるので原因はDBサーバーにあるだろうと思い話を聞いてみると、何でもWEBシステム上(WEBサーバー)から繋ごうとするとNGだとか。&lt;br /&gt;
付け焼刃的な対応ですんなり直ったことは直ったんですが、原因が意外で驚いたのでメモ。&lt;/p&gt;
&lt;p&gt;ググってみたら同じような問題に遭遇した人が何人かいたため参考にさせてもらいました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://q.hatena.ne.jp/1183620092"&gt;CentOS5にApache(2.2)+MySQL(5.0.22)を導入しWEBシステムの開発をしています。&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dev.mysql.com/doc/refman/4.1/ja/dns.html"&gt;5.5.5. MySQL の DNS の使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.isokiti.tv/~isobetti/index.php?eid=151"&gt;sshのログインが遅い&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MySQLが認証時にクライアントのIPアドレスの逆引きを行っているのに、クライアントのIPの逆引き設定が行われていないことが原因だったようで、名前解決だけで10秒以上かかる状態のため、認証待ちの接続が溜まり過ぎてWEBシステムにアクセス出来なくなっていたようです。&lt;br /&gt;
max_clientの設定値は1000とかに設定していたんですが、実際には100～200程度でアクセスできない状態となっていました(この辺りは&amp;#8221;mysqladmin processlist&amp;#8221;で確認できるらしい)。&lt;/p&gt;
&lt;p&gt;とりあえず、MySQLの場合はuserテーブル内でホスト名に&amp;#8221;xxx.com&amp;#8221;のようにドメイン名を使わなければ問題なさそうで、幾らか接続のオーバーヘッドも解消できるようなのでmy.cnfに&amp;#8221;skip-name-resolve&amp;#8221;を付け、再起動して対応しました。&lt;/p&gt;
&lt;p&gt;後から気が付いたんですがSSHも同様でした。&lt;br /&gt;
今後認証周りが極端に遅い時は名前解決に問題がないかも疑ってみよう。と思いました。&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=iGBWcaiICvM:nllJh9q_Y2w:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=iGBWcaiICvM:nllJh9q_Y2w:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=iGBWcaiICvM:nllJh9q_Y2w:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=iGBWcaiICvM:nllJh9q_Y2w:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=iGBWcaiICvM:nllJh9q_Y2w:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2007/09/03/mysql_name_resolving_trouble#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2007/09/03/mysql_name_resolving_trouble/feed/atom" thr:count="2" />
		<thr:total>2</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[fgetcsv()でファイルを読み込むと日本語が消える？]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2007/08/21/fgetcsv_problem_on_php5" />
		<id>http://hrgs.s221.xrea.com/wordpress/?p=147</id>
		<updated>2008-07-27T12:37:14Z</updated>
		<published>2007-08-21T14:40:45Z</published>
		<category scheme="http://hrgs.xrea.jp" term="PHP" /><category scheme="http://hrgs.xrea.jp" term="charset" /><category scheme="http://hrgs.xrea.jp" term="Locale" />		<summary type="html"><![CDATA[久々にPHPでハマりました。 CSVデータの解析をする時に良く使うfgetcsv()ですが、ある環境で使おうとしたら解析結果から日本語が消えているという現象が発生しました。 ググってみれば割とすぐに引っかかるけどあまり有名な話ではないような気がするのでメモ。 オフィシャルによると、fgetcsv()はロケールを意識するとのことです。 今回この現象が発生したサーバーは環境変数のLANGが&#8221;en_US.UTF-8&#8243;にセットされていたため、この値が参照されていたと思われます。 注意: この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合、 ファイル中の 1 バイトエンコーディングは間違って読み込まれます。 PHP: fgetcsv &#8211; Manualより 解決策としては以下の方法があるようです。 日本語を使用する際はフィールドをダブルクォートで囲む setlocale(LC_ALL, &#8216;ja_JP.EUC&#8217;);等で一時的にロケールを変更する 前者の方法はエクセルが保存するCSVに対してフレンドリーではないのであまり好ましくない気がします(手作業で返還するか変換スクリプトを作ることになる)。]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2007/08/21/fgetcsv_problem_on_php5">&lt;p&gt;久々にPHPでハマりました。&lt;br /&gt;
CSVデータの解析をする時に良く使うfgetcsv()ですが、ある環境で使おうとしたら解析結果から日本語が消えているという現象が発生しました。&lt;br /&gt;
ググってみれば割とすぐに引っかかるけどあまり有名な話ではないような気がするのでメモ。&lt;/p&gt;
&lt;p&gt;オフィシャルによると、fgetcsv()はロケールを意識するとのことです。&lt;br /&gt;
今回この現象が発生したサーバーは環境変数のLANGが&amp;#8221;en_US.UTF-8&amp;#8243;にセットされていたため、この値が参照されていたと思われます。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
注意: この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合、 ファイル中の 1 バイトエンコーディングは間違って読み込まれます。 &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;i&gt;&lt;a href="http://jp.php.net/manual/ja/function.fgetcsv.php"&gt;PHP: fgetcsv &amp;#8211; Manual&lt;/a&gt;&lt;/i&gt;より&lt;/p&gt;
&lt;p&gt;解決策としては以下の方法があるようです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;日本語を使用する際はフィールドをダブルクォートで囲む&lt;/li&gt;
&lt;li&gt;setlocale(LC_ALL, &amp;#8216;ja_JP.EUC&amp;#8217;);等で一時的にロケールを変更する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;前者の方法はエクセルが保存するCSVに対してフレンドリーではないのであまり好ましくない気がします(手作業で返還するか変換スクリプトを作ることになる)。&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=PRSB99CDqvs:deBK7ND7XUo:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=PRSB99CDqvs:deBK7ND7XUo:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=PRSB99CDqvs:deBK7ND7XUo:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=PRSB99CDqvs:deBK7ND7XUo:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=PRSB99CDqvs:deBK7ND7XUo:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2007/08/21/fgetcsv_problem_on_php5#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2007/08/21/fgetcsv_problem_on_php5/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[XREA、sakuraサーバでのTortoiseSVNの設定]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2007/08/02/setting_tortoise_svn_on_shared_hosting_servers" />
		<id>http://hrgs.s221.xrea.com/wordpress/?p=145</id>
		<updated>2008-07-27T12:35:15Z</updated>
		<published>2007-08-01T16:38:01Z</published>
		<category scheme="http://hrgs.xrea.jp" term="Software" /><category scheme="http://hrgs.xrea.jp" term="Sakura" /><category scheme="http://hrgs.xrea.jp" term="Subversion" /><category scheme="http://hrgs.xrea.jp" term="TortoiseSVN" /><category scheme="http://hrgs.xrea.jp" term="Xrea" />		<summary type="html"><![CDATA[XREA、sakuraインターネット等でTortoiseSVN経由でSubversionを使用する方法についてのメモです。 いずれのサービスでもSSH経由でアクセスする形になります。SSHでのアクセスにはパスワード認証と鍵認証があり、鍵認証の方がセキュリティ上好ましいと思いますがここでは簡単なパスワード認証方式で話を進めます。 まずTortoiseSVNの設定画面を開き、&#8221;ネットワーク&#8221;メニューを選択します。&#8221;SSH クライアント&#8221;を指定する箇所があるので、以下の内容を入力します。 [exeファイルのパス]\TortoisePlink.exe -ssh -l [ユーザー名] -pw [パスワード] [exeファイルのパス] = TortoisePlink.exeのあるディレクトリのパス [ユーザー名] = XREA等のユーザーアカウント名 [パスワード] = ユーザーアカウントのパスワード リポジトリにアクセスする際は以下のようなURLを使用します。 svn+ssh://[サーバー名]/[リポジトリまでのフルパス] [サーバー名] = 自分のサーバー名です。hrgs.xrea.jpなど。 [リポジトリまでのフルパス] = リポジトリのあるディレクトリまでのパスです。 XREAの場合、&#8221;/virtual/[ユーザー名]/～&#8221;、sakuraの場合は&#8221;/home/[ユーザー名]/～&#8221;になると思います。 例. svn+ssh://hrgs.xrea.jp/virtual/hrgs/svn/test/trunk 上で指定したURLに対してリポジトリの閲覧やインポートができれば接続成功です。 余談ですがSubversionのリポジトリに対してインポートやファイルの追加を行う場合は、 あらかじめ[auto-props]の設定をやっておくと便利だと思います。 See also: Subversionで管理しているソースコード中の$Id$を自動で展開できるようにする方法 Sourceforge.jpでSubversionの試験運用が始まった模様]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2007/08/02/setting_tortoise_svn_on_shared_hosting_servers">&lt;p&gt;XREA、sakuraインターネット等でTortoiseSVN経由でSubversionを使用する方法についてのメモです。&lt;br /&gt;
いずれのサービスでもSSH経由でアクセスする形になります。SSHでのアクセスにはパスワード認証と鍵認証があり、鍵認証の方がセキュリティ上好ましいと思いますがここでは簡単なパスワード認証方式で話を進めます。&lt;/p&gt;
&lt;p&gt;&lt;a class="imagelink" href="http://hrgs.xrea.jp/wp-content/tortoise_setting1.png" title="tortoise_setting1.png" rel="lightbox"&gt;&lt;img id="image108" src="http://hrgs.xrea.jp/wp-content/tortoise_setting1.thumbnail.png" alt="tortoise_setting1.png" /&gt;&lt;/a&gt;&lt;br /&gt;
まずTortoiseSVNの設定画面を開き、&amp;#8221;ネットワーク&amp;#8221;メニューを選択します。&amp;#8221;SSH クライアント&amp;#8221;を指定する箇所があるので、以下の内容を入力します。&lt;/p&gt;
&lt;pre&gt;[exeファイルのパス]\TortoisePlink.exe -ssh -l [ユーザー名] -pw [パスワード]&lt;/pre&gt;
&lt;p&gt;[exeファイルのパス] = TortoisePlink.exeのあるディレクトリのパス&lt;br /&gt;
[ユーザー名] = XREA等のユーザーアカウント名&lt;br /&gt;
[パスワード] = ユーザーアカウントのパスワード&lt;/p&gt;
&lt;p&gt;リポジトリにアクセスする際は以下のようなURLを使用します。&lt;/p&gt;
&lt;pre&gt;svn+ssh://[サーバー名]/[リポジトリまでのフルパス]&lt;/pre&gt;
&lt;p&gt;[サーバー名] = 自分のサーバー名です。hrgs.xrea.jpなど。&lt;br /&gt;
[リポジトリまでのフルパス] = リポジトリのあるディレクトリまでのパスです。&lt;br /&gt;
XREAの場合、&amp;#8221;/virtual/[ユーザー名]/～&amp;#8221;、sakuraの場合は&amp;#8221;/home/[ユーザー名]/～&amp;#8221;になると思います。&lt;/p&gt;
&lt;p&gt;例.&lt;br /&gt;
svn+ssh://hrgs.xrea.jp/virtual/hrgs/svn/test/trunk&lt;/p&gt;
&lt;p&gt;上で指定したURLに対してリポジトリの閲覧やインポートができれば接続成功です。&lt;br /&gt;
余談ですがSubversionのリポジトリに対してインポートやファイルの追加を行う場合は、&lt;br /&gt;
あらかじめ&lt;a href=""&gt;[auto-props]の設定&lt;/a&gt;をやっておくと便利だと思います。&lt;/p&gt;
&lt;p&gt;See also:&lt;br /&gt;
&lt;a href="http://hrgs.xrea.jp/2006/12/23/subversion_auto_props"&gt;Subversionで管理しているソースコード中の$Id$を自動で展開できるようにする方法&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://hrgs.xrea.jp/2006/12/12/hosting"&gt;Sourceforge.jpでSubversionの試験運用が始まった模様&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=KY2AnV_oQFM:eNZnA6vkkDE:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=KY2AnV_oQFM:eNZnA6vkkDE:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=KY2AnV_oQFM:eNZnA6vkkDE:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=KY2AnV_oQFM:eNZnA6vkkDE:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=KY2AnV_oQFM:eNZnA6vkkDE:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2007/08/02/setting_tortoise_svn_on_shared_hosting_servers#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2007/08/02/setting_tortoise_svn_on_shared_hosting_servers/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[ファイルのパスからファイル名を取得するシェルスクリプト]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2007/07/31/get_file_name_from_path_with_bash" />
		<id>http://hrgs.s221.xrea.com/wordpress/?p=143</id>
		<updated>2008-07-27T12:33:26Z</updated>
		<published>2007-07-30T16:27:07Z</published>
		<category scheme="http://hrgs.xrea.jp" term="Linux" /><category scheme="http://hrgs.xrea.jp" term="Bash" />		<summary type="html"><![CDATA[仕事でシェルスクリプトを書くことになり、その途中で&#8221;特定のファイルのパスからファイル名を抜き出す処理&#8221;を用意する必要が出てきました。 結構面倒なことになるのではと思い、他の人のシェルスクリプトを物色していた所意外と簡単にできることがわかりました。 ただ、どうしてこれが動くのかはさっぱりわかりません。シェルスクリプトについて解説してるサイトをいくつか見たけど載ってないし。そんなワケでメモ。 今回やりたいのは以下のような処理です。 /path/to/something.php ↓ something.php $PATHにパスが含まれていて、$FILENAMEにそのファイル名を格納したい場合の例は以下の通り。 $FILENAME = ${PATH##*/}]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2007/07/31/get_file_name_from_path_with_bash">&lt;p&gt;仕事でシェルスクリプトを書くことになり、その途中で&amp;#8221;特定のファイルのパスからファイル名を抜き出す処理&amp;#8221;を用意する必要が出てきました。&lt;br /&gt;
結構面倒なことになるのではと思い、他の人のシェルスクリプトを物色していた所意外と簡単にできることがわかりました。&lt;br /&gt;
ただ、どうしてこれが動くのかはさっぱりわかりません。シェルスクリプトについて解説してるサイトをいくつか見たけど載ってないし。そんなワケでメモ。&lt;/p&gt;
&lt;p&gt;今回やりたいのは以下のような処理です。&lt;/p&gt;
&lt;pre&gt;/path/to/something.php
↓
something.php&lt;/pre&gt;
&lt;p&gt;$PATHにパスが含まれていて、$FILENAMEにそのファイル名を格納したい場合の例は以下の通り。&lt;/p&gt;
&lt;pre&gt;$FILENAME = ${PATH##*/}&lt;/pre&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=70ayUsNr6TQ:0IIp3V1uxyA:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=70ayUsNr6TQ:0IIp3V1uxyA:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=70ayUsNr6TQ:0IIp3V1uxyA:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=70ayUsNr6TQ:0IIp3V1uxyA:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=70ayUsNr6TQ:0IIp3V1uxyA:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2007/07/31/get_file_name_from_path_with_bash#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2007/07/31/get_file_name_from_path_with_bash/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[メールアドレスのドメイン名でソートするSQL]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2007/07/18/sort_records_with_email_domains" />
		<id>http://hrgs.s221.xrea.com/wordpress/?p=141</id>
		<updated>2008-07-27T12:32:02Z</updated>
		<published>2007-07-17T16:01:50Z</published>
		<category scheme="http://hrgs.xrea.jp" term="PostgreSQL" /><category scheme="http://hrgs.xrea.jp" term="SQL" />		<summary type="html"><![CDATA[PostgreSQLを使ってるシステムで&#8221;メールアドレスのドメイン名を使ってソートやグルーピング&#8221;をすることになったので調べてみました。とりあえずメモ。 SELECT substring([column] from '@(.+)$') as domain, count([column]) as count FROM [table_name] WHERE [conditions] GROUP BY domain ORDER BY count DESC [column] = メールアドレスのカラム名 [table_name] = テーブル名 [conditions] = where節の条件 See also: PostgresでDB内の各テーブルの行数とサイズを調べる方法 レコードをランダムに抽出するSQL(PostgreSQL)]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2007/07/18/sort_records_with_email_domains">&lt;p&gt;PostgreSQLを使ってるシステムで&amp;#8221;メールアドレスのドメイン名を使ってソートやグルーピング&amp;#8221;をすることになったので調べてみました。とりあえずメモ。&lt;/p&gt;
&lt;pre&gt;
SELECT substring([column] from '@(.+)$') as domain, count([column]) as count
FROM [table_name]
WHERE [conditions]
GROUP BY domain
ORDER BY count DESC
&lt;/pre&gt;
&lt;p&gt;[column] = メールアドレスのカラム名&lt;br /&gt;
[table_name] = テーブル名&lt;br /&gt;
[conditions] = where節の条件&lt;/p&gt;
&lt;p&gt;See also:&lt;br /&gt;
&lt;a href="/2006/10/04/postgres_db_stat"&gt;PostgresでDB内の各テーブルの行数とサイズを調べる方法&lt;/a&gt;&lt;br /&gt;
&lt;a href="/2006/05/03/how_to_fetch_records_at_random"&gt;レコードをランダムに抽出するSQL(PostgreSQL)&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=InGboOYFvSQ:e6fVcH-L4DI:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=InGboOYFvSQ:e6fVcH-L4DI:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=InGboOYFvSQ:e6fVcH-L4DI:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=InGboOYFvSQ:e6fVcH-L4DI:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=InGboOYFvSQ:e6fVcH-L4DI:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2007/07/18/sort_records_with_email_domains#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2007/07/18/sort_records_with_email_domains/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[SoftBankの端末でHTMLフォームのSubmitが押せない]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2007/05/11/softbank_html_restriction" />
		<id>http://hrgs.s221.xrea.com/wordpress/?p=139</id>
		<updated>2008-07-27T12:29:46Z</updated>
		<published>2007-05-10T16:17:26Z</published>
		<category scheme="http://hrgs.xrea.jp" term="HTML" /><category scheme="http://hrgs.xrea.jp" term="SoftBank" />		<summary type="html"><![CDATA[超久しぶりに書きます。今回はC#でもPHPでもCSSでもなく、HTMLです。 SoftBank(Vodafone)の端末用に書いているページで、単純なHTMLフォームなのになぜかSubmitボタンが押せないという何とも予想外な現象に出くわしました。調べても原因が見つからないし。もしかしたら同じ所ではまる人がいるかもしれない。 ということでメモしておきます。 原因は、&#60;form&#62;タグが崩れてたからでした。 (当たり前過ぎるからどこにも載ってなかった・・・？) 例. &#60;center&#62; &#60;form&#62; &#60;input type="text" name="xxx"&#62; &#60;/center&#62; &#60;input type="submit" name="go"&#62; &#60;/form&#62; 上の例ではcenterタグがformより先に始まってるので&#60;/center&#62;が&#60;/form&#62;より先に来ることは許されない。&#60;/center&#62;の後でinputタグが来るなんてもっての他。ということのようです。 他のキャリアでも試してみたところ、auも同じでした。DoCoMo(FOMA)だけは崩れたHTMLでも認識しました。 最初はSoftBankとauの端末がヘボいのかなと思ったけど、本来HTMLは開始タグと閉じタグの順序は守らなければいけないというルールがあったようななかったような。 極力守っておいた方が良さそうです。 よくよく考えてみると、こういう壊れたHTMLを正しく解析するのは難しそう。]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2007/05/11/softbank_html_restriction">&lt;p&gt;超久しぶりに書きます。今回はC#でもPHPでもCSSでもなく、HTMLです。&lt;/p&gt;
&lt;p&gt;SoftBank(Vodafone)の端末用に書いているページで、単純なHTMLフォームなのになぜかSubmitボタンが押せないという何とも予想外な現象に出くわしました。調べても原因が見つからないし。もしかしたら同じ所ではまる人がいるかもしれない。&lt;br /&gt;
ということでメモしておきます。&lt;br /&gt;
原因は、&amp;lt;form&amp;gt;タグが崩れてたからでした。&lt;br /&gt;
(当たり前過ぎるからどこにも載ってなかった・・・？)&lt;/p&gt;
&lt;p&gt;例.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;center&amp;gt;
&amp;lt;form&amp;gt;
&amp;lt;input type="text" name="xxx"&amp;gt;
&amp;lt;/center&amp;gt;
&amp;lt;input type="submit" name="go"&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;
&lt;p&gt;上の例ではcenterタグがformより先に始まってるので&amp;lt;/center&amp;gt;が&amp;lt;/form&amp;gt;より先に来ることは許されない。&amp;lt;/center&amp;gt;の後でinputタグが来るなんてもっての他。ということのようです。&lt;/p&gt;
&lt;p&gt;他のキャリアでも試してみたところ、auも同じでした。DoCoMo(FOMA)だけは崩れたHTMLでも認識しました。&lt;br /&gt;
最初はSoftBankとauの端末がヘボいのかなと思ったけど、本来HTMLは開始タグと閉じタグの順序は守らなければいけないというルールがあったようななかったような。&lt;br /&gt;
極力守っておいた方が良さそうです。&lt;/p&gt;
&lt;p&gt;よくよく考えてみると、こういう壊れたHTMLを正しく解析するのは難しそう。&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=u9v2raOFvr0:u4SmvLxFS0I:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=u9v2raOFvr0:u4SmvLxFS0I:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=u9v2raOFvr0:u4SmvLxFS0I:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=u9v2raOFvr0:u4SmvLxFS0I:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=u9v2raOFvr0:u4SmvLxFS0I:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2007/05/11/softbank_html_restriction#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2007/05/11/softbank_html_restriction/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>admin</name>
						<uri>http://</uri>
					</author>
		<title type="html"><![CDATA[PostgreSQL8系のダンプをPostgreSQL7系でリストアする]]></title>
		<link rel="alternate" type="text/html" href="http://hrgs.xrea.jp/2007/02/06/down_grade_restoring_in_postgres" />
		<id>http://hrgs.s221.xrea.com/wordpress/?p=137</id>
		<updated>2008-07-27T12:27:57Z</updated>
		<published>2007-02-05T16:28:18Z</published>
		<category scheme="http://hrgs.xrea.jp" term="PostgreSQL" /><category scheme="http://hrgs.xrea.jp" term="SQL" />		<summary type="html"><![CDATA[PostgreSQLの7.4のダンプを8.1でリストアするのは簡単に出来ますが、8.1のダンプを7.4のでリストアするのは意外と大変です。そのまま実行すると、エラーの嵐になってまともにリストアできません。 何とかスッキリ解決させる方法はないものかと、色々探したんですが有効な情報は見当たらず。仕方がないのでとりあえず、ダンプを直接いじる事で対応しました。こんなことをする事は滅多にないだろうけど一応メモ。 もっと効率の良い方法を知っている人がいれば教えて欲しいです。 まず、今回相手にしたDBの特徴は以下の通り。 テーブルの主キーはserial型 外部キーには制約が掛かっている トリガーが使用されている(あるテーブルにinsert,deleteが行われると別のテーブルにinsert,deleteを実行) ・・・正直、2,3は自分がDBを設計するなら絶対使いません。ややこしくなるし、DBエンジンの移行を難しくするし。とりあえず、このDBに対して修正が必要な箇所をまとめると、 &#8220;create function&#8221;を書き換える serial型の定義を書き換える serial型が使用するシーケンスの初期化SQLを書き換える ダンプファイルを&#8221;create table, create function&#8221;系、データ系、その他(alter tableやcreate index等)で分割する というような変換が必要になります。 より具体的には以下の通り。 Postgres8.1側で&#8221;pg_dump -a xxxx > data.sql&#8221;を実行してデータをdata.sqlという名前で保存する。 7.4系と8.1系の両方で&#8221;pg_dump -sOx xxxx&#8221;を実行し、スキーマ(テーブル定義情報など)をファイルに保存する。名前は例えば、schema7.sql、schema8.sqlなど。 schema8.sqlの、create functionの部分をschema7.sqlの内容で置き換える。 schema8.sqlでは、serial型で定義したフィールドが以下のように変形する 可能性があるため、&#8221;regclass&#8221;というキーワードで検索し、逐次&#8221;serial&#8221;型に直す。(※1) 例.exampleというテーブルのidフィールドの場合. "id integer DEFAULT nextval(('"example_id_seq"'::text)::regclass) NOT NULL" ↓ "id serial NOT NULL" schema8.sqlのcreate function, create table系のSQLを&#8221;pre.sql&#8221;、 create index, alter table系のSQLを&#8221;post.sql&#8221;等の名前で、2つに別けて保存する。 (リストアの手順を&#8221;テーブル作成&#8221;→&#8221;データ流し込み&#8221;→&#8221;インデックス作成、制約追加&#8221;としたいため。) data.sqlに含まれているシーケンスの初期化SQLは7系では使用できないので 修正する。エディタなどで正規表現置き換えが出来る場合、以下の正規表現を適用する。 [...]]]></summary>
		<content type="html" xml:base="http://hrgs.xrea.jp/2007/02/06/down_grade_restoring_in_postgres">&lt;p&gt;PostgreSQLの7.4のダンプを8.1でリストアするのは簡単に出来ますが、8.1のダンプを7.4のでリストアするのは意外と大変です。そのまま実行すると、エラーの嵐になってまともにリストアできません。&lt;/p&gt;
&lt;p&gt;何とかスッキリ解決させる方法はないものかと、色々探したんですが有効な情報は見当たらず。仕方がないのでとりあえず、ダンプを直接いじる事で対応しました。こんなことをする事は滅多にないだろうけど一応メモ。&lt;br /&gt;
もっと効率の良い方法を知っている人がいれば教えて欲しいです。&lt;/p&gt;
&lt;p&gt;まず、今回相手にしたDBの特徴は以下の通り。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;テーブルの主キーはserial型&lt;/li&gt;
&lt;li&gt;外部キーには制約が掛かっている&lt;/li&gt;
&lt;li&gt;トリガーが使用されている(あるテーブルにinsert,deleteが行われると別のテーブルにinsert,deleteを実行)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;・・・正直、2,3は自分がDBを設計するなら絶対使いません。ややこしくなるし、DBエンジンの移行を難しくするし。とりあえず、このDBに対して修正が必要な箇所をまとめると、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#8220;create function&amp;#8221;を書き換える&lt;/li&gt;
&lt;li&gt;serial型の定義を書き換える&lt;/li&gt;
&lt;li&gt;serial型が使用するシーケンスの初期化SQLを書き換える&lt;/li&gt;
&lt;li&gt;ダンプファイルを&amp;#8221;create table, create function&amp;#8221;系、データ系、その他(alter tableやcreate index等)で分割する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;というような変換が必要になります。&lt;br /&gt;
より具体的には以下の通り。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Postgres8.1側で&amp;#8221;pg_dump -a xxxx &gt; data.sql&amp;#8221;を実行してデータをdata.sqlという名前で保存する。
&lt;/li&gt;
&lt;li&gt;7.4系と8.1系の両方で&amp;#8221;pg_dump -sOx xxxx&amp;#8221;を実行し、スキーマ(テーブル定義情報など)をファイルに保存する。名前は例えば、schema7.sql、schema8.sqlなど。
&lt;/li&gt;
&lt;li&gt;schema8.sqlの、create functionの部分をschema7.sqlの内容で置き換える。
&lt;/li&gt;
&lt;li&gt;schema8.sqlでは、serial型で定義したフィールドが以下のように変形する&lt;br /&gt;
可能性があるため、&amp;#8221;regclass&amp;#8221;というキーワードで検索し、逐次&amp;#8221;serial&amp;#8221;型に直す。(&lt;a name="070206-1-t" href="#070206-1-d"&gt;※1&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;例.exampleというテーブルのidフィールドの場合.
"id integer DEFAULT nextval(('"example_id_seq"'::text)::regclass) NOT NULL"
↓
"id serial NOT NULL"&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;schema8.sqlのcreate function, create table系のSQLを&amp;#8221;pre.sql&amp;#8221;、&lt;br /&gt;
create index, alter table系のSQLを&amp;#8221;post.sql&amp;#8221;等の名前で、2つに別けて保存する。&lt;br /&gt;
(リストアの手順を&amp;#8221;テーブル作成&amp;#8221;→&amp;#8221;データ流し込み&amp;#8221;→&amp;#8221;インデックス作成、制約追加&amp;#8221;としたいため。)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;data.sqlに含まれているシーケンスの初期化SQLは7系では使用できないので&lt;br /&gt;
修正する。エディタなどで正規表現置き換えが出来る場合、以下の正規表現を適用する。&lt;br /&gt;
シーケンスが&amp;#8221;テーブル名_フィールド名_seq&amp;#8221;という命名規則で作られている必要がある。&lt;br /&gt;
(命名規則が異なる場合は命名規則に合わせて調整する。)&lt;/p&gt;
&lt;pre&gt;pg_catalog\.setval\(pg_catalog\.pg_get_serial_sequence\('([A-Za-z0-9_]+)', '([A-Za-z0-9_]+)'\), ([0-9]+), ([a-z]+)\);
↓
setval('\1_\2_seq', \3, \4);&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;リストア先のDBを用意する。文字コードがEUC-JPなら、&lt;br /&gt;
createdb -E EUC-JP xxxxx&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;以下の順番でSQLを実行する。
&lt;pre&gt;
psql xxxx &lt; pre.sql   # 関数、テーブル、シーケンス作成
psql xxxx &lt; data.sql  # データ流し込み、シーケンス初期化
psql xxxx &lt; post.sql  # インデックス作成、制約追加&lt;/pre&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a name="070206-1-d" href="#070206-1-t"&gt;※１&lt;/a&gt;：&lt;br /&gt;
または&amp;#8221;id integer DEFAULT nextval(&amp;#8216;&amp;#8221;example_id_seq&amp;#8221;&amp;#8216;::text) NOT NULL&amp;#8221;としてシーケンス&amp;#8221;example_id_seq&amp;#8221;を別途作成する。この時、シーケンス名は&amp;#8221;テーブル名_フィールド名_seq&amp;#8221;という命名規則で名前を付けておく。&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=G6pubkH0PCU:R6WoRnSHZIM:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=G6pubkH0PCU:R6WoRnSHZIM:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=G6pubkH0PCU:R6WoRnSHZIM:_421Q-Vzu_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?d=_421Q-Vzu_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/hrgs?a=G6pubkH0PCU:R6WoRnSHZIM:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/hrgs?i=G6pubkH0PCU:R6WoRnSHZIM:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://hrgs.xrea.jp/2007/02/06/down_grade_restoring_in_postgres#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://hrgs.xrea.jp/2007/02/06/down_grade_restoring_in_postgres/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
	</feed>

