<?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>五四陈科学院-坚信科学，分享技术 &#187; postgresql</title>
	<atom:link href="http://www.54chen.com/tag/postgresql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.54chen.com</link>
	<description>PHP、JAVA、缓存、架构、经验、分享</description>
	<lastBuildDate>Sat, 11 Feb 2012 17:09:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>校内UGC技术讲座：postgreSQL Search slide共享</title>
		<link>http://www.54chen.com/architecture/ugc-technical-seminars-in-schools-postgresql-search-slide-sharing.html</link>
		<comments>http://www.54chen.com/architecture/ugc-technical-seminars-in-schools-postgresql-search-slide-sharing.html#comments</comments>
		<pubDate>Fri, 31 Jul 2009 07:07:20 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[架构研究]]></category>
		<category><![CDATA[bamboo]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.54chen.com/architecture/ugc-technical-seminars-in-schools-postgresql-search-slide-sharing.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>PostgreSQL Search 提前放出这次Tech Talk的slide，show给所有人。讲述的主题是postgreSQL的基础和利用bamboo做全文检索的方法。<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><div id="__ss_1794282" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="PostgreSQL Search" href="http://www.slideshare.net/guestb75c3a/postgresql-search">PostgreSQL Search</a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=postgresql-090731015526-phpapp02&amp;stripped_title=postgresql-search" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=postgresql-090731015526-phpapp02&amp;stripped_title=postgresql-search" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>提前放出这次Tech Talk的slide，show给所有人。讲述的主题是<a href="http://www.54chen.com/601-%e5%8e%9f%e5%88%9b%e4%bd%bf%e7%94%a8postgresql%e6%90%ad%e5%bb%ba%e6%af%94lucene%e6%96%b9%e4%be%bfn%e5%80%8d%e7%9a%84%e5%85%a8%e6%96%87%e6%90%9c%e7%b4%a2-%e7%ac%ac%e4%b8%80%e9%83%a8%e5%88%86/">postgreSQL</a>的基础和利用bamboo做全文检索的方法。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/architecture/ugc-technical-seminars-in-schools-postgresql-search-slide-sharing.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>[原创]mediawiki安装改进手记-使用mediawikit和postgresql搭建有强大搜索功能的wiki</title>
		<link>http://www.54chen.com/php-tech/mediawiki-pgsql.html</link>
		<comments>http://www.54chen.com/php-tech/mediawiki-pgsql.html#comments</comments>
		<pubDate>Tue, 21 Jul 2009 00:18:07 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[wiki搭建]]></category>

		<guid isPermaLink="false">http://www.54chen.com/php-tech/mediawiki-pgsql.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>[ 文章作者：陈臻 本文版本：v1.1 最后修改：2009.7.28 转载请注明原文链接：http://www.54chen.com/c/640 ] 在yahoo工程技术部，最有趣的事情当属打开工程技术部的wiki，慢慢阅读来自前辈们的大作。 yahoo以前使用的是twiki，后来更换了mediawiki，扩展了postgresql的搜索，使mediawiki的搜索功能得到了加强，这里，记录下我在校内搭建一整套的手记： 第一步.准备php和postgresql环境 大环境：因为是内部系统，所以图省事，WEB使用的是一个ubuntu的机器，安装这些丝毫不用费力了。就是先用apt安装php、nginx，源码包安装lighttpd取spawn-cgi一枚备用。源码包安装postgresql8.3.3。 #apt-get install php5 php5-pgsql php5-mbstring php5-cgi #apt-get install nginx #wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz #tar -xvf lighttpd-1.4.19.tar.gz #cd lighttpd-1.4.19/ #./configure #make #cp src/spawn-fcgi /usr/local/bin/spawn-fcgi (这里图快，没使用php-fpm) #adduser www #spawn-fcgi -a 127.0.0.1 -p 9000 -C &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>[ 文章作者：陈臻 本文版本：v1.1 最后修改：2009.7.28 转载请注明原文链接：<a href="http://www.54chen.com/c/640">http://www.54chen.com/c/640</a> ]</p>
