<?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>江淼的Blog &#187; 编程</title>
	<atom:link href="http://www.jiangmiao.org/blog/c/programme/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jiangmiao.org/blog</link>
	<description>简单生活</description>
	<lastBuildDate>Wed, 08 Sep 2010 05:13:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Vim Javscript 缩进插件: Simple Javascript Indenter v1.2.1</title>
		<link>http://www.jiangmiao.org/blog/1216.html</link>
		<comments>http://www.jiangmiao.org/blog/1216.html#comments</comments>
		<pubDate>Fri, 03 Sep 2010 15:46:38 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[Simple Javascript Indenter]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=1216</guid>
		<description><![CDATA[名称: Simple Javascript indenter 类别: Javascript Indent 版本: v1.2.1 作者: JiangMiao 更新: 2010-09-08 兼容: vim 7.0+ 下载地址: 本地: simple-javascript-indenter-v1.2.1.tar.gz Github: http://github.com/JiangMiao/simple-javascript-indenter Vim: http://www.vim.org/scripts/script.php?script_id=3227 描述 支持任意多层函数嵌套的vim缩进插件, 特别适合 Jquery之类的库。 安装: 复制 indent/javascript.vim 到 ~/.vim/indent 缩进效果: 更新历史 2010-09-08 Version 1.2.1 NEW: 支持无括号的if else while try catch finally else if 2010-09-06 Version 1.1.0 NEW: 支持赋值语句的缩进]]></description>
			<content:encoded><![CDATA[<p><strong>名称: </strong>Simple Javascript indenter<br />
<strong>类别:</strong> Javascript Indent<br />
<strong>版本: </strong>v1.2.1<br />
<strong>作者: </strong>JiangMiao<br />
<strong>更新:</strong> 2010-09-08<br />
<strong>兼容: </strong>vim 7.0+<br />
<strong>下载地址:  </strong><br />
本地: <a href='http://www.jiangmiao.org/blog/wp-content/uploads/2010/09/simple-javascript-indenter-v1.2.1.tar.gz'>simple-javascript-indenter-v1.2.1.tar.gz</a><br />
Github: <a href='http://github.com/JiangMiao/simple-javascript-indenter' target='_blank'>http://github.com/JiangMiao/simple-javascript-indenter</a><br />
Vim: <a href='http://www.vim.org/scripts/script.php?script_id=3227' target='_blank'>http://www.vim.org/scripts/script.php?script_id=3227</a></p>
<p><strong>描述</strong><br />
支持任意多层函数嵌套的vim缩进插件, 特别适合 Jquery之类的库。</p>
<p><strong>安装:</strong><br />
复制 indent/javascript.vim 到 ~/.vim/indent</p>
<p><strong>缩进效果:</strong><br />
<a href="http://www.jiangmiao.org/blog/wp-content/uploads/2010/09/vim_simple_javascript_indenter_v1.2.0.png" target="_blank"><img src="http://www.jiangmiao.org/blog/wp-content/uploads/2010/09/vim_simple_javascript_indenter_v1.2.0-84x300.png" alt="" title="vim_simple_javascript_indenter_v1.2.0" width="84" height="300" class="alignnone size-medium wp-image-1248" /></a></p>
<p><strong>更新历史</strong><br />
2010-09-08 Version 1.2.1<br />
	NEW: 支持无括号的if else while try catch finally else if</p>
<p>2010-09-06 Version 1.1.0<br />
	NEW: 支持赋值语句的缩进</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/1216.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby下使用SWIG封装libcurl</title>
		<link>http://www.jiangmiao.org/blog/1163.html</link>
		<comments>http://www.jiangmiao.org/blog/1163.html#comments</comments>
		<pubDate>Thu, 02 Sep 2010 05:44:13 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[3 ruby/c++]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=1163</guid>
		<description><![CDATA[本文通过在ruby下使用SWIG封装libcurl来简要描述如何通过SWIG来扩展ruby。 关于SWIG的入门使用可参见 使用SWIG扩展ruby性能 关于SWIG: SWIG全称为 Simplified Wrapper and Interface Generator，通过swig可以方便快捷的使用c/c++扩展php, ruby等语言以提高性能或满足其它用途。 关于libcurl: libcurl是一个著名的http/ftp库，通过libcurl可能轻松通过http/ftp协议访问网络。 流程: 相关文件: SWIG的封装文件 curl.i %module curl %{ #include &#60;curl/curl.h&#62; %} /* type definations */ typedef int CURLoption; typedef int CURLcode; /* import constants */ %constant int CURL_GLOBAL_ALL = CURL_GLOBAL_ALL; %constant int CURLOPT_URL = CURLOPT_URL; /* import functions */ int curl_global_init(long flags); void [...]]]></description>
			<content:encoded><![CDATA[<p>本文通过在ruby下使用SWIG封装libcurl来简要描述如何通过SWIG来扩展ruby。<br />
关于SWIG的入门使用可参见 <a href="http://www.jiangmiao.org/blog/268.html">使用SWIG扩展ruby性能</a></p>
<p><strong>关于SWIG:</strong><br />
SWIG全称为 Simplified Wrapper and Interface Generator，通过swig可以方便快捷的使用c/c++扩展php, ruby等语言以提高性能或满足其它用途。</p>
<p><strong>关于libcurl:</strong><br />
libcurl是一个著名的http/ftp库，通过libcurl可能轻松通过http/ftp协议访问网络。</p>
<p><strong>流程:</strong><br />
<a href="http://www.jiangmiao.org/blog/wp-content/uploads/2010/09/ruby_swig1.png"><img src="http://www.jiangmiao.org/blog/wp-content/uploads/2010/09/ruby_swig1.png" alt="" title="ruby_swig" width="256" height="347" class="alignnone size-full wp-image-1188" /></a></p>
<p><strong>相关文件:</strong><br />
<strong>SWIG的封装文件 curl.i</strong></p>
<pre name="code" class="cpp">%module curl
%{
#include &lt;curl/curl.h&gt;
%}

/* type definations */
typedef int CURLoption;
typedef int CURLcode;

/* import constants */
%constant int CURL_GLOBAL_ALL = CURL_GLOBAL_ALL;
%constant int CURLOPT_URL = CURLOPT_URL;

/* import functions */
int curl_global_init(long flags);
void curl_global_cleanup();

CURL* curl_easy_init();
void curl_easy_cleanup(CURL* curl);
CURLcode curl_easy_setopt(CURL* curl, CURLoption opt, int v);
CURLcode curl_easy_setopt(CURL* curl, CURLoption opt, const char* v);
CURLcode curl_easy_perform(CURL* curl);
</pre>
<p><strong>ruby的extconf.rb文件</strong></p>
<pre name="code" class="ruby">require 'mkmf'
%w{stdc++ curl}.each do|lib|
	$libs = append_library $libs, lib
end
create_makefile 'curl'
</pre>
<p><strong>编译build.sh:</strong></p>
<pre name="code" class="ruby">#通过curl.i生成封装后的cpp源码
swig -c++ -ruby curl.i &#038;&#038;

#通过extconf.rb生成Makefile
ruby extconf.rb &#038;&#038;

#通过Makefile生成目标扩展
make
</pre>
<p><strong>测式文件ruby_test.rb</strong></p>
<pre name="code" class="ruby">#!/usr/bin/env ruby
require 'curl'
include Curl

url = ARGV[0] || 'http://www.google.com'

p curl_global_init(CURL_GLOBAL_ALL)
p curl =  curl_easy_init()
p curl_easy_setopt(curl, CURLOPT_URL, url)
p curl_easy_perform(curl)
p curl_easy_cleanup(curl)
p curl_global_cleanup()
</pre>
<p>本文相关的完整源码可在github下载:  <a href="http://github.com/JiangMiao/ruby_swig_curl_demo" target="_blank">http://github.com/JiangMiao/ruby_swig_curl_demo</a><br />
git clone git://github.com/JiangMiao/ruby_swig_curl_demo.git</p>
<p><strong>相关链接:</strong><br />
<a href="http://curl.haxx.se/libcurl/" target="_blank">libcurl</a><br />
<a href="http://www.swig.org/" target="_blank">SWIG</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/1163.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby的预定义变量</title>
		<link>http://www.jiangmiao.org/blog/702.html</link>
		<comments>http://www.jiangmiao.org/blog/702.html#comments</comments>
		<pubDate>Tue, 23 Mar 2010 14:15:27 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[1 ruby/基础]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=702</guid>
		<description><![CDATA[一、异常 名称 描述 相当于 &#36;! 捕获的异常 Exception &#36;@ 异常的backtrace Exception#backtrace 例： begin raise "err msg" rescue p &#36;! # #&#60;RuntimeError: err msg&#62; p &#36;@ #["(irb):2:in `irb_binding'", "/usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'", ":0"] end 二、正则 对于 m=str.match(pattern) 变量 性质 描述 相当于 &#36;&#038; 只读,本地 匹配的项 m[0] &#36;` 只读,本地 匹配的字符串之前未匹配的部分 m.pre_match &#36;\&#8217; 只读,本地 匹配的字符串之后未匹配的部分 m.post_match &#36;+ 只读,本地 最后一个匹配的项 m[m.size-1] &#36;1,&#36;2 只读,本地 [...]]]></description>
			<content:encoded><![CDATA[<p><span class="easyformat"><b>一、异常</b></p>
<table >
<tr>
<th>名称</th>
<th>描述</th>
<th>相当于</th>
</tr>
<tr >
<td>&#36;!</td>
<td>捕获的异常</td>
<td>Exception</td>
</tr>
<tr >
<td>&#36;@</td>
<td>异常的backtrace</td>
<td>Exception#backtrace</td>
</tr>
</table>
<p>例：</p>
<pre class="ruby" name="code">
begin
	raise "err msg"
rescue
	p &#36;! # #&lt;RuntimeError: err msg&gt;
	p &#36;@ #["(irb):2:in `irb_binding'", "/usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'", ":0"]
end
</pre>
<p><b>二、正则</b><br />
对于 m=str.match(pattern)</p>
<table >
<tr>
<th>变量</th>
<th>性质</th>
<th>描述</th>
<th>相当于</th>
</tr>
<tr >
<td>&#36;&#038;</td>
<td>只读,本地</td>
<td>匹配的项</td>
<td>m[0]</td>
</tr>
<tr >
<td>&#36;`</td>
<td>只读,本地</td>
<td>匹配的字符串之前未匹配的部分</td>
<td>m.pre_match</td>
</tr>
<tr >
<td>&#36;\&#8217;</td>
<td>只读,本地</td>
<td>匹配的字符串之后未匹配的部分</td>
<td>m.post_match</td>
</tr>
<tr >
<td>&#36;+</td>
<td>只读,本地</td>
<td>最后一个匹配的项</td>
<td>m[m.size-1]</td>
</tr>
<tr >
<td>&#36;1,&#36;2</td>
<td>只读,本地</td>
<td>所指定的匹配的项</td>
<td>m[n]</td>
</tr>
<tr >
<td>&#36;~</td>
<td>本地</td>
<td>匹配的结果</td>
<td>m</td>
</tr>
</table>
<p>例:</p>
<pre class="ruby" name="code">
"start-111-222-333-444-end" =~ /(\d+)-(\d+)-(\d+)-(\d+)/
p &#36;&#038; #"111-222-333-444"
p &#36;` # "start-"
p &#36;' # "-end"
p &#36;+ # "444"
p &#36;1 # "111"
p &#36;2 # "222"
p &#36;~[3] # "333"
</pre>
<p><b>三、IO/String</b></p>
<table >
<tr>
<th>描述</th>
<th>默认</th>
<th>说明</th>
</tr>
<tr >
<td>&#36;_</td>
<td></td>
<td>gets,readline最后读入的行</td>
</tr>
<tr >
<td>&#36;F</td>
<td></td>
<td>&#36;_.split 仅当选项-a为真时</td>
</tr>
<tr >
<td>&#36;/</td>
<td>&#8220;\n&#8221;</td>
<td>用于gets,readline等分割符</td>
</tr>
<tr >
<td>&#36;\</td>
<td>nil</td>
<td>print与IO.write的分割符</td>
</tr>
<tr >
<td>&#36;,</td>
<td>nil</td>
<td>Array#join的分割符</td>
</tr>
<tr >
<td>&#36;;</td>
<td>nil</td>
<td>String#split的分割符</td>
</tr>
<tr >
<td>&#36;.</td>
<td></td>
<td>ARGF.lineno</td>
</tr>
<tr >
<td>&#36;<</td>
<td></td>
<td>ARGF</td>
</tr>
<tr >
<td>&#36;*</td>
<td></td>
<td>ARGV</td>
</tr>
<tr >
<td>&#36;></td>
<td></td>
<td>&#36;defout</td>
</tr>
<tr >
<td>&#36;defout</td>
<td></td>
<td>print与printf的输出变量，缺省为&#36;stdio</td>
</tr>
<tr >
<td>&#36;stdin</td>
<td></td>
<td>当前标准输入 缺省 STDIN</td>
</tr>
<tr >
<td>&#36;stdout</td>
<td></td>
<td>当前标准输出 缺省 STDOUT</td>
</tr>
<tr >
<td>&#36;stderr</td>
<td></td>
<td>当前标准错误输出 缺省 STDERR</td>
</tr>
</table>
<p><b>四、进程</b></p>
<table >
<tr>
<th>名称</th>
<th>描述</th>
</tr>
<tr >
<td>&#36;0</td>
<td>当前ruby程序名</td>
</tr>
<tr >
<td>&#36;&#36;</td>
<td>Process.pid</td>
</tr>
<tr >
<td>&#36;?</td>
<td>最后执行的外部程序的返回状态</td>
</tr>
</table>
<p><b>四、其它</b></p>
<table >
<tr>
<th>名称</th>
<th>描述</th>
</tr>
<tr >
<td>&#36;:</td>
<td>&#36;LOAD_PATH</td>
</tr>
<tr >
<td>&#36;&#8221;</td>
<td>已require的module，用于避免二次载入</td>
</tr>
<tr >
<td>&#36;DEBUG</td>
<td>是否为DEBUG状态, -d &#8211;debug开启则为真</td>
</tr>
<tr >
<td>&#36;FILENAME</td>
<td>&#36;<.filename</td>
</tr>
<tr >
<td>&#36;SAFE</td>
<td>安全等级</td>
</tr>
<tr >
<td>&#36;VERBOSE</td>
<td>verbose选项是开启则为真</td>
</tr>
<tr >
<td>&#36;-O</td>
<td>&#36;/</td>
</tr>
<tr >
<td>&#36;-a</td>
<td>-a选项开启则为真</td>
</tr>
<tr >
<td>&#36;-d</td>
<td>&#36;DEBUG</td>
</tr>
<tr >
<td>&#36;-F</td>
<td>&#36;;</td>
</tr>
<tr >
<td>&#36;-I</td>
<td>&#36;:</td>
</tr>
<tr >
<td>&#36;-l</td>
<td>-lis选项开启则为真</td>
</tr>
<tr >
<td>&#36;-p</td>
<td>-pis选项开启则为真</td>
</tr>
</table>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/702.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何编写RubyGems</title>
		<link>http://www.jiangmiao.org/blog/639.html</link>
		<comments>http://www.jiangmiao.org/blog/639.html#comments</comments>
		<pubDate>Sun, 21 Mar 2010 09:50:51 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[1 ruby/基础]]></category>
		<category><![CDATA[4 rubygems]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=639</guid>
		<description><![CDATA[目标：通过本文章学习并编写一个gem &#8216;hello&#8217; 一、认识RubyGems 1、什么是RubyGems RubyGems是ruby下的包管理系统。最著名gem的当属Rails 2、gem的基本文件布局 文件名 类别 描述 gemspec 文件 gem的规范说明。 lib 文件夹 用于lib文件的存放 bin 文件夹 可执行文件 ext 文件夹 c/c++源文件 tests 文件夹 单元测试文件 3、gemspec文件规范常用项 名称 类别 缺省 描述 *name String gem名称 *version String 版本号 *date Time Time.now Gem创建日期 *platform String Gem::Platform::Ruby gems所使用的平台 *summary String gem描述 *require_paths Array ["lib"] 用于require调用时的默认路径 files Array gems所包含的文件 以上为关键的几个选项，其中打*号的为必须的项，若要添加作者，可执行文件等选项可参见Gem规范 3、编译 [...]]]></description>
			<content:encoded><![CDATA[<p>目标：通过本文章学习并编写一个gem &#8216;hello&#8217;</p>
<p><span class="easyformat"><b>一、认识RubyGems</b><br />
<b>1、什么是RubyGems</b><br />
RubyGems是ruby下的包管理系统。最著名gem的当属Rails</p>
<p><b>2、gem的基本文件布局</b></p>
<table >
<tr>
<td>文件名</td>
<td>类别</td>
<td>描述</td>
</tr>
<tr >
<td>gemspec</td>
<td>文件</td>
<td>gem的规范说明。</td>
</tr>
<tr >
<td>lib</td>
<td>文件夹</td>
<td>用于lib文件的存放</td>
</tr>
<tr >
<td>bin</td>
<td>文件夹</td>
<td>可执行文件</td>
</tr>
<tr >
<td>ext</td>
<td>文件夹</td>
<td>c/c++源文件</td>
</tr>
<tr >
<td>tests</td>
<td>文件夹</td>
<td>单元测试文件</td>
</tr>
</table>
<p><b>3、gemspec文件规范常用项</b></p>
<table >
<tr>
<td>名称</td>
<td>类别</td>
<td>缺省</td>
<td>描述</td>
</tr>
<tr >
<td>*name</td>
<td>String</td>
<td></td>
<td>gem名称</td>
</tr>
<tr >
<td>*version</td>
<td>String</td>
<td></td>
<td>版本号</td>
</tr>
<tr >
<td>*date</td>
<td>Time</td>
<td>Time.now</td>
<td>Gem创建日期</td>
</tr>
<tr >
<td>*platform</td>
<td>String</td>
<td>Gem::Platform::Ruby</td>
<td>gems所使用的平台</td>
</tr>
<tr >
<td>*summary</td>
<td>String</td>
<td></td>
<td>gem描述</td>
</tr>
<tr >
<td>*require_paths</td>
<td>Array</td>
<td>["lib"]</td>
<td>用于require调用时的默认路径</td>
</tr>
<tr >
<td>files</td>
<td>Array</td>
<td></td>
<td>gems所包含的文件</td>
</tr>
</table>
<p>以上为关键的几个选项，其中打*号的为<b>必须</b>的项，若要添加作者，可执行文件等选项可参见<a href="http://docs.rubygems.org/read/chapter/20" target="_blank">Gem规范</a></p>
<p><b>3、编译</b><br />
gem build gemspec文件</p>
<p><b>4、安装</b><br />
gem install 生成的gem</p>
<p><b>二、编写最简gem hello</b><br />
<b>1、创建文件与文件夹</b><br />
hello/hello.gemspec<br />
hello/lib/hello.rb</p>
<p><b>2、编写 hello.gemspec</b></p>
<pre class="ruby" name="code">
Gem::Specification.new do |s|
	s.name = 'hello'
	s.version = '0.1.0'
	s.summary = 'hello gems'
	s.files = ["lib/hello.rb"]
end
</pre>
<p><b>3、编写 lib/hello.rb</b></p>
<pre class="ruby" name="code">
def hello
	"HELLO"
end
</pre>
<p><b>4、编译</b></p>
<blockquote><p>
gem build hello.gemspec
</p></blockquote>
<p><b>5、安装</b></p>
<blockquote><p>
gem install hello
</p></blockquote>
<p><b>6、测试</b></p>
<pre class="ruby" name="code">
require 'rubygems'
require 'hello'
puts hello
</pre>
<p>&#8212;-<br />
输出HELLO 测试成功</p>
<p><b>三、相关链接</b><br />
1、<a href="http://rubygems.org/" target="_blank">RubyGems官方网站</a><br />
2、<a href="http://rubyforge.org" target="_blank">Rubyforge</a><br />
2、<a href="http://docs.rubygems.org/read/chapter/20" target="_blank">Gem规范</a><br />
3、<a href="http://www.jiangmiao.org/blog/wp-content/uploads/2010/03/hello.tar.gz">本文的hello gem源码</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/639.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL 删除所有函数</title>
		<link>http://www.jiangmiao.org/blog/563.html</link>
		<comments>http://www.jiangmiao.org/blog/563.html#comments</comments>
		<pubDate>Fri, 18 Dec 2009 19:08:15 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=563</guid>
		<description><![CDATA[运行命令： SELECT ns.nspname &#124;&#124; '.' &#124;&#124; proname &#124;&#124; '(' &#124;&#124; oidvectortypes(proargtypes) &#124;&#124; ')' FROM pg_proc INNER JOIN pg_namespace AS ns ON (pg_proc.pronamespace = ns.oid) WHERE ns.nspname = 'public' ORDER BY proname; 可以得到所有函数列表 再依次执行DROP FUNCTION 即可。]]></description>
			<content:encoded><![CDATA[<p>运行命令：</p>
<pre lang="pgsql">
SELECT ns.nspname || '.' || proname || '(' || oidvectortypes(proargtypes) || ')'
FROM pg_proc INNER JOIN pg_namespace AS ns ON (pg_proc.pronamespace = ns.oid)
WHERE ns.nspname = 'public' ORDER BY proname;</pre>
<div>可以得到所有函数列表</div>
<div>再依次执行DROP FUNCTION 即可。</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/563.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给PostgreSQL添加MySQL的unix_timestamp与from_unixtime函数</title>
		<link>http://www.jiangmiao.org/blog/430.html</link>
		<comments>http://www.jiangmiao.org/blog/430.html#comments</comments>
		<pubDate>Mon, 06 Jul 2009 13:38:52 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=430</guid>
		<description><![CDATA[MySQL的2个常用函数unix_timestamp()与from_unixtime PostgreSQL并不提供，但通过PostgreSQL强大的扩展性可以轻松的解决问题。 话说远在天边，尽在眼前，文档看仔细，问题迎仞解。PostgreSQL 题供extract与date_part取epoch即可 即 unix_timestamp() = round(date_part(&#8216;epoch&#8217;,now())) from_unixtime(int) = to_timestamp(int) 添加函数unix_timestamp() CREATE FUNCTION unix_timestamp() RETURNS integer AS $$ SELECT (date_part(&#8216;epoch&#8217;,now()))::integer; $$ LANGUAGE SQL IMMUTABLE; 添加函数from_unixtime() CREATE FUNCTION from_unixtime(int) RETURNS timestamp AS $$ SELECT to_timestamp($1)::timestamp; $$ LANGUAGE SQL IMMUTABLE;]]></description>
			<content:encoded><![CDATA[<p>MySQL的2个常用函数unix_timestamp()与from_unixtime PostgreSQL并不提供，但通过PostgreSQL强大的扩展性可以轻松的解决问题。<br />
话说远在天边，尽在眼前，文档看仔细，问题迎仞解。PostgreSQL 题供extract与date_part取epoch即可<br />
即<br />
unix_timestamp() = round(date_part(&#8216;epoch&#8217;,now()))<br />
from_unixtime(int) = to_timestamp(int)</p>
<p>添加函数unix_timestamp()<br />
CREATE FUNCTION unix_timestamp() RETURNS integer AS $$<br />
SELECT (date_part(&#8216;epoch&#8217;,now()))::integer;<br />
$$ LANGUAGE SQL IMMUTABLE;</p>
<p>添加函数from_unixtime()<br />
CREATE FUNCTION from_unixtime(int) RETURNS timestamp AS $$<br />
SELECT to_timestamp($1)::timestamp;<br />
$$ LANGUAGE SQL IMMUTABLE;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/430.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>放弃MySQL是正确的选择</title>
		<link>http://www.jiangmiao.org/blog/411.html</link>
		<comments>http://www.jiangmiao.org/blog/411.html#comments</comments>
		<pubDate>Tue, 21 Apr 2009 09:40:36 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[闲聊]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=411</guid>
		<description><![CDATA[前不久因IBM要收购Sun而转用PostgreSQL，没想到Sun被Oracle收购了。这下MySQL的前途就更加暗淡了。 加之PostgreSQL越发熟悉，越来越喜欢了。]]></description>
			<content:encoded><![CDATA[<p>前不久因IBM要收购Sun而转用PostgreSQL，没想到Sun被Oracle收购了。这下MySQL的前途就更加暗淡了。</p>
<p>加之PostgreSQL越发熟悉，越来越喜欢了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/411.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>很麻烦,PostgreSQL不支持integer到boolean的转换</title>
		<link>http://www.jiangmiao.org/blog/406.html</link>
		<comments>http://www.jiangmiao.org/blog/406.html#comments</comments>
		<pubDate>Sun, 05 Apr 2009 10:49:58 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=406</guid>
		<description><![CDATA[如数据库test拥有字段 banned boolean  使用命令 insert into test(banned) values (0) 返回为   ERROR:  column &#8220;banned&#8221; is of type boolean but expression is of type integer LINE 1: insert into test(banned) values(0) 很是不方便。用cast也没用  难到只能用规定的 TRUE,&#8217;t',&#8217;true&#8217;,'y&#8217;,'yes&#8217;,&#8217;1&#8242;吗？ 但奇怪的是select 0::boolean支能显示false]]></description>
			<content:encoded><![CDATA[<p>如数据库test拥有字段<br />
banned boolean </p>
<p>使用命令<br />
insert into test(banned) values (0)</p>
<p>返回为</p>
<p> </p>
<p>ERROR:  column &#8220;banned&#8221; is of type boolean but expression is of type integer</p>
<p>LINE 1: insert into test(banned) values(0)<br />
很是不方便。用cast也没用 <br />
难到只能用规定的 TRUE,&#8217;t',&#8217;true&#8217;,'y&#8217;,'yes&#8217;,&#8217;1&#8242;吗？</p>
<p>但奇怪的是select 0::boolean支能显示false</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/406.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL like无法使用索引</title>
		<link>http://www.jiangmiao.org/blog/404.html</link>
		<comments>http://www.jiangmiao.org/blog/404.html#comments</comments>
		<pubDate>Wed, 01 Apr 2009 17:59:40 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=404</guid>
		<description><![CDATA[使用 like 进行查询 如 explain select* from titles where title like &#8216;h%&#8217;  一直显示 Seq Scan。 google+百度后，得知要设定locale为C才能使用like。 使用命令 initdb &#8211;local=C -D 集群路径 建立新的集群]]></description>
			<content:encoded><![CDATA[<p>使用 like 进行查询 如 explain select* from titles where title like &#8216;h%&#8217;  一直显示 Seq Scan。 google+百度后，得知要设定locale为C才能使用like。</p>
<p>使用命令 initdb &#8211;local=C -D 集群路径 建立新的集群</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/404.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL 触发器(Trigger) 使用</title>
		<link>http://www.jiangmiao.org/blog/395.html</link>
		<comments>http://www.jiangmiao.org/blog/395.html#comments</comments>
		<pubDate>Wed, 01 Apr 2009 09:11:37 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=395</guid>
		<description><![CDATA[目标： 当表alphas插入新行时，更新titles的alpha_at为NOW() 当表alphas删除行时，更新titles的alpha_at为NULL 1、安装plpgsql语言到数据库 createlang plpgsql DATABASE 2、建立一个返回为trigger的过程 CREATE OR REPLACE FUNCTION after_alphas_id() RETURNS trigger AS $BODY$ BEGIN IF( TG_OP='DELETE' ) THEN UPDATE titles SET alpha_at=null WHERE id=OLD.title_id; ELSE UPDATE titles SET alpha_at=NOW() WHERE id=NEW.title_id; END IF; RETURN NULL; END; $BODY$ LANGUAGE 'plpgsql'; 3、创建触发器 CREATE TRIGGER after_alphas_id AFTER INSERT OR DELETE ON alphas FOR EACH [...]]]></description>
			<content:encoded><![CDATA[<p>目标：<br />
当表alphas插入新行时，更新titles的alpha_at为NOW()<br />
当表alphas删除行时，更新titles的alpha_at为NULL</p>
<p>1、安装plpgsql语言到数据库</p>
<pre>createlang plpgsql DATABASE</pre>
<p>2、建立一个返回为trigger的过程</p>
<pre>
CREATE OR REPLACE FUNCTION after_alphas_id() RETURNS trigger AS $BODY$
BEGIN
  IF( TG_OP='DELETE' ) THEN
    UPDATE titles SET alpha_at=null WHERE id=OLD.title_id;
  ELSE
    UPDATE titles SET alpha_at=NOW() WHERE id=NEW.title_id;
  END IF;
  RETURN NULL;
END;

$BODY$
  LANGUAGE 'plpgsql';
</pre>
<p>3、创建触发器</p>
<pre>
CREATE TRIGGER after_alphas_id
  AFTER INSERT OR DELETE
  ON alphas
  FOR EACH ROW
  EXECUTE PROCEDURE after_alphas_id();</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/395.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