<p>在yahoo工程技术部，最有趣的事情当属打开工程技术部的wiki，慢慢阅读来自前辈们的大作。</p>
<p>yahoo以前使用的是twiki，后来更换了mediawiki，扩展了postgresql的搜索，使mediawiki的搜索功能得到了加强，这里，记录下我在校内搭建一整套的手记：</p>
<p><strong>第一步.准备php和postgresql环境</strong></p>
<p>大环境：因为是内部系统，所以图省事，WEB使用的是一个<a href="http://www.54chen.com/c/372">ubuntu</a>的机器，安装这些丝毫不用费力了。就是先用apt安装php、nginx，源码包安装lighttpd取<span style="font-size: x-small;"><a href="http://www.54chen.com/c/640"><span style="font-size: x-small;">spawn-cgi</span></a>一枚备用。源码包安装postgresql8.3.3。</span></p>
<p>#apt-get install php5 php5-pgsql php5-mbstring php5-cgi</p>
<p>#apt-get install nginx</p>
<p>#wget <a href="http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz">http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz</a><br />
#tar -xvf lighttpd-1.4.19.tar.gz<br />
#cd lighttpd-1.4.19/<br />
#./configure<br />
#make<br />
#cp src/spawn-fcgi /usr/local/bin/spawn-fcgi</p>
<p>(这里图快，没使用php-fpm)</p>
<p>#adduser www</p>
<p>#spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi</p>
<p>修改php.ini文件<br />
cgi.fix_pathinfo=1; 这样php-cgi方能正常使用SCRIPT_FILENAME这个变量</p>
<p>在/etc/nginx/sites-enable/default中添加以下代码</p>
<p>server {<br />
listen 80; //端口<br />
server_name wiki.54chen.com; //虚拟域名<br />
access_log /var/log/nginx/hwiki.54chen.com.access.log; //访问日志<br />
location / {<br />
root /home/wiki.54chen.com; //size根目录<br />
index index.php;<br />
}<br />
location ~ \.php$ { #php fastcgi的配置<br />
fastcgi_pass 127.0.0.1:9000; #php fastcgi的代理端口与ip<br />
fastcgi_index index.php;<br />
fastcgi_param SCRIPT_FILENAME /home/wiki.54chen.com$fastcgi_script_name; #要处理的php文件的路径<br />
include /etc/nginx/fastcgi_params; #fastcgi的参数文件地址<br />
}<br />
}</p>
<p>启动</p>
<pre>/etc/init.d/nginx start</pre>
<p>大功告成！</p>
<p>postgresql的安装请进<span style="font-size: x-small; color: #3366cc;"><a href="http://www.54chen.com/c/601"><span style="font-size: x-small; color: #3366cc;">使用postgreSQL+bamboo搭建比lucene方便N倍的全文搜索 第一部分</span></a></span></p>
<p><strong>第二步.安装mediawiki</strong></p>
<p>#wget <a href="http://downloads.sourceforge.net/sourceforge/wikipedia/mediawiki-1.8.2.tar.gz?use_mirror=jaist">http://downloads.sourceforge.net/sourceforge/wikipedia/mediawiki-1.8.2.tar.gz?use_mirror=jaist</a></p>
<p>#解压到/home/wiki.54chen.com</p>
<p>通过浏览器访问安装，安装时选择postgresql.</p>
<p>将wiki目录下connfig目录中的LocalSettings.php剪切到wiki目录中，把$wgEnableUploads = false;改为$wgEnableUploads = true;（这样允许上传图片了），还有就是把Wiki的Logo改成您所需要的$wgLogo = "$wgStylePath/common/images/wiki.png"。</p>
<p><strong>第三步.修改meidawiki及修改sql</strong><br />
1.修改DB<br />
按标题搜的触发器修改为<br />
<code>CREATE OR REPLACE FUNCTION mediawiki.ts2_page_title()<br />
RETURNS "trigger" AS<br />
$BODY$<br />
BEGIN<br />
IF TG_OP = 'INSERT' THEN<br />
NEW.titlevector = to_tsvector('chinesecfg',COALESCE(REPLACE(NEW.page_title,'/',' '),''));<br />
ELSIF NEW.page_title != OLD.page_title THEN<br />
NEW.titlevector := to_tsvector('chinesecfg',COALESCE(REPLACE(NEW.page_title,'/',' '),''));<br />
END IF;<br />
RETURN NEW;<br />
END;<br />
$BODY$<br />
LANGUAGE 'plpgsql' VOLATILE;<br />
ALTER FUNCTION mediawiki.ts2_page_title() OWNER TO wikiuser;</code></p>
<p>按内容搜索的触发器修改为<br />
<code><br />
CREATE OR REPLACE FUNCTION mediawiki.ts2_page_text()<br />
RETURNS "trigger" AS<br />
$BODY$<br />
BEGIN<br />
IF TG_OP = 'INSERT' THEN<br />
NEW.textvector = to_tsvector('chinesecfg',COALESCE(NEW.old_text,''));<br />
ELSIF NEW.old_text != OLD.old_text THEN<br />
NEW.textvector := to_tsvector('chinesecfg',COALESCE(NEW.old_text,''));<br />
END IF;<br />
RETURN NEW;<br />
END;<br />
$BODY$<br />
LANGUAGE 'plpgsql' VOLATILE;<br />
ALTER FUNCTION mediawiki.ts2_page_text() OWNER TO wikiuser;</code></p>
<p>对标题的索引修改<br />
<code><br />
drop index ts2_page_title;<br />
CREATE INDEX ts2_page_title<br />
ON mediawiki.page<br />
USING gin<br />
(titlevector);</code></p>
<p>对内容的索引修改<br />
<code><br />
drop index ts2_page_text;<br />
CREATE INDEX ts2_page_text<br />
ON mediawiki.pagecontent<br />
USING gin<br />
(textvector);</code></p>
<p>修改 includes/SearchPosgres.php 146行：<br />
<code>$prefix = $wgDBversion &lt; 8.3 ? "'default'," : "'chinesecfg',";</code></p>
<p>大功告成，搜索的时候就使用了bamboo的分词来搜了，如果还有兴趣可以加强175-179行的sql就能得到更加强大的wiki。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/php-tech/mediawiki-pgsql.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>[原创]使用postgreSQL+bamboo搭建比lucene方便N倍的全文搜索 第二部分</title>
		<link>http://www.54chen.com/_linux_/postgresql-bamboo-lucene-part2.html</link>
		<comments>http://www.54chen.com/_linux_/postgresql-bamboo-lucene-part2.html#comments</comments>
		<pubDate>Fri, 17 Jul 2009 07:21:09 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[架构研究]]></category>
		<category><![CDATA[bamboo]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[全文检索]]></category>
		<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/postgresql-bamboo-lucene-part2.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>[文章作者：陈臻 本文版本：v1.0 最后修改：2009.7.17 转载请注明原文链接：http://www.54chen.com/_linux_/postgresql-bamboo-lucene-part2.html ] 书接上回。上回说到建立好一整套的中文分词和pgsql的环境，这回来说如何搜。 一、基础篇 本回从一条sql开始： select * from dbname where field_name @@ 'aa&#124;bb' order by rank(field_name, 'aa&#124;bb'); 从这个sql字面意思讲解：从 dbname这个表中查field_name匹配aa或者是bb的词，并且按照他们的匹配的RANK排序。 基本上明白上面这段话后，来学习四个概念：tsvector、tsquery、@@ 、gin。 1.tsvector: 在postgreSQL 8.3自带支持全文检索功能，在之前的版本中需要安装配置tsearch2才能使用。它提供两个数据类型（tsvector,tsquery），并且通过 动态检索自然语言文档的集合，定位到最匹配的查询结果，tsvector正是其中之一。 一个tsvector的值是唯一分词的分类列表，把一话一句词格式化为不同的词条，在进行分词处理的时候，tsvector会自动去掉分词中重复的词条，按照一定的顺序装入。例如 SELECT 'a fat cat sat on a mat and ate a &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>[文章作者：陈臻 本文版本：v1.0 最后修改：2009.7.17 转载请注明原文链接：<a href="http://www.54chen.com/_linux_/postgresql-bamboo-lucene-part2.html">http://www.54chen.com/_linux_/postgresql-bamboo-lucene-part2.html</a> ]</p>
<p>书接上回。上回说<a href="http://www.54chen.com/c/601">到建立好一整套的中文分词和pgsql的环境</a>，这回来说如何搜。</p>
<p><strong>一、基础篇 </strong></p>
<p>本回从一条sql开始：</p>
<p><span class="MsgBodyText">select * from dbname where field_name @@ 'aa|bb' order by rank(field_name, 'aa|bb');</span></p>
<p>从这个sql字面意思讲解：从 dbname这个表中查field_name匹配aa或者是bb的词，并且按照他们的匹配的RANK排序。</p>
<p>基本上明白上面这段话后，来学习四个概念：<strong>tsvector、</strong><strong>tsquery、</strong>@@ 、<strong>gin。</strong></p>
<p>1.<strong>tsvector:</strong></p>
<p>在postgreSQL 8.3自带支持全文检索功能，在之前的版本中需要安装配置tsearch2才能使用。它提供两个数据类型（tsvector,tsquery），并且通过 动态检索自然语言文档的集合，定位到最匹配的查询结果，tsvector正是其中之一。</p>
<p>一个tsvector的值是唯一分词的分类列表，把一话一句词格式化为不同的词条，在进行分词处理的时候，tsvector会自动去掉分词中重复的词条，按照一定的顺序装入。例如</p>
<p>SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector;<br />
tsvector<br />
----------------------------------------------------<br />
'a' 'on' 'and' 'ate' 'cat' 'fat' 'mat' 'rat' 'sat'</p>
<p>通过tsvector把一个字符串按照空格进行分词，这可以把分词后的词按照出现的次数排成一排（还会按词长度）。</p>
<p>对于英文和中文的全文检索我们还要看下面这条sql:</p>
<p>SELECT to_tsvector('english', 'The Fat Rats');<br />
to_tsvector<br />
-----------------<br />
'fat':2 'rat':3</p>
<p>to_tsvector函数来是tsvector规格化的，在其中可指定所使用的分词。</p>
<p>2.<strong>tsquery：</strong></p>
<p>顾名思义,tsquery,表示的应该是查询相关的.tsquery是存储用于检索的词条.并且可以联合使用boolean 操作符来连接, &amp; (AND), | (OR), and ! (NOT). 使用括号(),可以强制分为一组.</p>
<p>同时,tsquery 在做搜索的时候,也可以使用权重,并且每个词都可以使用一个或者多个权重标记,这样在检索的时候,会匹配相同权重的信息.跟上面的tsvector相同,tsquery也有一个to_tsquery函数.</p>
<p>3.<strong>@@：</strong></p>
<p>在postgresql中全文检索匹配操作使用@@ <a href="http://www.54chen.com/c/441">操作符</a>,如果一个<br />
tsvector(document) 匹配到 tsquery(query)则返回true.</p>
<p>看一个简单的例子：</p>
<p>SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector @@ 'cat &amp; rat'::tsquery;<br />
?column?<br />
----------<br />
t<br />
我们在处理索引的时候还是要使用他们的函数如下：<br />
SELECT to_tsvector('fat cats ate fat rats') @@ to_tsquery('fat &amp; rat');<br />
?column?<br />
----------<br />
t<br />
并且操作符 @@ 可以使用text作为tsvector和tsquery.如下操作符可以使使用的方法</p>
<p>tsvector @@ tsquery<br />
tsquery  @@ tsvector<br />
text @@ tsquery<br />
text @@ text<br />
上面的前两种我们已经使用过了,但是后两种,<br />
text @@ tsquery 等同于 to_tsvector(x) @@ y.<br />
text @@ text 等同于 to_tsvector(x) @@ plainto_tsquery(y).（~）plainto_tsquery在后面讲。。。</p>
<p><strong>4.gin:</strong></p>
<p>gin是一种索引的名称，全文索引用的。</p>
<p>我们可以通过创建gin索引来加速检索速度.例如</p>
<p>CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', body));</p>
<p>创建索引可以有多种方式.索引的创建甚至可以连接两个列:<br />
CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', title || body));</p>
<p><strong>二、提高篇</strong></p>
<p>基础知识学完了，应该上阵了，为了实现全文检索，我们需要把一个文档创建一个tsvector 格式，并且通过tsquery实现用户的查询，在查询中我们返回一个按照重要性排序的查询结果。</p>
<p>先看一个to_tsquery的sql:</p>
<p>SELECT to_tsquery('english', 'Fat | Rats:AB');<br />
to_tsquery<br />
------------------<br />
'fat' | 'rat':AB</p>
<p>可以看出，to_tsquery函数在处理查询<a href="http://www.54chen.com/c/358">文本</a>的时候，查询文本的单个词之间要使用逻辑操作符（&amp; (AND), | (OR) and ! (NOT)）连接（或者使用括号）。</p>
<p>如果执行下面这条sql就会出错：</p>
<p>SELECT to_tsquery('english', 'Fat  Rats');</p>
<p>plainto_tsquery函数却可以提供一个标准的tsquery，如上面的<a href="http://www.54chen.com/c/216">例子</a>，plainto_tsquery会自动加上逻辑&amp;操作符。<br />
SELECT plainto_tsquery('english', 'Fat  Rats');</p>
<p>plainto_tsquery<br />
-----------------<br />
'fat' &amp; 'rat'<br />
但是plainto_tsquery函数不能够识别逻辑操作符和权重标记。<br />
SELECT plainto_tsquery('english', 'The Fat &amp; Rats:C');<br />
plainto_tsquery<br />
---------------------<br />
'fat' &amp; 'rat' &amp; 'c'</p>
<p><strong>三、终结篇</strong></p>
<p>看完上面的一堆后，千言万语汇成一句话，本文主要讲的是一条sql，在加了第一部分里所讲述的扩展后，使用下面的sql，从一个字段中搜一句话，还要排序出来：</p>
<p>select * from tabname where to_tsvector('chinesecfg',textname) @@ plainto_tsquery('搜点啥') order by ts_rank(to_tsvector('chinesecfg',textname),plainto_tsquery('搜点啥')) limit 10;</p>
<p>之前的create table create index就不写了。授人以渔才是关键。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/postgresql-bamboo-lucene-part2.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>[原创]使用postgreSQL+bamboo搭建比lucene方便N倍的全文搜索 第一部分</title>
		<link>http://www.54chen.com/_linux_/postgresql-bamboo-lucene-fulltextindex.html</link>
		<comments>http://www.54chen.com/_linux_/postgresql-bamboo-lucene-fulltextindex.html#comments</comments>
		<pubDate>Wed, 01 Jul 2009 10:06:27 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[架构研究]]></category>
		<category><![CDATA[lucence]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[搜索]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/postgresql-bamboo-lucene-fulltextindex.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>[文章作者：陈臻 本文版本：v1.2 最后修改：2009.7.7 转载请注明原文链接：http://www.54chen.com/_linux_/postgresql-bamboo-lucene-fulltextindex.html ] 修正：一些“--”（连续的两个杠）被转成了全角的“-”（一个杠）了，运行不过的试试-变成-- 所有用到到包有： cmake-2.6.4.tar.gz (编nlpbamboo用) CRF++-0.53.tar.gz(同上) nlpbamboo-1.1.1.tar.bz2（分词用） postgreSQL-8.3.3.tar.gz（索引用） 安装pgsql tar -zxvf postgreSQL-8.3.3.tar.gz cd postgre-8.3.3 ./configure --prefix=/opt/pgsql make make install useradd postgre chown -R postgre.postgre /opt/pgsql su - postgre vi ~postgre/.bash_profile 添加 export PATH PGLIB=/opt/pgsql/lib PGDATA=/data/PGSearch PATH=$PATH:/opt/pgsql/bin &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>[文章作者：陈臻 本文版本：v1.2 最后修改：2009.7.7 转载请注明原文链接：<a href="http://www.54chen.com/_linux_/postgresql-bamboo-lucene-fulltextindex.html">http://www.54chen.com/_linux_/postgresql-bamboo-lucene-fulltextindex.html</a> ]</p>
<p>修正：一些“--”（连续的两个杠）被转成了全角的“-”（一个杠）了，运行不过的试试-变成--</p>
<p><strong>所有用到到包有：</strong></p>
<p><a href="http://www.54chen.com/c/601">cmake</a>-2.6.4.tar.gz (编nlpbamboo用)</p>
<p>CRF++-0.53.tar.gz(同上)</p>
<p>nlpbamboo-1.1.1.tar.bz2（分词用）</p>
<p>postgreSQL-8.3.3.tar.gz（索引用）</p>
<p><strong>安装</strong><a href="http://www.54chen.com/c/101">pgsql</a></p>
<p>tar -zxvf postgreSQL-8.3.3.tar.gz</p>
<p>cd postgre-8.3.3</p>
<pre>./configure --prefix=/opt/pgsql</pre>
<p>make<br />
make install</p>
<p>useradd postgre</p>
<p>chown -R postgre.postgre /opt/pgsql<br />
su - postgre<br />
vi ~postgre/.bash_profile<br />
添加<br />
export PATH<br />
PGLIB=/opt/pgsql/lib<br />
PGDATA=/data/PGSearch<br />
PATH=$PATH:/opt/pgsql/bin<br />
MANPATH=$MANPATH:/opt/pgsql/man<br />
export PGLIB PGDATA PATH MANPATH</p>
<p># mkdir -p /data/PGSearch</p>
<p># chown -R postgre.postgre /data/PGSearch</p>
<p># chown -R postgre.postgre /opt/pgsql</p>
<pre>#sudo -u postgre /opt/pgsql/bin/initdb --locale=zh_CN.UTF-8 --encoding=utf8 -D /data/PGSearch</pre>
<pre>#sudo -u postgre /opt/pgsql/bin/postmaster -i -D /data/PGSearch &amp;  //允许网络访问</pre>
<p>#sudo -u postgre /opt/pgsql/bin/createdb kxgroup<br />
# vim /data/PGSearch/pg_hba.conf  如下增加可访问的<a href="http://www.54chen.com/c/264">机器</a>：</p>
<p>host    all         all         10.2.19.178 255.255.255.0               trust</p>
<p>#su - postgre</p>
<p>$pg_ctl stop</p>
<p>$postmaster -i -D /data/PGSearch &amp;<br />
<strong>安装中文分词（Cmake CRF++ bambo</strong><strong>o</strong><strong>)</strong><br />
Cmake是为了编译bamboo,CRF++是bamboo依赖的。</p>
<p>tar -zxvf cmake-2.6.4.tar.gz</p>
<p>cd cmake-2.6.4<br />
./configure<br />
gmake<br />
make install</p>
<p>tar -zxvf CRF++-0.53.tar.gz<br />
cd CRF++-0.53<br />
./configure<br />
make<br />
make install</p>
<p>tar -jxvf nlpbamboo-1.1.1.tar.bz2<br />
cd nlpbamboo-1.1.1<br />
mkdir build<br />
cd build/<br />
cmake .. -DCMAKE_BUILD_TYPE=release<br />
make all<br />
make install</p>
<p>cp index.tar.bz2 /opt/bamboo/<br />
cd /opt/bamboo/<br />
tar -jxvf index.tar.bz2</p>
<p>#/opt/bamboo/bin/bamboo</p>
<p>如果出现：</p>
<p>ERROR: libcrfpp.so.0: cannot open shared object file: No such file or directory</p>
<p>就执行：</p>
<p>ln -s /usr/local/lib/libcrfpp.so.* /usr/lib/<br />
ldconfig</p>
<p><strong>增加上中文分词扩展到pgsql</strong></p>
<p>#vim /root/.bash_profile 也增加：</p>
<p>PGLIB=/opt/pgsql/lib<br />
PGDATA=/data/PGSearch<br />
PATH=$PATH:/opt/pgsql/bin<br />
MANPATH=$MANPATH:/opt/pgsql/man<br />
export PGLIB PGDATA PATH MANPATH</p>
<p>#source ~/.bash_profile</p>
<p>cd /opt/bamboo/exts/postgres/chinese_parser/<br />
make<br />
make install</p>
<p>su - postgre<br />
cd /opt/pgsql/share/contrib/<br />
touch /opt/pgsql/share/tsearch_data/chinese_utf8.stop<br />
psql kxgroup<br />
\i chinese_parser.sql 导入</p>
<p>再执行下面的sql，已经可以将一段话分词了：</p>
<pre>SELECT to_tsvector('chinesecfg', '结果在命令行下执行bamboo才知道');</pre>
<p>先到这里，下一部分讲述对TEXT字段进行索引和查询，完整构造一整个<a href="http://www.54chen.com/c/591">搜索</a>引擎。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/postgresql-bamboo-lucene-fulltextindex.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>配置一个使用plproxy的PostgreSQL数据库集群</title>
		<link>http://www.54chen.com/_linux_/%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e4%bd%bf%e7%94%a8plproxy%e7%9a%84postgresql%e6%95%b0%e6%8d%ae%e5%ba%93%e9%9b%86%e7%be%a4.html</link>
		<comments>http://www.54chen.com/_linux_/%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e4%bd%bf%e7%94%a8plproxy%e7%9a%84postgresql%e6%95%b0%e6%8d%ae%e5%ba%93%e9%9b%86%e7%be%a4.html#comments</comments>
		<pubDate>Fri, 21 Nov 2008 07:22:24 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e4%bd%bf%e7%94%a8plproxy%e7%9a%84postgresql%e6%95%b0%e6%8d%ae%e5%ba%93%e9%9b%86%e7%be%a4.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>本文只有一个连接 没有那么多内容 http://www.pgsqldb.org/mwiki/index.php/配置一个使用plproxy的PostgreSQL数据库集群<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>本文只有一个连接 没有那么多内容</p>
<p><a href="http://www.pgsqldb.org/mwiki/index.php/%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E4%BD%BF%E7%94%A8plproxy%E7%9A%84PostgreSQL%E6%95%B0%E6%8D%AE%E5%BA%93%E9%9B%86%E7%BE%A4">http://www.pgsqldb.org/mwiki/index.php/配置一个使用plproxy的PostgreSQL数据库集群</a></p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e4%bd%bf%e7%94%a8plproxy%e7%9a%84postgresql%e6%95%b0%e6%8d%ae%e5%ba%93%e9%9b%86%e7%be%a4.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>plproxy部署手册</title>
		<link>http://www.54chen.com/_linux_/plproxy%e9%83%a8%e7%bd%b2%e6%89%8b%e5%86%8c.html</link>
		<comments>http://www.54chen.com/_linux_/plproxy%e9%83%a8%e7%bd%b2%e6%89%8b%e5%86%8c.html#comments</comments>
		<pubDate>Fri, 21 Nov 2008 07:12:18 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/plproxy%e9%83%a8%e7%bd%b2%e6%89%8b%e5%86%8c.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>安装过程如下： 1 安装plproxy：下载plproxy.安装完成plproxy后,运行{$PATH_TO_PG}/share/contrib/plproxy.sql 2 建立数据库_proxy； 3 建立plpgsql语言； 4 在_proxy中建立模式plproxy;分配权限 grant all on schema plproxy to &#60;用户&#62;。 5 建立pgcluster；  --以上步骤sql语句： CREATE FUNCTION plpgsql_call_handler () RETURNS language_handler AS '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE C; CREATE FUNCTION plpgsql_validator(oid) RETURNS void AS '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE C; CREATE TRUSTED &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><dt>安装过程如下： </dt>
<dt>1 安装<a href="http://www.54chen.com/c/109">plproxy</a>：下载<a class="external text" title="http://pgfoundry.org/frs/download.php/1919/plproxy-2.0.7.tar.gz" rel="nofollow" href="http://pgfoundry.org/frs/download.php/1919/plproxy-2.0.7.tar.gz" target="_blank">plproxy</a>.安装完成plproxy后,运行{$PATH_TO_PG}/share/contrib/plproxy.sql </dt>
<dt>2 建立数据库_proxy； </dt>
<dt>3 建立plpgsql语言； </dt>
<dt>4 在_proxy中建立模式plproxy;分配权限 grant all on schema plproxy to &lt;用户&gt;。 </dt>
<dt>5 建立pgcluster； </dt>
<dt>
</dt>
<dt>
<pre> --以上步骤sql语句：
 CREATE FUNCTION plpgsql_call_handler () RETURNS language_handler AS
     '/usr/local/pgsql/lib/plpgsql.so'  LANGUAGE C;

 CREATE FUNCTION plpgsql_validator(oid) RETURNS void AS
     '/usr/local/pgsql/lib/plpgsql.so'  LANGUAGE C;

 CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
     HANDLER plpgsql_call_handler
     VALIDATOR plpgsql_validator;

 --------------------------------------------------------------------

 drop schema if exists plproxy cascade;

 create schema plproxy;

 grant all on schema plproxy to yahoo;

 --------------------------------------------------------------------
 create or replace function plproxy.get_cluster_version(cluster_name text)

 returns integer as $$

 begin
     if cluster_name = '&lt;cluster名字&gt;' then

 	return 8;

     end if;

     raise exception 'no such cluster: %', cluster_name;

 end; $$ language plpgsql;

 --------------------------------------------------------------------
 create or replace function plproxy.get_cluster_partitions(cluster_name text)

 returns setof text as $$

 begin

    if cluster_name = '&lt;cluster名字&gt;' then

 	--return next 'host=202.165.97.144 port=6000 user=chry password=chry dbname=chry_134';

 	return next 'host=pg1.sns.cn3.yahoo.com user=yahoo dbname=sns_search';
 	return next 'host=pg2.sns.cn3.yahoo.com user=yahoo dbname=sns_search';

 	return;

     end if;

     raise exception 'no such cluster: %', cluster_name;

 end; $$ language plpgsql;

 --------------------------------------------------------------------
 create or replace function plproxy.get_cluster_config(cluster_name text, out key text, out val text)

 returns setof record as $$

 begin

     key := 'statement_timeout';

     val := 60;

     return next;

     return;

 end; $$ language plpgsql;</pre>
<pre>
<dl>
<dt>6 建立查询函数 </dt>
</dl>
<pre> --在_proxy中建立查询函数:
 CREATE OR REPLACE FUNCTION public.doquery(query text)
 RETURNS setof record AS $$
 CLUSTER '&lt;cluster名字&gt;';
 RUN ON ALL;
 $$ LANGUAGE plproxy;

 --------------------------------------------------------------------
 CREATE OR REPLACE FUNCTION public.doquery(urlstr text,query text)
 RETURNS setof record AS $$
 CLUSTER '&lt;cluster名字&gt;';
 RUN ON hashtext(urlstr);
 $$ LANGUAGE plproxy;

 --------------------------------------------------------------------
 CREATE OR REPLACE FUNCTION public.dmlExec(query text)
 RETURNS integer AS $$
 CLUSTER '&lt;cluster名字&gt;';
 RUN ON ALL;
 $$ LANGUAGE plproxy;

 --------------------------------------------------------------------
 CREATE OR REPLACE FUNCTION public.dmlExec(urlstr text,query text)
 RETURNS integer AS $$
 CLUSTER '&lt;cluster名字&gt;';
 RUN ON hashtext(urlstr);
 $$ LANGUAGE plproxy;</pre>
<p> </p>
<pre> --在所联邦的数据库中建立查询函数:
 CREATE OR REPLACE FUNCTION public.doquery(query text)
 RETURNS SETOF RECORD AS $$
 DECLARE
 row RECORD;
 BEGIN
 for row in execute query loop
 return next row;
 end loop;
 return;
 END;
 $$ LANGUAGE plpgsql;

 ----------------------------------------------------------------
 CREATE OR REPLACE FUNCTION public.doquery(urlstr text,query text)
 RETURNS SETOF RECORD AS $$
 DECLARE
 row RECORD;
 BEGIN
 for row in execute query loop
 return next row;
 end loop;
 return;
 END;
 $$ LANGUAGE plpgsql;

 ----------------------------------------------------

 CREATE OR REPLACE FUNCTION public.dmlExec(query text)
 RETURNS integer AS $$
 DECLARE
 ret integer;
 BEGIN
 execute query;

 GET DIAGNOSTICS ret = ROW_COUNT;
 RETURN ret;

 END;
 $$ LANGUAGE plpgsql;

 ---------------------------------------------------------------
 CREATE OR REPLACE FUNCTION public.dmlExec(urlstr text,query text)
 RETURNS integer AS $$
 DECLARE
 ret integer;
 BEGIN
 execute query;

 GET DIAGNOSTICS ret = ROW_COUNT;
 RETURN ret;

 END;
 $$ LANGUAGE plpgsql;</pre>
</pre>
</dt>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/plproxy%e9%83%a8%e7%bd%b2%e6%89%8b%e5%86%8c.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用plproxy和pgbouncer完成分布式处理</title>
		<link>http://www.54chen.com/_linux_/%e4%bd%bf%e7%94%a8plproxy%e5%92%8cpgbouncer%e5%ae%8c%e6%88%90%e5%88%86%e5%b8%83%e5%bc%8f%e5%a4%84%e7%90%86.html</link>
		<comments>http://www.54chen.com/_linux_/%e4%bd%bf%e7%94%a8plproxy%e5%92%8cpgbouncer%e5%ae%8c%e6%88%90%e5%88%86%e5%b8%83%e5%bc%8f%e5%a4%84%e7%90%86.html#comments</comments>
		<pubDate>Fri, 21 Nov 2008 07:04:49 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[plproxy]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/%e4%bd%bf%e7%94%a8plproxy%e5%92%8cpgbouncer%e5%ae%8c%e6%88%90%e5%88%86%e5%b8%83%e5%bc%8f%e5%a4%84%e7%90%86.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>  plproxy和pgbouncer都是skype开发的基于postgresql的开源应用；前者主要用于完成分布式计算，后者主要充当数据库连接池；它们的主页在[plproxy]和[pgbouncer]  plproxy的特性   使用plproxy类似于RPC；假设我们有A,B两台数据库，在A在创建一个plproxy的function，并指定一些参数和返回值，就可以在B上也创建一个同名的pgsql函数，并指定同样的参数和返回值；这样，在A上调用该function，通过适当地声明，就可以实现在B上调用该函数的同样效果，但结果是在A上返回的； plproxy还能合并多个结点服务器上返回的结果集，就像是这些结果是由一个函数产生的一样，方便客户端操作； plproxy可以指定同时在所有结点服务器上执行操作，或者只在指定的几台服务器上操作，或者只在任意一台结点服务器上执行操作； plproxy默认是自动提交的；也就是说，只要目标服务器的函数执行成功了，它就会提交；这样有可能造成各个结点数据库的状态并不一致；因为可能有的结点执行成功了，有的没有执行成功，但plproxy并不会因为一个结点失败就回滚其它结点的操作 一开始，我们只有一台账户数据库；但随着账户增加，单个数据库肯定满足不了需求；当多台数据库服务器并存的情况下，需要解决负载平衡的问题； 为此，我们在系统的syshostconfig表中存储了一个key为accountNum，value为整数的参数；每次进行开户操作时，先用plproxy在所有数据库上查出该值并返到proxy层；由pgsql函数找出哪个数据库的accountNum最小，然后就在该数据库上开户，并将对应的accountNum加1 这样，新增服务器将立即开始承担新用户的注册；原有服务器压力不变；  plproxy中的死锁 考虑两个账户a@a.com和b@b.com，如果出现a@a.com向b@b.com转账，恰好b@b.com也在向a@a.com转账，就会出现死锁的情况；即一个进程已经拿到a@a.com的锁，并等待b@b.com，而另一个进程拿到了b@b.com的锁，并等待a@a.com； 一个可行的解决办法就是所有操作都按照一个可以预见的顺序进行；也就是限制转账操作的交易顺序，通过对交易双方的账号进行排序是一个较为简单的办法； 针对以上问题，如果我们限制对a@a.com的操作，无论是付款还是收款都优先操作，而b@b.com永远都排在它后面，也就解决了死锁的问题； 因此，在转账交易中，首要任务是对账户名进行排序；至于先收款还先付款，其实不重要<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p> </p>
<p>plproxy和pgbouncer都是skype开发的基于<a href="http://www.54chen.com/c/105">postgresql</a>的开源应用；前者主要用于完成分布式计算，后者主要充当数据库连接池；它们的主页在[<a class="external text" title="https://developer.skype.com/SkypeGarage/DbProjects/PlProxy" rel="nofollow" href="https://developer.skype.com/SkypeGarage/DbProjects/PlProxy" target="_blank">plproxy</a>]和[<a class="external text" title="https://developer.skype.com/SkypeGarage/DbProjects/PgBouncer" rel="nofollow" href="https://developer.skype.com/SkypeGarage/DbProjects/PgBouncer" target="_blank">pgbouncer</a>] </p>
<p><span class="mw-headline">plproxy的特性</span></p>
<p> </p>
<li>使用plproxy类似于RPC；假设我们有A,B两台数据库，在A在创建一个plproxy的function，并指定一些参数和返回值，就可以在B上也创建一个同名的pgsql函数，并指定同样的参数和返回值；这样，在A上调用该function，通过适当地声明，就可以实现在B上调用该函数的同样效果，但结果是在A上返回的；</li>
<li>plproxy还能合并多个结点服务器上返回的结果集，就像是这些结果是由一个函数产生的一样，方便客户端操作；</li>
<li>plproxy可以指定同时在所有结点服务器上执行操作，或者只在指定的几台服务器上操作，或者只在任意一台结点服务器上执行操作；</li>
<li>plproxy默认是自动提交的；也就是说，只要目标服务器的函数执行成功了，它就会提交；这样有可能造成各个结点数据库的状态并不一致；因为可能有的结点执行成功了，有的没有执行成功，但plproxy并不会因为一个结点失败就回滚其它结点的操作</li>
<p>一开始，我们只有一台账户数据库；但随着账户增加，单个数据库肯定满足不了需求；当多台数据库服务器并存的情况下，需要解决负载平衡的问题；</p>
<p>为此，我们在系统的syshostconfig表中存储了一个key为accountNum，value为整数的参数；每次进行开户操作时，先用plproxy在所有数据库上查出该值并返到proxy层；由pgsql函数找出哪个数据库的accountNum最小，然后就在该数据库上开户，并将对应的accountNum加1</p>
<p>这样，新增服务器将立即开始承担新用户的注册；原有服务器压力不变； </p>
<p><span class="mw-headline">plproxy中的死锁</span></p>
<p>考虑两个账户a@a.com和b@b.com，如果出现a@a.com向b@b.com转账，恰好b@b.com也在向a@a.com转账，就会出现死锁的情况；即一个进程已经拿到a@a.com的锁，并等待b@b.com，而另一个进程拿到了b@b.com的锁，并等待a@a.com；</p>
<p>一个可行的解决办法就是所有操作都按照一个可以预见的顺序进行；也就是限制转账操作的交易顺序，通过对交易双方的账号进行排序是一个较为简单的办法；</p>
<p>针对以上问题，如果我们限制对a@a.com的操作，无论是付款还是收款都优先操作，而b@b.com永远都排在它后面，也就解决了死锁的问题；</p>
<p>因此，在转账交易中，首要任务是对账户名进行排序；至于先收款还先付款，其实不重要</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/%e4%bd%bf%e7%94%a8plproxy%e5%92%8cpgbouncer%e5%ae%8c%e6%88%90%e5%88%86%e5%b8%83%e5%bc%8f%e5%a4%84%e7%90%86.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>pgpool安装</title>
		<link>http://www.54chen.com/_linux_/pgpool%e5%ae%89%e8%a3%85.html</link>
		<comments>http://www.54chen.com/_linux_/pgpool%e5%ae%89%e8%a3%85.html#comments</comments>
		<pubDate>Fri, 21 Nov 2008 06:56:28 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/pgpool%e5%ae%89%e8%a3%85.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>下载地址：http://pgfoundry.org/projects/pgpool/ 文件为：pgpool-II-2.0.1.tar，tar xvfj pgpool-II-2.0.1.tar 在pgpool-II-2.0.1目录下，执行./configure --prefix=/home/y/share/pgsql ----with-pgsql=/home/y/share/pgsql, 要求with-pgsql目录必须为pgsql安装目录。 之后执行gmake,sudo gmake install; pgpool需要用PCP命令来连接数据库检索数据，其用户名、密码是在pcp.conf文件中保存的。密码是经过md5加密的，需要用户手工输入。 cp /home/y/share/pgsql/etc/pcp.conf.sample /home/y/share/pgsql/etc/pcp.conf md5加密码可以用/home/y/share/pgsql/bin/pg_md5直接生成 ：例/home/y/share/pgsql/bin/pg_md5 postgres 结果为e8a48653851e28c69d0506508fb27fc5 将用户名，密码记入到pcp.conf文件中。 pcp默认端口为pcp_port = 9898。可以在pgpool.conf文件内修改 cp /home/y/share/pgsql/etc/pgpool.conf.sample /home/y/share/pgsql/etc/pgpool.conf,默认连接端口为port = 9999， 默认只允许本地连接，listen_addresses = 'localhost'， 如果需要所有ip可连接，可改为listen_addresses = '*'。 cp /home/y/share/pgsql/etc/pool_hba.conf.sample /home/y/share/pgsql/etc/pool_hba.conf, 添加远端连接 host all &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><pre class="cmd">下载地址：http://pgfoundry.org/projects/pgpool/
文件为：pgpool-II-2.0.1.tar，tar xvfj pgpool-II-2.0.1.tar
在pgpool-II-2.0.1目录下，执行./configure --prefix=/home/y/share/pgsql ----with-pgsql=/home/y/share/pgsql,
要求with-pgsql目录必须为<a href="http://www.54chen.com/c/101">pgsql</a>安装目录。
之后执行gmake,sudo gmake install;
pgpool需要用PCP命令来连接数据库检索数据，其用户名、密码是在pcp.conf文件中保存的。密码是经过md5加密的，需要用户手工输入。
cp /home/y/share/pgsql/etc/pcp.conf.sample /home/y/share/pgsql/etc/pcp.conf
md5加密码可以用/home/y/share/pgsql/bin/pg_md5直接生成 ：例/home/y/share/pgsql/bin/pg_md5 postgres
结果为e8a48653851e28c69d0506508fb27fc5
将用户名，密码记入到pcp.conf文件中。
pcp默认端口为pcp_port = 9898。可以在pgpool.conf文件内修改
cp /home/y/share/pgsql/etc/pgpool.conf.sample /home/y/share/pgsql/etc/pgpool.conf,默认连接端口为port = 9999，
默认只允许本地连接，listen_addresses = 'localhost'，
如果需要所有ip可连接，可改为listen_addresses = '*'。
cp /home/y/share/pgsql/etc/pool_hba.conf.sample /home/y/share/pgsql/etc/pool_hba.conf,

添加远端连接 host    all    all     0.0.0.0/0   trust.

添加pgsql节点
backend_hostname0 = 'phx6.sds.cnb.yahoo.com'
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = 'phx7.sds.cnb.yahoo.com'
backend_port1 = 5432
backend_weight1 = 1

如果需要开启多级拷贝功能需要设置replication_mode = true
如果需要开启负载均衡功能需要设置load_balance_mode = true

启动pgpool
pgpool -n -d &gt; /tmp/pgpool.log 2&gt;&amp;1 &amp;
关闭pgpool
pgpool stop</pre>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/pgpool%e5%ae%89%e8%a3%85.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL系统安装(Linux)</title>
		<link>http://www.54chen.com/life/postgresql%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85linux.html</link>
		<comments>http://www.54chen.com/life/postgresql%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85linux.html#comments</comments>
		<pubDate>Fri, 21 Nov 2008 06:51:32 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[生活备份]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.54chen.com/life/postgresql%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85linux.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>1. 到 http://www.postgresql.org下载pg8.2.4 source 2. 编译安装pgsql tar xvfj postgresql-8.2.4.tar.bz2 cd postgresql-8.2.4 ./configure --prefix=/home/y/pgsql #注意下一步把这个目录加入你bash的PATH中去 gmake sudo gmake install sudo mkdir /home/y/pgsql/data sudo chown yahoo /home/y/pgsql/data sudo -u yahoo /home/y/pgsql/bin/initdb --locale=zh_CN.UTF-8 --encoding=utf8 -D /home/y/pgsql/data 3.创建数据库 cd /home/y/pgsql/bin sudo -u yahoo ./pg_ctl &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><li>1. 到 <a class="external text" title="http://www.postgresql.org/" rel="nofollow" href="http://www.postgresql.org/" target="_blank">http://www.postgresql.org</a>下载pg8.2.4 source</li>
<li>2. 编译安装<a href="http://www.54chen.com/c/101">pgsql</a>
<ul>
<li>tar xvfj postgresql-8.2.4.tar.bz2</li>
<li>cd postgresql-8.2.4</li>
<li>./configure --prefix=/home/y/pgsql #注意下一步把这个目录加入你bash的PATH中去</li>
<li>gmake</li>
<li>sudo gmake install</li>
<li>sudo mkdir /home/y/pgsql/data</li>
<li>sudo chown yahoo /home/y/pgsql/data</li>
<li>sudo -u yahoo /home/y/pgsql/bin/initdb --locale=zh_CN.UTF-8 --encoding=utf8  -D /home/y/pgsql/data</li>
</ul>
</li>
<li>3.创建数据库
<ul>
<li>cd /home/y/pgsql/bin</li>
<li>sudo -u yahoo ./pg_ctl start -D /home/y/pgsql/data #启动服务进程</li>
<li>sudo -u yahoo /home/y/pgsql/bin/createdb test　#创建数据库test</li>
<li>sudo -u yahoo /home/y/pgsql/bin/psql test</li>
<li>test=# create role changxin superuser login ;</li>
<li>test=# \q</li>
<li>备注：现在就可以直接登入test数据库进行操作了。并且我的权限是最大权限的superuser。 </li>
</ul>
</li>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/life/postgresql%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85linux.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>pgsql如何控制来自其他电脑的连接？</title>
		<link>http://www.54chen.com/_linux_/pgsql%e5%a6%82%e4%bd%95%e6%8e%a7%e5%88%b6%e6%9d%a5%e8%87%aa%e5%85%b6%e4%bb%96%e7%94%b5%e8%84%91%e7%9a%84%e8%bf%9e%e6%8e%a5%ef%bc%9f.html</link>
		<comments>http://www.54chen.com/_linux_/pgsql%e5%a6%82%e4%bd%95%e6%8e%a7%e5%88%b6%e6%9d%a5%e8%87%aa%e5%85%b6%e4%bb%96%e7%94%b5%e8%84%91%e7%9a%84%e8%bf%9e%e6%8e%a5%ef%bc%9f.html#comments</comments>
		<pubDate>Fri, 21 Nov 2008 06:49:48 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/pgsql%e5%a6%82%e4%bd%95%e6%8e%a7%e5%88%b6%e6%9d%a5%e8%87%aa%e5%85%b6%e4%bb%96%e7%94%b5%e8%84%91%e7%9a%84%e8%bf%9e%e6%8e%a5%ef%bc%9f.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>缺省情况下，PostgreSQL只允许来自本机且通过 unix 域套接字或TCP/IP方式的连接。你只有在修改了配置文件postgresql.conf中的listen_addresses，且也在配置文件$PGDATA/pg_hba.conf中打开了 基于远程电脑（ host-based ）的身份认证，并重新启动PostgreSQL，否则其他电脑是不能与你的PostgreSQL服务器进行连接的。 将postgresql.conf中的listen_addresses设为：listen_addresses = '*' 在pg_hba.conf中加入访问数据库的服务器的IP。如，IP=10.62.130.136，在pg_hba.conf的最后加入 host all all 10.62.130.136/32 trust<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><ul>
<li>缺省情况下，<a href="http://www.54chen.com/c/101">PostgreSQL</a>只允许来自本机且通过 unix  域套接字或TCP/IP方式的连接。你只有在修改了配置文件postgresql.conf中的listen_addresses，且也在配置文件$PGDATA/pg_hba.conf中打开了  基于远程电脑（ host-based ）的身份认证，并重新启动<a href="http://www.54chen.com/c/101">PostgreSQL</a>，否则其他电脑是不能与你的<a href="http://www.54chen.com/c/101">PostgreSQL</a>服务器进行<a href="http://www.54chen.com/c/89">连接</a>的。</li>
<li>将postgresql.conf中的listen_addresses设为：listen_addresses = '*'</li>
<li>在pg_hba.conf中加入访问<a href="http://www.54chen.com/c/89">数据库</a>的服务器的IP。如，IP=10.62.130.136，在pg_hba.conf的最后加入 host all  all 10.62.130.136/32 trust</li>
</ul>
<p><!-- end content --></p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/pgsql%e5%a6%82%e4%bd%95%e6%8e%a7%e5%88%b6%e6%9d%a5%e8%87%aa%e5%85%b6%e4%bb%96%e7%94%b5%e8%84%91%e7%9a%84%e8%bf%9e%e6%8e%a5%ef%bc%9f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

