﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-colorful-随笔分类-postgresql</title><link>http://www.cppblog.com/colorful/category/19377.html</link><description>zc qq:1337220912</description><language>zh-cn</language><lastBuildDate>Thu, 08 May 2014 12:11:08 GMT</lastBuildDate><pubDate>Thu, 08 May 2014 12:11:08 GMT</pubDate><ttl>60</ttl><item><title>pg热备</title><link>http://www.cppblog.com/colorful/archive/2013/11/06/204123.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Wed, 06 Nov 2013 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/11/06/204123.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/204123.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/11/06/204123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/204123.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/204123.html</trackback:ping><description><![CDATA[<div>数据库的PITR是一般数据库都必须满足的技术。其原理是依据之前的物理备份文件加上wal的预写日志模式备份做的恢复。该技术支持8.*及以上版本。下面主要概述PITR的准备和恢复过程。 测试环境<br /><br />OS 环境：CentOS 6.2<br />数据库 ：PostgreSQL 9.1.9<br /><br /><br />一、前期工作既要恢复，肯定是需要一个备份基础的，否则再怎么的巧妇也难为无米之炊。<br />1.修改数据库参数，修改postgresql.conf：<br /><br />archive_mode = on<br />archive_timeout = 300&nbsp;&nbsp; --单位是秒，此处以5分钟为限强制归档，仅作测试<br />archive_command = 'cp %p /data/pgbackup/archive/%f'&nbsp; -- 注意/data/pgbackup/archive/目录权限， chmod -R 777 /data/pgbackup/archive/<br />wal_level = archive <br /><br />修改完重启下reload,DB<br /><br />2.基于文件级别的持续备份，<br />a.基础备份<br />postgres=# select pg_start_backup('backup_2012_05_20_14:22:10');<br /><br />b.打包备份pg_data<br /># cd /data<br /># tar -cvzf pgdata.tar ./postgres<br />mv pgdata.tar /data/pgbackup/base/<br /><br />c.结束基础备份并切换归档<br /><br />postgres=# select pg_stop_backup();<br /><br />postgres=# select pg_switch_xlog();<br />&nbsp;pg_switch_xlog <br />----------------<br />&nbsp;0/C000020<br />(1 row)<br /><br />postgres=# select pg_current_xlog_location();<br />&nbsp;pg_current_xlog_location <br />--------------------------<br />&nbsp;0/C000020<br />(1 row)<br /><br />postgres=# create table test_1(id int,name varchar(50));<br />postgres=# insert into test_1 values (1,'kenyon');<br />INSERT 0 1<br /><br />此时在pg_data路径下会产生一个label,可以查看内容有checkpoint时间,基础备份的开始和结束时间，以及标签名称等。因为之前已经设置了archive的三个参数，可以在archive的备份路径pg_home/archive下看到归档的文件会定时传过来。<br /><br />二、恢复过程<br />停数据库<br /># pg_stop<br /><br />假定数据库的崩溃场景，将pgdata数据删除<br /># rm -rf /database/pgdata<br /><br />恢复之前备份的tar文件<br /># tar xvf pgdata.tar<br /><br />删除pg_xlog文件夹并重建<br /># rm -rf pg_xlog <br /># mkdir -p pg_xlog/archive_status<br /><br />新建recovery.conf文件并修改<br /># vi /data/postgres/recovery.conf<br />--新增内容，指定恢复文件和路径，%f,%p见上面说明<br />restore_command = 'cp /data/pgbackup/archive/%f "%p"'<br /><br />启动数据库<br /><br /># pg_start<br />[postgres@localhost archive]$ psql<br />spsql (9.1.3)<br />Type "help" for help.<br /><br />postgres=# select * from test_1;<br />&nbsp;id |&nbsp; name &nbsp;<br />----+--------<br />&nbsp; 1 | kenyon<br />(1 rows)<br /><br />--恢复成功，会恢复到之前接收到的最后一个归档文件。另外recovery.conf会改名变成recovery.done<br /><br />日志内容:<br /><br />LOG:&nbsp; shutting down<br />LOG:&nbsp; database system is shut down<br />LOG:&nbsp; database system was interrupted; last known up at 2012-05-20 22:23:15 CST<br />LOG:&nbsp; starting archive recovery<br />LOG:&nbsp; restored log file "000000010000000000000002" from archive<br />LOG:&nbsp; redo starts at 0/8000078<br />LOG:&nbsp; consistent recovery state reached at 0/C000000<br />LOG:&nbsp; restored log file "000000010000000000000003" from archive<br />LOG:&nbsp; restored log file "000000010000000000000004" from archive<br />LOG:&nbsp; restored log file "000000010000000000000005" from archive<br />LOG:&nbsp; restored log file "000000010000000000000006" from archive<br />LOG:&nbsp; restored log file "000000010000000000000007" from archive<br />cp: cannot stat `/home/postgres/archive/000000010000000000000008': No such file or directory<br />LOG:&nbsp; could not open file "pg_xlog/000000010000000000000008" (log file 0, segment 8): No such file or directory<br />LOG:&nbsp; redo done at 0/1C000078<br />LOG:&nbsp; last completed transaction was at log time 2012-05-20 23:01:22.960591+08<br />LOG:&nbsp; restored log file "000000010000000000000007" from archive<br />cp: cannot stat `/home/postgres/archive/00000002.history': No such file or directory<br />LOG:&nbsp; selected new timeline ID: 2<br />cp: cannot stat `/home/postgres/archive/00000001.history': No such file or directory<br />LOG:&nbsp; archive recovery complete<br />LOG:&nbsp; database system is ready to accept connections<br />LOG:&nbsp; autovacuum launcher started<br /><br />PS:若要恢复到指定时间，还需要再recovery.conf中设置recovrey_target_time,recovery_target_timeline等参数<br /><br />总结：pitr技术对于7*24小时支撑是至关重要的，但是如果数据库非常小，增大pg_dump备份的频率可能更方便，但对于大数据库就需要了。</div><img src ="http://www.cppblog.com/colorful/aggbug/204123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-11-06 17:12 <a href="http://www.cppblog.com/colorful/archive/2013/11/06/204123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>postgresql 安装</title><link>http://www.cppblog.com/colorful/archive/2013/11/01/204045.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Fri, 01 Nov 2013 08:16:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/11/01/204045.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/204045.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/11/01/204045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/204045.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/204045.html</trackback:ping><description><![CDATA[<div>yum install readline-devel<br /><br />./configure -without-zlib<br />make<br />su<br />make install<br /><br /><br />mkdir -p /data/postgres<br />ln -s /data/postgres/ /home/<br />groupadd postgres<br />useradd -d /home/postgres -g postgres postgres<br />chown -R postgres:postgres /data/postgres/<br />su - postgres<br />/usr/local/pgsql/bin/initdb -A md5 --locale=en_US.utf8 --lc-ctype=en_US.utf8 -E UTF-8 -W /data/postgres<br />ln -s /usr/local/pgsql/bin/ ./<br /><br />mkdir /data/postgres/pg_log<br />chown -R postgres:postgres /data/postgres/pg_log<br /><br />//开启pg<br />bin/postgres -D /data/postgres &gt;pg_log/logfile 2&gt;&amp;1 &amp;<br /><br />// 设为开机启动<br />cp /data/zc/postgresql-9.1.9/contrib/start-scripts/linux /etc/init.d/postgresql<br />chmod a+x /etc/init.d/postgresql<br />// 修改/etc/init.d/postgresql<br />prefix 设为postgres安装路径<br />PGDATA 设为数据库路径(/data/postgres)<br /><br />chkconfig --add postgresql<br /></div><img src ="http://www.cppblog.com/colorful/aggbug/204045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-11-01 16:16 <a href="http://www.cppblog.com/colorful/archive/2013/11/01/204045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>postgresql 小盒子</title><link>http://www.cppblog.com/colorful/archive/2013/07/23/202065.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Tue, 23 Jul 2013 09:45:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/07/23/202065.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/202065.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/07/23/202065.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/202065.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/202065.html</trackback:ping><description><![CDATA[------------------------------------------------------------------------------------------<br />查看postgresql 连接情况: select * from pg_stat_activity;<br /><br />------------------------------------------------------------------------------------------<br />timestamp to unix<br /><div>select user_id, date_part('epoch',create_time)::integer from tb_account;<br /><br />------------------------------------------------------------------------------------------</div>unix to timestamp<br /><div>select user_id, to_timestamp(online_time) as online from login_log order by user_id;<br />select to_timestamp(online_time)::timestamp without time zone as online_t from login_log;</div><br />------------------------------------------------------------------------------------------<br />列出所有数据库<br />\list<br /><br />------------------------------------------------------------------------------------------<br />查看当前连接，当前的操作<br />select * from pg_stat_activity;<br /><br />------------------------------------------------------------------------------------------<br />psql 显示查询时间<br />\timing<br /><br />------------------------------------------------------------------------------------------<br />查询所有的索引，所有的表<br /><div>select * from pg_stat_user_indexes;<br />select * from pg_stat_user_tables;</div><br />-------------------------------------------------------------------------------------------<br />client 编码<br />1 使用psql 里的 \encoding 命令。 \encoding 允许你动态修改客户端编码。 比如，\encoding utf8<br />2 使用 libpq 函数。 \encoding 在做此用途的时候实际上是调用 PQsetClientEncoding()。<br />&nbsp;&nbsp; int PQsetClientEncoding(PGconn *conn, const char *encoding);这里 conn 与后端的联接，而 encoding 是你想用的编码。如果编码设置成功它返回 0，否则返回 -1。本次联接的当前编码可以用下面函数显示：<br />&nbsp;&nbsp; int PQclientEncoding(const PGconn *conn);请注意它只返回编码 ID，而不是象 EUC_JP 这样的编码符号字串。 要把编码 ID 转换为编码符号，你可以用：<br />&nbsp;&nbsp; char *pg_encoding_to_char(int encoding_id);<br />3 使用 SET client_encoding TO 。 可以用 SQL 命令设置客户端编码：<br />&nbsp;&nbsp; SET CLIENT_ENCODING TO 'value';你还可以把 SQL 语法里的 SET NAMES用于这个目的：<br />&nbsp;&nbsp; SET NAMES 'value';查询当前客户端编码：<br />&nbsp;&nbsp; SHOW client_encoding;返回缺省编码：<br />&nbsp;&nbsp; RESET client_encoding;<br />4 使用 PGCLIENTENCODING。 如果在客户端的环境里定义了 PGCLIENTENCODING 环境变量， 那么在与服务器进行联接时将自动选择客户端编码。 （这个编码随后可以用上面谈到的任何其它方法覆盖。）<div>5 使用client_encoding配置变量。 如果在 postgresql.conf 里设置了 client_encoding 变量， 那么在与服务器建立了联接之后，这个客户端编码将自动选定。（这个设置随后可以被上面提到 的其他方法覆盖。）</div>--------------------------------------------------------------------------------------------<br />无需手动输入密码<br />1 可以设置pg_hba.conf<br />2 可以在用户目录下新建 .pgpass文件, 内容为ip:port:dbname:username:password&nbsp; 例如 localhost:5432:*:postgres:321654<br />3 可以通过设置PGPASSWORD 环境变量<br /><br />--------------------------------------------------------------------------------------------<br />删除所有表<br />1 创建函数<br /><div>CREATE FUNCTION drop_all_table() RETURNS void AS $$ &nbsp;<br />DECLARE &nbsp;<br />&nbsp;&nbsp;&nbsp; tmp VARCHAR(512); &nbsp;<br />DECLARE names CURSOR FOR&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; select tablename from pg_tables where schemaname='public'; &nbsp;<br />BEGIN &nbsp;<br />&nbsp; FOR stmt IN names LOOP &nbsp;<br />&nbsp;&nbsp;&nbsp; tmp := 'DROP TABLE '|| quote_ident(stmt.tablename) || ' CASCADE;'; &nbsp;<br />&nbsp;&nbsp;&nbsp; RAISE NOTICE 'notice: %', tmp; &nbsp;<br />&nbsp;&nbsp;&nbsp; EXECUTE 'DROP TABLE '|| quote_ident(stmt.tablename) || ' CASCADE;'; &nbsp;<br />&nbsp; END LOOP; &nbsp;<br />&nbsp; RAISE NOTICE 'finished .....'; &nbsp;<br />END;&nbsp; <br />$$ LANGUAGE plpgsql;<br /><br />2 执行 select drop_all_table();<br /><br />----------------------------------------------------------------------------------------------<br />加注释, 给表结构加注释<br />COMMENT ON COLUMN table.col IS 'this is comment';<br />postgresql 只能通加comment加注释, 不能在create语句里加<br /><br />----------------------------------------------------------------------------------------------</div><img src ="http://www.cppblog.com/colorful/aggbug/202065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-07-23 17:45 <a href="http://www.cppblog.com/colorful/archive/2013/07/23/202065.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Postgresql 学习</title><link>http://www.cppblog.com/colorful/archive/2013/07/14/201795.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sun, 14 Jul 2013 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/07/14/201795.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/201795.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/07/14/201795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/201795.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/201795.html</trackback:ping><description><![CDATA[<div>要看<br />http://www.cnblogs.com/stephen-liu74/archive/2012/05/30/2306493.html<br /><br /><div>http://www.cnblogs.com/ringofthec/archive/2010/11/14/hehe.html<br /><br /><div>http://jingyan.baidu.com/article/6766299717faec54d41b8477.html<br /><br /><div>http://www.cnblogs.com/hyddd/archive/2010/04/08/1706863.html&nbsp; // vim学习</div></div></div></div><img src ="http://www.cppblog.com/colorful/aggbug/201795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-07-14 16:49 <a href="http://www.cppblog.com/colorful/archive/2013/07/14/201795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Postgresql跨数据库查询</title><link>http://www.cppblog.com/colorful/archive/2013/07/14/201794.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sun, 14 Jul 2013 08:46:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/07/14/201794.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/201794.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/07/14/201794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/201794.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/201794.html</trackback:ping><description><![CDATA[<div>postgres 跨数据库查询<br /><br />dblink 的安装<br />&nbsp;&nbsp; linux <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #cd postgres源码安装目录/contrib/dblink<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # make<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # make install<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意: 如果你在安装了postgres后执行了 make clean, make distclean, 那你可能需要重新 ./configure make make install 一下<br />&nbsp;&nbsp; windows<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; windows 默认是安装的<br /><br />dblink模块加载<br />&nbsp;&nbsp; PostgreSQL 有很多外部模块可以加载，例如 dblink, pg_buffercache 等，在 9.1 版本<br />&nbsp;&nbsp; 以前，只要对应的 postgresql-contrib 已经安装，只需要将对应的 sql 文件导入到目标库<br />&nbsp;&nbsp; 即可，例如，要在 数据库 skytf 里安装 dblink 模块，只需要执行以下操作就行；<br /><br />&nbsp;&nbsp; cd $PGHOME/share/contrib<br />&nbsp;&nbsp; psql -d skytf -U postgresql -f dblink.sql<br />&nbsp;&nbsp; 导入成功之后，那么 dblink 模块即加载成功。<br />&nbsp; &nbsp;<br />&nbsp;&nbsp; 注意!!<br />&nbsp;&nbsp; 在 9.1 版本以后，模块加载环节 PostgreSQL 提供命令 "CREATE EXTENSION" 来替代以上操作。 &nbsp;<br />&nbsp;&nbsp; 通过执行 CREATE EXTENSION dblink来加载 dblink<br /><br />dblink 使用:<br />&nbsp;&nbsp; 关于dblink, dblink_connect, dblink_disconnect 请参考手册<br />&nbsp;&nbsp; http://www.postgresql.org/docs/9.1/static/dblink.html<br />&nbsp;&nbsp; 例1<br />&nbsp;&nbsp; select dblink_connect('连接名','host=192.168.1.27&nbsp; port=1921 dbname=testdb user=test_user password=test_user' ); <br />&nbsp;&nbsp; host, port, user等 可以跟据情况省略掉<br /><br />&nbsp;&nbsp; 例2<br />&nbsp;&nbsp; select * from tb1 inner join dblink('dbname=db2', 'select id from tb2 where id=\'20120623\'') as acc(id int) on tb1.id = acc.id order by tb1.id;<br /><br />参考网站:<br />http://blog.sina.com.cn/s/blog_538d55be01010clc.html<br />http://francs3.blog.163.com/blog/static/4057672720108401139868/<br />http://www.postgresql.org/docs/9.1/static/dblink.html<br />http://zhenghaoju700.blog.163.com/blog/static/135859518201251382628663/</div><img src ="http://www.cppblog.com/colorful/aggbug/201794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-07-14 16:46 <a href="http://www.cppblog.com/colorful/archive/2013/07/14/201794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ERROR:invalid byte sequence for encoding"UTF8</title><link>http://www.cppblog.com/colorful/archive/2013/07/12/201730.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Fri, 12 Jul 2013 06:00:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/07/12/201730.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/201730.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/07/12/201730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/201730.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/201730.html</trackback:ping><description><![CDATA[<div><div id="sina_keyword_ad_area2"  "=""> 			<p> <div>http://blog.sina.com.cn/s/blog_680f6fa70100ldrg.html</div>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> <br /></p><p>原因是没有正确设置客户端字符集。</p> <div> &nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr> 默认情况下，PostgreSQL是不转换字符集的，如果你的数据库是UTF8的字符集，一般终端的中文字符集会设置为GBK，或en_US（查看终端的 字符集可以看LANG环境变量的设置），所以你输入的中文是GBK的编码，这个编码不经转换的存入数据库中，而数据库是UTF8的，PostgreSQL 一看没有这样的UTF8编码，所以当然报错了。</div> <div> <div>【<strong>解决方法</strong>】：</div> <div> 方法一：设置postgresql的客户端编码为GBK，这时PostgreSQL就知道输入的内容是GBK编码的，这样PostgreSQL数据库会自动做字符集的转换，把其转换成UTF8编码。</div> <div>方法二：直接设置终端的字符集编码为UTF8，让输入的编码直接为UTF8，而不是GBK。</div> <div>&nbsp;<wbr><wbr></div> <div>【<strong>具体演示</strong>】：</div> <div>&nbsp;<wbr><wbr>设置postgresql的客户端编码：</div> <div>设置psql客户端字符集为GBK，方法有两种，一种是在psql中输入&#8220;\encoding GBK&#8221; ，另一种是设置环境变量&#8220;export PGCLIENTENCODING=GBK&#8221;，演示如下：<br /> #psql -d dsc<br /> dsc=# insert into t values(1,'中国');<br /> ERROR:&nbsp;<wbr><wbr> invalid byte sequence for encoding "UTF8": 0xd6d0<br /> HINT:&nbsp;<wbr><wbr> This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".<br /> dsc=# show client_encoding;<br /> &nbsp;<wbr><wbr>client_encoding<br /> -----------------<br /> &nbsp;<wbr><wbr>UTF8<br /> (1 row)</div> <div>dsc=# \encoding GBK&nbsp;<wbr><wbr><br /> dsc=# show client_encoding;<br /> &nbsp;<wbr><wbr>client_encoding<br /> -----------------<br /> &nbsp;<wbr><wbr>GBK<br /> (1 row)</div> <div>dsc=# insert into t values(1,'中国');<br /> INSERT 0 1<br /> dsc=# commit;<br /> WARNING:&nbsp;<wbr><wbr> there is no transaction in progress<br /> COMMIT<br /> dsc=# select * from t;<br /> &nbsp;<wbr><wbr>id | name<br /> ----+------<br /> &nbsp;<wbr><wbr> 1 | 中国<br /> (1 row)</div> <div><br /> [postgres@dsc ~]$ export PGCLIENTENCODING=GBK<br /> [postgres@dsc ~]$ psql<br /> psql: FATAL:&nbsp;<wbr><wbr> conversion between GBK and LATIN1 is not supported<br /> [postgres@dsc ~]$ psql -d dsc<br /> psql (8.4.3)<br /> Type "help" for help.</div> <div>dsc=# select * from t;<br /> &nbsp;<wbr><wbr>id | name<br /> ----+------<br /> &nbsp;<wbr><wbr> 1 | 中国<br /> (1 row)</div> <div>dsc=# insert into t values(2,'我的中国');<br /> INSERT 0 1<br /> dsc=# select * from t;&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr><br />  &nbsp;<wbr><wbr>id |&nbsp;<wbr><wbr>&nbsp;<wbr><wbr> name&nbsp;<wbr><wbr>&nbsp;<wbr><wbr><br /> ----+----------<br /> &nbsp;<wbr><wbr> 1 | 中国<br /> &nbsp;<wbr><wbr> 2 | 我的中国<br /> (2 rows)</div> </div>							 		</div></div><img src ="http://www.cppblog.com/colorful/aggbug/201730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-07-12 14:00 <a href="http://www.cppblog.com/colorful/archive/2013/07/12/201730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装postgresql 出现readline错误 </title><link>http://www.cppblog.com/colorful/archive/2013/07/11/201709.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 11 Jul 2013 12:58:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/07/11/201709.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/201709.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/07/11/201709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/201709.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/201709.html</trackback:ping><description><![CDATA[<div>http://blog.csdn.net/shutfuckingup/article/details/8532752</div><div><p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> <strong style="line-height:22px"><span style="color:#0000ff; line-height:22px">1 环境信息<br style="line-height:22px" /> </span></strong>OS: <a href="http://www.linuxidc.com/topicnews.aspx?tid=14" target="_blank" title="CentOS"> CentOS</a> release 5.2(Final)<br style="line-height:22px" /> PG: postgresql-9.0.0]</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> <span style="color:#0000ff; line-height:22px"><strong style="line-height:22px">2 根据提示，我测试了下 configre命令，果然报这个错<br style="line-height:22px" /> </strong></span>[root@HK81-107postgresql-9.0.0]# ./configure<br style="line-height:22px" /> checking build system type... i686-pc-linux-gnu<br style="line-height:22px" /> checking host system type... i686-pc-linux-gnu<br style="line-height:22px" /> checking which template to use... linux<br style="line-height:22px" /> checking whether to build with 64-bit integer date/time support...yes<br style="line-height:22px" /> checking whether NLS is wanted... no<br style="line-height:22px" /> checking for default port number... 5432<br style="line-height:22px" /> checking for block size... 8kB<br style="line-height:22px" /> checking for segment size... 1GB<br style="line-height:22px" /> checking for WAL block size... 8kB<br style="line-height:22px" /> checking for WAL segment size... 16MB<br style="line-height:22px" /> checking for gcc... gcc<br style="line-height:22px" /> checking for C compiler default output file name... a.out<br style="line-height:22px" /> checking whether the C compiler works... yes<br style="line-height:22px" /> checking whether we are cross compiling... no<br style="line-height:22px" /> checking for suffix of executables...&nbsp;<wbr><br style="line-height:22px" /> checking for suffix of object files... o<br style="line-height:22px" /> checking whether we are using the GNU C compiler... yes<br style="line-height:22px" /> checking whether gcc accepts -g... yes<br style="line-height:22px" /> checking for gcc option to accept ISO C89... none needed<br style="line-height:22px" /> checking if gcc supports -Wdeclaration-after-statement...yes<br style="line-height:22px" /> checking if gcc supports -Wendif-labels... yes<br style="line-height:22px" /> checking if gcc supports -fno-strict-aliasing... yes<br style="line-height:22px" /> checking if gcc supports -fwrapv... yes<br style="line-height:22px" /> checking whether the C compiler still works... yes<br style="line-height:22px" /> checking how to run the C preprocessor... gcc -E<br style="line-height:22px" /> checking allow thread-safe client libraries... yes<br style="line-height:22px" /> checking whether to build with Tcl... no<br style="line-height:22px" /> checking whether to build Perl modules... no<br style="line-height:22px" /> checking whether to build Python modules... no<br style="line-height:22px" /> checking whether to build with GSSAPI support... no<br style="line-height:22px" /> checking whether to build with Kerberos 5 support... no<br style="line-height:22px" /> checking whether to build with PAM support... no<br style="line-height:22px" /> checking whether to build with LDAP support... no<br style="line-height:22px" /> checking whether to build with Bonjour support... no<br style="line-height:22px" /> checking whether to build with OpenSSL support... no<br style="line-height:22px" /> checking for grep that handles long lines and -e.../bin/grep<br style="line-height:22px" /> checking for egrep... /bin/grep -E<br style="line-height:22px" /> checking for ld used by GCC... /usr/bin/ld<br style="line-height:22px" /> checking if the linker (/usr/bin/ld) is GNU ld... yes<br style="line-height:22px" /> checking for ranlib... ranlib<br style="line-height:22px" /> checking for strip... strip<br style="line-height:22px" /> checking whether it is possible to strip libraries... yes<br style="line-height:22px" /> checking for ar... ar<br style="line-height:22px" /> checking for tar... /bin/tar<br style="line-height:22px" /> checking whether ln -s works... yes<br style="line-height:22px" /> checking for gawk... gawk<br style="line-height:22px" /> checking for a thread-safe mkdir -p... /bin/mkdir -p<br style="line-height:22px" /> checking for bison... no<br style="line-height:22px" /> configure: WARNING:<br style="line-height:22px" /> *** Without Bison you will not be able to build PostgreSQL from CVSnor<br style="line-height:22px" /> *** change any of the parser definition files.&nbsp;<wbr>You can obtain Bison from<br style="line-height:22px" /> *** a GNU mirror site.&nbsp;<wbr> (If you are using theofficial distribution of<br style="line-height:22px" /> *** PostgreSQL then you do not need to worry about this, becausethe Bison<br style="line-height:22px" /> *** output is pre-generated.)<br style="line-height:22px" /> checking for flex... no<br style="line-height:22px" /> configure: WARNING:<br style="line-height:22px" /> *** Without Flex you will not be able to build PostgreSQL from CVSnor<br style="line-height:22px" /> *** change any of the scanner definition files.&nbsp;<wbr>You can obtain Flex from<br style="line-height:22px" /> *** a GNU mirror site.&nbsp;<wbr> (If you are using theofficial distribution of<br style="line-height:22px" /> *** PostgreSQL then you do not need to worry about this because theFlex<br style="line-height:22px" /> *** output is pre-generated.)<br style="line-height:22px" /> checking for perl... /usr/bin/perl<br style="line-height:22px" /> configure: using perl 5.8.8<br style="line-height:22px" /> checking for main in -lm... yes<br style="line-height:22px" /> checking for library containing setproctitle... no<br style="line-height:22px" /> checking for library containing dlopen... -ldl<br style="line-height:22px" /> checking for library containing socket... none required<br style="line-height:22px" /> checking for library containing shl_load... no<br style="line-height:22px" /> checking for library containing getopt_long... nonerequired<br style="line-height:22px" /> checking for library containing crypt... -lcrypt<br style="line-height:22px" /> checking for library containing fdatasync... nonerequired<br style="line-height:22px" /> checking for library containing gethostbyname_r... nonerequired<br style="line-height:22px" /> checking for library containing shmget... none required<br style="line-height:22px" /> checking for -lreadline... no<br style="line-height:22px" /> checking for -ledit... no<br style="line-height:22px" /> <span style="color:#ff0000; line-height:22px"><strong style="line-height:22px">configure: error: readline library notfound<br style="line-height:22px" /> If you have readline already installed, see config.log for detailson the<br style="line-height:22px" /> failure.&nbsp;<wbr> It is possible the compiler isnt lookingin the proper directory.<br style="line-height:22px" /> Use --without-readline to disable readlinesupport.</strong></span></p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>根据提示，应该是没有安装 readline包。</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> <strong style="line-height:22px"><span style="color:#0000ff; line-height:22px">3 检查系统是否安装 readline 包<br style="line-height:22px" /> </span></strong>[root@HK81-107postgresql-9.0.0]# rpm -qa | grep readline<br style="line-height:22px" /> readline-5.1-3.el5</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> &nbsp;<wbr>&nbsp;<wbr> 说明系统已经安装了 readline包。</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> <span style="color:#0000ff; line-height:22px">4</span><strong style="line-height:22px"><span style="color:#0000ff; line-height:22px">&nbsp;<wbr>通过 yum 搜索相关的readline 包<br style="line-height:22px" /> </span></strong>[root@HK81-107postgresql-9.0.0]# yum search readline<br style="line-height:22px" /> lftp.i386 : A sophisticated file transfer program<br style="line-height:22px" /> lftp.i386 : A sophisticated file transfer program<br style="line-height:22px" /> php-readline.i386 : Standard PHP module provides readline librarysupport<br style="line-height:22px" /> lftp.i386 : A sophisticated file transfer program<br style="line-height:22px" /> readline.i386 : A library for editing typed commandlines.<br style="line-height:22px" /> compat-readline43.i386 : The readline 4.3 library for compatibilitywith older software.<br style="line-height:22px" /> readline-devel.i386 : Files needed to develop programs which usethe readline library.<br style="line-height:22px" /> readline.i386 : A library for editing typed command lines.</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> &nbsp;<wbr>根据提示，有一个包引起了我的注意 "readline-devel",猜想可能与这个包有关。<br style="line-height:22px" /> &nbsp;<wbr><br style="line-height:22px" /> <span style="color:#0000ff; line-height:22px"><strong style="line-height:22px">5 安装 readline-devel 包<br style="line-height:22px" /> </strong></span>[root@HK81-107postgresql-9.0.0]# yum -y install -y readline-devel<br style="line-height:22px" /> Setting up Install Process<br style="line-height:22px" /> Parsing package install arguments<br style="line-height:22px" /> Resolving Dependencies<br style="line-height:22px" /> --&gt; Running transaction check<br style="line-height:22px" /> ---&gt; Package readline-devel.i386 0:5.1-3.el5 set tobe updated<br style="line-height:22px" /> --&gt; Processing Dependency: libtermcap-devel forpackage: readline-devel<br style="line-height:22px" /> --&gt; Running transaction check<br style="line-height:22px" /> ---&gt; Package libtermcap-devel.i386 0:2.0.8-46.1 setto be updated<br style="line-height:22px" /> --&gt; Finished Dependency Resolution</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> Dependencies Resolved</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> =============================================================================<br style="line-height:22px" /> &nbsp;<wbr>Package&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Arch&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Version&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Repository&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Size&nbsp;<wbr><br style="line-height:22px" /> =============================================================================<br style="line-height:22px" /> Installing:<br style="line-height:22px" /> &nbsp;<wbr>readline-devel&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>i386&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>5.1-3.el5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>base&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>146 k<br style="line-height:22px" /> Installing for dependencies:<br style="line-height:22px" /> &nbsp;<wbr>libtermcap-devel&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>i386&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>2.0.8-46.1&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>base&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>56 k</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> Transaction Summary<br style="line-height:22px" /> =============================================================================<br style="line-height:22px" /> Install&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>2Package(s)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br style="line-height:22px" /> Update&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>0Package(s)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br style="line-height:22px" /> Remove&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>0Package(s)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> Total download size: 201 k<br style="line-height:22px" /> Downloading Packages:<br style="line-height:22px" /> (1/2): libtermcap-devel-2 100%|=========================|&nbsp;<wbr> 56kB&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>00:00&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br style="line-height:22px" /> (2/2): readline-devel-5.1 100% |=========================| 146kB&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>00:00&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br style="line-height:22px" /> Running rpm_check_debug<br style="line-height:22px" /> Running Transaction Test<br style="line-height:22px" /> Finished Transaction Test<br style="line-height:22px" /> Transaction Test Succeeded<br style="line-height:22px" /> Running Transaction<br style="line-height:22px" /> &nbsp;<wbr> Installing:libtermcap-devel&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>######################### [1/2]&nbsp;<wbr><br style="line-height:22px" /> &nbsp;<wbr> Installing:readline-devel&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>######################### [2/2]</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> Installed: readline-devel.i386 0:5.1-3.el5<br style="line-height:22px" /> Dependency Installed: libtermcap-devel.i386 0:2.0.8-46.1<br style="line-height:22px" /> Complete!</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> <span style="color:#0000ff; line-height:22px"><strong style="line-height:22px">6 再次执行 configure 成功。</strong></span></p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> <span style="color:#0000ff; line-height:22px"><strong style="line-height:22px">7 关于 readline 的解释，来自官网<br style="line-height:22px" /> </strong></span>--without-readline<br style="line-height:22px" /> Prevents use of the Readline library (and libedit as well). Thisoption disables command-line&nbsp;<wbr><br style="line-height:22px" /> editing and&nbsp;<wbr> history in psql, so it is notrecommended.</p> <p style="padding-bottom:0px; line-height:22px; margin:0px 0px 10px; padding-left:0px; padding-right:0px; padding-top:0px"> &nbsp;<wbr>&nbsp;<wbr> 说明： 根据步骤2 执行 configure时报错提示，可以加上 "--without-readline" 从而避开这个ERROR，<br /> 但Postgresql官方不推荐这么做，所以还是安装吧。</p></div><img src ="http://www.cppblog.com/colorful/aggbug/201709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-07-11 20:58 <a href="http://www.cppblog.com/colorful/archive/2013/07/11/201709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下PostgreSQL安装设置</title><link>http://www.cppblog.com/colorful/archive/2013/07/09/201642.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Tue, 09 Jul 2013 10:25:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/07/09/201642.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/201642.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/07/09/201642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/201642.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/201642.html</trackback:ping><description><![CDATA[<div><p><div>http://down.chinaz.com/server/201104/244_1.htm</div><br /></p><p>1、下载postgresql最新版：<br /></p><div><div><h1><a href="http://down.chinaz.com/soft/11426.htm" target="_blank">PostgreSQL v9.2.1.1 For Linux下载</a></h1><a href="http://down.chinaz.com/soft/11426.htm" target="_blank"><img style="max-width: 640px; cursor: pointer;" src="http://down.chinaz.com/style/img/down.gif" alt="" border="0" /></a></div><div><a href="http://down.chinaz.com/softpic.asp?pid=43991" title="PostgreSQL v9.2.1.1 For Linux界面预览" target="_blank"><img style="max-width: 640px; cursor: pointer;" src="http://down.chinaz.com/upload/2012/2/29/2012022909591880919_s.png" alt="" /></a><h1><a href="http://down.chinaz.com/softpic.asp?pid=43991" title="PostgreSQL v9.2.1.1 For Linux界面预览" target="_blank">界面预览</a></h1></div><div><ul><li><strong>软件大小：</strong>32.70MB</li><li><strong>软件类别：</strong>国外软件 | <a href="http://down.chinaz.com/class/98_1.htm" target="_blank">数据服务器</a></li><li><strong>软件语言：</strong>英文</li><li><strong>运行环境：</strong>Linux</li><li><strong>软件授权：</strong>免费版</li><li><strong>更新时间：</strong>2012-9-25 9:38:18</li><li><strong>相关链接：</strong><a href="http://www.postgresql.org" title="PostgreSQL v9.2.1.1 For Linux" target="_blank">Home Page</a></li></ul></div></div><p>2、解压文件：</p><pre sh_sourcecode"="">tar zxvf postgresql-8.3.7.tar.gz cd postgresql-8.3.7</pre><p>3、配置：</p><pre sh_sourcecode"="">./configure --prefix=/usr/local/pgsql</pre><p>4、编译：</p><pre sh_sourcecode"="">make</pre><p>5、安装：</p><pre sh_sourcecode"="">make install</pre><p>6、创建用户组和用户：</p><pre sh_sourcecode"="">groupadd postgres useradd -g postgres postgres</pre><p>7、创建数据库库文件存储目录、给postgres赋予权限：</p><pre sh_sourcecode"="">mkdir /usr/local/pgsql/data cd /usr/local/pgsql chown postgres.postgres data</pre><p>8、初始化数据库目录：</p><p>切换用户</p><pre sh_sourcecode"="">su - postgresql</pre><p>初始化数据</p><pre sh_sourcecode"="">/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data</pre><p>启动数据库</p><pre sh_sourcecode"="">/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data</pre><p>9、配置监听地址和端口：</p><pre sh_sourcecode"="">vi /usr/local/pgsql/data/postgresql.conf</pre><p>取消以下两行的注释</p><pre sh_sourcecode"="">listen_addresses = '*'  port = 5432</pre><p>10、允许远程连接：</p><pre sh_sourcecode"="">vi /usr/local/pgsql/data/pg_hba.conf</pre><p>添加</p><pre sh_sourcecode"="">host all all 192.168.1.0/24 trust&nbsp;</pre><p>每项的具体意思在配置文件中有详细说明<br />配置iptables让远程主机能访问：</p><pre sh_sourcecode"="">vi /etc/sysconfig</pre><p>添加</p><pre sh_sourcecode"="">-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT service iptables restart</pre><p>11、让postgresql数据库随系统启动而启动：</p><p>将启动脚本拷贝到/etc/init.d/目录下，具体执行如下命令：</p><pre sh_sourcecode"="">cd /etc/rc.d/init.d cp (第一步解压的安装文件目录)/postgresql-8.3.7/contrib/start-scripts/linux postgresql chmod +x postgresql vi postgresql prefix=/usr/local/pgsql PGDATA="/usr/local/pgsql/data" PGUSER=postgres PGLOG="/var/log/pgsql.log"  chkconfig --add postgresql</pre><p>启动数据库：</p><pre sh_sourcecode"="">service postgresql start</pre></div><img src ="http://www.cppblog.com/colorful/aggbug/201642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-07-09 18:25 <a href="http://www.cppblog.com/colorful/archive/2013/07/09/201642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给PostgreSQL添加MySQL的unix_timestamp与from_unixtime函数</title><link>http://www.cppblog.com/colorful/archive/2013/06/25/201290.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Tue, 25 Jun 2013 05:50:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/06/25/201290.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/201290.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/06/25/201290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/201290.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/201290.html</trackback:ping><description><![CDATA[<div>MySQL的2个常用函数unix_timestamp()与from_unixtime PostgreSQL并不提供，但通过PostgreSQL强大的扩展性可以轻松的解决问题。<br />话说远在天边，尽在眼前，文档看仔细，问题迎仞解。PostgreSQL 题供extract与date_part取epoch即可<br />即 <br />unix_timestamp() = round(date_part('epoch',now()))<br />from_unixtime(int) = to_timestamp(int)<br /><br />添加函数unix_timestamp()<br />CREATE FUNCTION unix_timestamp() RETURNS integer AS $$ <br />SELECT (date_part('epoch',now()))::integer; <br />$$ LANGUAGE SQL IMMUTABLE;<br /><br />添加函数from_unixtime()<br />CREATE FUNCTION from_unixtime(int) RETURNS timestamp AS $$ <br />SELECT to_timestamp($1)::timestamp; <br />$$ LANGUAGE SQL IMMUTABLE;											</div><img src ="http://www.cppblog.com/colorful/aggbug/201290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-06-25 13:50 <a href="http://www.cppblog.com/colorful/archive/2013/06/25/201290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pg_ctl</title><link>http://www.cppblog.com/colorful/archive/2013/04/22/199632.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Mon, 22 Apr 2013 06:06:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/04/22/199632.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/199632.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/04/22/199632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/199632.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/199632.html</trackback:ping><description><![CDATA[<div>pg_ctl<br />名称<br />pg_ctl -- 启动、停止、重启 PostgreSQL<br />语法<br />pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]<br />pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]<br />pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]<br />pg_ctl reload [-s] [-D datadir]<br />pg_ctl status [-D datadir]<br />pg_ctl kill [signal_name] [process_id]<br />pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]<br />pg_ctl unregister [-N servicename]<br /><br />描述<br />pg_ctl 用于启动、停止、重启 PostgreSQL 后端服务器(postgres)，或者显示一个运行着的服务器的状态。尽管可以手动启动服务器，但是 pg_ctl 封装了重新定向日志输出，与终端和进程组合理分离，以及另外提供了一个选项用于有控制的关闭。<br /><br />在 start 模式里会启动一个新的服务器。服务器是在后台启动的，标准输入被附着到了 /dev/null 上。如果使用了 -l ，那么标准输出和标准错误将被定向到一个日志文件，要么就是重定向到 pg_ctl 的标准输出(而不是标准错误)。如果没有选定日志文件，pg_ctl 的标准输出应该重定向到一个文件或者用管道输出到类似 rotatelogs 这样的日志滚动程序，否则，postgres 将把它的输出写到控制终端(在后台)并且将不会脱离 shell 的进程组。<br /><br />在 stop 模式下，那个正在特定数据目录运行的服务器将被关闭。你可以用 -m 选项选择三种不同的关闭模式："Smart"模式等待所有客户端中断连接，这是缺省。"Fast"模式并不等待客户端中断连接，所有活跃事务都被回滚并且客户端都被强制断开。"Immediate"模式将在没有干净关闭的情况下强行退出。这么做将导致在重新启动的时候的恢复。<br /><br />restart 实际上是先执行一个停止，然后紧跟一个启动。它允许变换 postgres 的命令行选项。<br /><br />reload 模式简单地给 postgres 发送一个 SIGHUP 信号，导致它重新读取配置文件(postgresql.conf, pg_hba.conf 等)，这样就允许修改配置文件选项而不用重启系统即可生效。<br /><br />status 模式监查一个服务器是否在指定的数据目录运行，如果是，那么显示其 PID 和调用它的命令行选项。<br /><br />kill 模式允许你给一个指定的进程发送信号。这个功能对 Microsoft Windows 特别有用，因为它没有 kill 命令。使用 --help 查看支持的信号名字列表。<br /><br />register 模式允许你在 Microsoft Windows 上注册一个系统服务。<br /><br />unregister 模式允许你在 Microsoft Windows 上删除先前用 register 命令注册的系统服务。<br /><br />选项<br />-D datadir<br />声明该数据库的文件系统位置。如果忽略则使用 PGDATA 环境变量。<br /><br />-l filename<br />把服务器日志输出附加在 filename 文件上。如果该文件不存在则创建它。umask 设置为 077 ，因此缺省时是不允许从其它用户向日志文件访问的。<br /><br />-m mode<br />声明关闭模式。mode 可以是 smart, fast, immediate 之一，或者是这三个的首字母之一。<br /><br />-o options<br />声明要直接传递给 postgres 的选项。<br /><br />参数通常都用单或者双引号包围以保证它们作为一个整体传递。<br /><br />-p path<br />声明 postgres 可执行文件的位置。缺省位于 pg_ctl 自身所在目录，如果没找到则使用硬编码的安装目录。除非你想干点什么特别的事情，并且想得到类似没有找到 postgres 这样的错误，否则必须使用这个选项。<br /><br />-s<br />只打印错误，而不打印提示性信息。<br /><br />-w<br />等待启动或者关闭的完成(60 秒超时)，这个参数是关闭时的缺省值。成功的关闭是以删除 PID 文件为标志的。对于启动而言，一次成功的 psql -l 就标志着成功。pg_ctl 将企图使用对 psql 合适的端口，如果存在 PGPORT 环境变量，那么将用它。否则，它将查找在 postgresql.conf 文件里是否设置了一个端口。如果都没有，它将使用 PostgreSQL 编译时的缺省端口(缺省 5432)。在等待的时候，pg_ctl 将根据启动或者关闭的成功状况返回一个准确的退出代码。<br /><br />-W<br />不等待启动或者停止的完成。这是启动和重启的缺省。<br /><br />Windows 选项<br />-N servicename<br />要注册的系统服务的名字。这个名字将用于服务名和显示名。<br /><br />-P password<br />用户启动服务的口令<br /><br />-U username<br />用于启动服务的用户的用户名。对于域用户，使用 DOMAIN\username 格式。<br /><br />环境变量<br />PGDATA<br />缺省数据目录位置<br /><br />PGPORT<br />psql 的缺省端口(由 -w 选项使用)。<br /><br />其它的环境变量请参阅 postgres<br /><br />文件<br />postmaster.pid<br />这个文件存在于数据目录中是为了帮助 pg_ctl 判断服务器当前是否在运行。<br /><br />postmaster.opts.default<br />如果这个文件存在于数据目录，pg_ctl (在 start 模式下)将把文件地内容当作传递给 postgres 命令的选项传递过去，除非被 -o 选项覆盖。<br /><br />postmaster.opts<br />如果这个文件存在于数据目录，pg_ctl (在 start 模式下)将把文件地内容当作传递给 postgres 命令的选项传递过去，除非被 -o 选项覆盖。这个文件的内容也会在 status 模式里显示出来。<br /><br />postgresql.conf<br />这个文件在数据目录中，会分析它以查找和 psql 一起用的合适的端口(在 start 模式里给出 -w 的时候)。<br /><br />注意<br />等待完全启动还不是一个定义得很完整的操作，如果访问控制设置为本地客户端在没有手工交互的情况下不能访问的话还可能会失效(比如口令认证)。<br /><br />例子<br />启动服务器<br />启动服务器：<br /><br />$ pg_ctl start启动服务器的一个例子，等到服务器启动了才退出：<br /><br />$ pg_ctl -w start服务器使用 5433 端口，而且不带 fsync 运行，使用：<br /><br />$ pg_ctl -o "-F -p 5433" start停止服务器<br />$ pg_ctl stop使用 -m 选项停止服务器允许用户控制如何关闭后端。<br /><br />重启服务器<br />这个命令几乎等于先停止服务器然后再启动它，只不过 pg_ctl 保存并重新使用上一次运行服务器的命令行参数。重启服务器的最简单的方法是：<br /><br />$ pg_ctl restart重启服务器，等待其停止和重启：<br /><br />$ pg_ctl -w restart使用 5433 端口重启并且重启后关闭 fsync ：<br /><br />$ pg_ctl -o "-F -p 5433" restart显示服务器状态<br />下面是来自 pg_ctl 的状态输出的例子：<br /><br />$ pg_ctl statuspg_ctl: server is running (pid: 13718)Command line was:/usr/local/pgsql/bin/postgres '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'这就是在 restart 模式中被调用的命令行。<br /><br />又见<br />postgres<br /><br />pg_resetxlog<br />名称<br />pg_resetxlog -- 重置一个数据库集群的预写日志以及其它控制内容<br />语法<br />pg_resetxlog [-f] [-n] [-ooid ] [-x xid ] [-e xid_epoch ] [-m mxid ] [-O mxoff ] [-l timelineid, fileid, seg ] datadir<br /><br />描述<br />pg_resetxlog 清理预写日志(WAL)并且可以有选择地重置其它一些存储在 pg_control 文件中的控制信息。有时候，如果这些文件崩溃了，就需要这个功能。一定只把它用作最后的方法，就是说只有因为这样的崩溃导致服务器无法启动的时候才使用。<br /><br />运行这个命令之后，可能就可以启动服务器了，但是，一定要记住数据库可能因为部分提交的事务而含有不完整的数据。你应该马上转储数据，运行 initdb ，然后重新加载。在重新加载之后，检查不完整的部分然后根据需要进行修复。<br /><br />这个命令只能由安装服务器的用户运行，因为它需要对数据目录的读写权限。出于安全考虑，pg_resetxlog 不使用环境变量 PGDATA ，你必须在命令行上声明数据目录。<br /><br />如果 pg_resetxlog 抱怨说它无法判断用于 pg_control 的有效数据，那么你可以强制它继续处理，方法是声明 -f(强制)开关。在这种情况下，那些丢失了的数据将用模糊的近似数值代替。大多数字段都可以匹配上，但是下一个 OID 、下一个事务 ID 、下一个事务 ID 的 epoch(时间点)、下一个多事务 ID(两阶段提交的东西)、下一个多事务偏移量、WAL 开始地址、数据库区域字段可能需要手工帮助，前面六个可以用下面讨论的开关设置。pg_resetxlog 自己的环境是猜测区域字段的来源；看看 LANG 等东西，它们应该和 initdb 运行的环境相匹配。如果你不能判断所有这些字段的正确数值，那么 -f 仍然可以使用，但是这样恢复过来的数据库正确性更值得怀疑：立即转储和重新加载是必须的。在转储之前不要执行任何修改数据的操作，因为任何这样的动作都可能把事情搞得更糟糕。<br /><br />-o, -x, -e, -m, -O, -l 开关允许手工设置下一个 OID 、下一个事务 ID 、下一个事务 ID epoch 、下一个多事务 ID 、下一个多事务偏移量、WAL 起始位置的数值。只有在 pg_resetxlog 无法通过读取 pg_control 判断合适的数值的时候才需要它。安全的数值可以用下面的方法判断：<br /><br />对于下一个事务 ID(-x)而言，一个安全的数值是看看数据目录里的 pg_clog 里数值最大的文件名，然后加一，然后再乘上 1048576 。请注意那些文件名是十六进制的。通常也以十六进制的形式声明开关值是最简单的。比如，如果 0011 是 pg_clog 里最大的记录，-x 0x1200000 就可以了(后面的五个零提供了合适的乘积)。<br /><br />下一个多事务 ID(-m)的安全值可以通过查看数据目录里 pg_multixact/offsets 子目录里面的数字最大的文件名，加一，然后乘以 65536 得到。和上面一样，文件名是十六进制的，因此最简单的方法是给开关声明一个十六进制的开关值，然后在结尾加四个零。<br /><br />下一个多事务偏移量(-O)的安全值可以通过检查数据目录里 pg_multixact/members 子目录下的数字最大的文件名，加一，然后乘以 65536 得到。和上面一样，文件名是十六进制的，因此最简单的方法是给开关声明一个十六进制的开关值，然后在结尾加四个零。<br /><br />WAL 的起始位置(-l)应该比目前存在于数据目录 pg_xlog 里面的任何文件号都大。它的文件名也是十六进制的，并且有三部分。第一部分是"时间线 ID"，通常应该保持相同。第三部分不要选择大于 255(0xFF)；应该是在达到 255 的时候给第二部分增一然后重置第三部分为 0 。比如，如果 00000001000000320000004A 是 pg_xlog 里最大的条目，那么 -l 0x1,0x32,0x4B 就可以了；但如果最大的条目是 000000010000003A000000FF ，那么选择 -l 0x1,0x3B,0x0 或更多。<br /><br />没有很容易的办法来判断比数据库中最大的 OID 大一号的下一个 OID ，不过很走运的是获取正确的下一个 OID 并非非常关键的事情。<br /><br />除了由 pg_resetxlog 设定的字段外，事务 ID epoch 实际上并未存储在数据库里的任何地方。所以只要是涉及到数据库自身的任何数值都有效。你可能需要调整这个值以确保诸如 Slony-I 之类的备份系统能够正常工作。如果是这样的话，应当从下游已复制的数据库中获取恰当的值。<br /><br />-n(无操作)开关指示 pg_resetxlog 打印从 pg_control 重新构造的数值然后不修改任何值就退出。这主要是一个调试工具，但是在 pg_resetxlog 真正处理前进行的整洁性检查的时候可能会有用。<br /><br />注意<br />在服务器运行的时候一定不要运行这个命令。如果发现在数据文件目录里有锁文件，那么 pg_resetxlog 将拒绝启动。如果服务器崩溃，那么可能会剩下一个锁文件；如果这样，你可以删除该锁文件以便允许 pg_resetxlog 运行。但是在你这么做之前，一定要确保没有任何后端服务器进程仍在运行。<br /><br />postgres<br />名称<br />postgres -- PostgreSQL 数据库服务器<br />语法<br />postgres [option...]<br /><br />描述<br />postgres 是 PostgreSQL 数据库服务器。客户端应用程序为了访问数据库，将通过 TCP Socket 或 Unix domain socket 连接到一个运行中的 postgres 进程。然后该 postgres 实例将启动(fork)一个新的、独立的服务器进程来处理这个连接。<br /><br />一个 postgres 总是管理来自同一个数据库集群的数据。一个数据库集群是一组在同一个文件系统位置("数据区")存放数据的数据库。一个系统上可以同时运行多个 postgres 进程，只要他们使用不同的数据区和不同的端口号(见下文)。postgres 启动时需要知道数据区的位置，该位置必须通过 -D 选项或 PGDATA 环境变量指定。通常，-D 或 PGDATA 都直接指向由 initdb 创建的集群目录。其他可能的文件布局在节17.2里面有讨论。<br /><br />缺省时 postgres 在前台启动并将日志信息输出到标准错误。但在实际应用中，postgres 应当作为后台进程启动，而且多数是在系统启动时自动启动。<br /><br />postgres 还能以单用户模式运行。这种用法的主要用于 initdb 的初始化过程中。有时候它也被用于调试灾难性恢复。不过，单用户模式运行的服务器并不适合于调试，因为没有实际的进程间通讯和锁动作发生。当从 shell 上以单用户模式调用时，用户可以输入查询，然后结果会在屏幕上以一种更适合开发者阅读(不适合普通用户)的格式显示出来。在单用户模式下，将把会话用户 ID 设为 1 并赋予超级用户权限。该用户不必实际存在，因此单用户模式运行的服务器可以用于对某些意外损坏的系统表进行手工恢复。<br /><br />选项<br />postgres 接受下列命令行参数。关于这些选项的更详细讨论请参考章17。你也可以通过设置一个配置文件来减少敲击这些选项。有些(安全的)选项还可以从连接过来的客户端设置，以一种应用无关的方法仅对该会话生效。比如，如果设置了 PGOPTIONS 环境变量，那么基于 libpq 的客户端就都把那个字符串传递给服务器，并被服务器解释成 postgres 命令行选项。<br /><br />通用用途<br />-A 0|1<br />打开运行时断言检查，是检测编程错误的调试帮助。只有在编译 PostgreSQL 时打开了它，你才能使用它。如果编译时打开了，缺省是打开。<br /><br />-B nbuffers<br />为服务器进程分配和管理的共享内存缓冲区数量。这个参数的缺省值是 initdb 自动选择的；参考节17.4.1获取更多信息。<br /><br />-c name=value<br />设置一个命名的运行时参数。PostgreSQL 支持的配置参数在章17里描述。大多数其它命令行选项实际上都是这样的参数赋值的短形式。-c 可以出现多次从而设置多个参数。<br /><br />-d debug-level<br />设置调试级别。数值越高，写到服务器日志的调试输出越多。取值范围是 1 到 5 。还可以针对某次单独的会话使用 -d 0 来防止从父 postgres 进程继承日志级别。<br /><br />-D datadir<br />声明数据目录或者配置文件的文件系统路径。细节详见节17.2。<br /><br />-e<br />把缺省日期风格设置为"European"，也就是说用 DMY 规则解释日期输入，并且在一些日期输出格式里日子在月份前面打印。参阅节8.5获取更多细节。<br /><br />-F<br />关闭 fsync 调用以提高性能，但是要冒系统崩溃时数据毁坏的风险。声明这个选项等效关闭了 fsync 参数。在使用之前阅读详细文档！<br /><br />-h hostname<br />指定 postgres 侦听来自前端应用 TCP/IP 连接的 IP 主机名或地址。数值也可以是一个用空格分隔的地址列表，或者 * 表示监听所有可用的地址。空值表示不监听任何 IP 地址，而只使用 Unix 域套接字与客户端通信。缺省只监听 localhost 。声明这个选项等效于设置 listen_addresses 配置参数。<br /><br />-i<br />这个选项允许远程客户通过 TCP/IP(网际域套接字)与服务器通讯。没有这个选项，服务器将只接受本地连接。这个选项等效于在 postgresql.conf 中或者通过 -h 选项将 listen_addresses 设为 *<br /><br />这个选项已经废弃了，因为它不能实现 listen_addresses 的所有功能。所以最好直接设置 listen_addresses<br /><br />-k directory<br />指定 postgres 侦听来自前端应用连接的 Unix 域套接字的目录。缺省通常是 /tmp ，但是可以在编译的时候修改。<br /><br />-l<br />这个选项使用 SSL 进行的安全通讯。要使用这个选项，编译 PostgreSQL 时你必须打开了 SSL 支持。有关使用 SSL 的信息，请参考节16.7。<br /><br />-N max-connections<br />设置最多允许同时连接多少个客户端(也就是最多同时运行多少个服务器进程)。缺省值为 32 ，不过该值最大可以设置为系统所能承受的极限。请注意 -B 的值要求至少两倍于 -N 的值。参阅节16.4获取有关大量客户的系统资源需求。声明这个选项等效于声明 max_connections 配置参数。<br /><br />-o extra-options<br />在 extra-options 里面指定的命令行选项将被传递给所有由这个 postgres 派生的服务进程。如果选项字符串包含任何空白，那么整个字符串必须用引号界定。<br /><br />反对使用该选项，所有服务器进程的命令行选项都可以直接在 postgres 命令行上指定，不必这么麻烦。<br /><br />-p port<br />指定 postgres 侦听客户端连接的 TCP/IP 端口或本地 Unix domain socket 文件的扩展。缺省的端口号是环境变量 PGPORT 的值。如果 PGPORT 没有设置，那么缺省是 PostgreSQL 编译时指定的值(通常是 5432)。如果你声明了一个非缺省端口，那么所有前端应用都必须用命令行选项或者 PGPORT 声明同一个端口。<br /><br />-s<br />在每条命令结束时打印时间信息和其它统计信息。这个开关对测试性能和调节缓冲区数量有好处。<br /><br />-S work-mem<br />声明内部排序和散列在求助于临时磁盘文件之前可以使用的内存数量。参阅节17.4.1里描述的配置变量 work_mem<br /><br />--name=value<br />设置一个命名的运行时参数；其缩写形式是 -c<br /><br />--describe-config<br />以制表符分隔的 COPY 格式，导出服务器内部配置变量、描述、缺省值。设计它主要是给管理工具使用。<br /><br />半内部选项<br />还有几个其它的选项可以声明，主要用于调试用途。这些东西在这里列出只是给 PostgreSQL 系统开发人员使用的。强烈反对使用这些选项。另外这些选项的任何一项都可能在未来版本中消失而不加说明。<br /><br />-f { s | i | m | n | h }<br />禁止某种扫描和连接方法的使用：s 和 i 分别关闭顺序和索引扫描，而 n, m, h 分别关闭嵌套循环，融合(merge)和 Hash 连接。<br /><br />顺序扫描和嵌套循环都不可能完全被关闭。 -fs 和 -fn 选项仅仅是在存在其它方法时阻碍优化器使用这些方法罢了。<br /><br />-n<br />该选项主要用于调试导致服务器进程异常崩溃的问题。对付这种情况的一般策略是通知所有其它服务器进程终止并重新初始化共享内存和信号灯。这是因为一个出错的服务器进程可能在终止之前就已经对共享的东西造成了破坏。该选项指定 postgres 不重新初始化共享数据结构。一个有经验的系统程序员这时就可以使用调试器检查共享内存和信号灯状态。<br /><br />-O<br />允许修改系统表的结构。这个参数用于 initdb<br /><br />-P<br />读取系统表时忽略系统索引(但在更改数据时仍然更新索引)。这对于从索引已经损坏的系统表中回复是很有帮助的。<br /><br />-t pa[rser] | pl[anner] | e[xecutor]<br />打印与每个主要系统模块相关的查询记时统计。它不能和 -s 选项一起使用。<br /><br />-T<br />该选项主要用于调试导致服务器进程异常崩溃的问题。对付这种情况的一般策略是通知所有其它服务器进程终止并重新初始化共享内存和信号灯。这是因为一个出错的服务器进程可能在终止之前就已经对共享的东西造成了破坏。该选项指定 postgres 通过发送 SIGSTOP 信号停止其他所有服务器进程，但是并不让它们退出。这样就允许系统程序员手动从所有服务器进程搜集内核转储。<br /><br />-v protocol<br />声明这次会话使用的前/后服务器协议的版本数。该选项仅在内部使用。<br /><br />-W seconds<br />一旦看见这个选项，进程就睡眠标出的秒数。这样就给开发者一些时间把调试器附着在该服务器进程上。<br /><br />-y database<br />表明这是一个由父 postgres 进程启动的子进程，并使用指定的数据库。该选项仅供内部使用。<br /><br />单用户模式的选项<br />下面的选项仅在单用户模式下可用。<br /><br />--single<br />选中单用户模式。这个必须是命令行中的第一个选项。<br /><br />database<br />要访问的数据库名字。如果忽略掉则缺省为用户名。<br /><br />-E<br />回显所有命令<br /><br />-j<br />禁止使用新行作为语句分隔符<br /><br />-r filename<br />将所有服务器输出日志保存到 filename 中。在多用户模式下该选项将被忽略，所有进程都将使用 stderr<br /><br />环境变量<br />PGCLIENTENCODING<br />客户端使用的缺省字符编码。客户端可以独立地覆盖它。这个值也可以在配置文件里设置。<br /><br />PGDATA<br />缺省数据目录位置<br /><br />PGDATESTYLE<br />运行时参数 DateStyle 的缺省值。现在反对使用该环境变量。<br /><br />PGPORT<br />缺省端口(最好在配置文件中设置)<br /><br />TZ<br />服务器的时区<br /><br />诊断<br />一个提到了 semget 或 shmget 的错误信息可能意味着你需要重新配置你的内核，提供足够的共享内存和信号灯。更多讨论，参阅节16.4。你也可以通过降低 shared_buffers 值以减少 PostgreSQL 的共享内存的消耗，或者降低 max_connections 值减少 PostgreSQL 的信号灯的消耗。<br /><br />如果碰到一个说另外一个服务器正在运行的错误信息，可以根据不同的系统使用命令<br /><br />$ ps ax | grep postgres或<br /><br />$ ps -ef | grep postgres如果确信没有冲突的服务器正在运行，那么你可以删除消息里提到的锁文件然后再次运行。<br /><br />抱怨无法绑定端口的错误信息可能表明该端口已经被其它非 PostgreSQL 进程使用。如果终止 postgres 后又马上用同一个端口运行它，也可能得到这个错误信息；这时，你必须多等几秒，等操作系统关闭了该端口后再试。最后，如果你使用了一个操作系统认为是保留的端口，也可能导致这个错误信息。例如，我的 Unix 版本认为低于 1024 的端口号是"可信任的"，因而只有 Unix 超级用户可以使用它们。<br /><br />注意<br />如果有可能，不要使用 SIGKILL 杀死主 postgres 服务器进程。这样会阻止 postgres 在退出前释放它持有的系统资源(例如共享内存和信号灯)。这样可能会影响到将来启动新的 postgres 进程。<br /><br />可以使用 SIGTERM, SIGINT, SIGQUIT 信号正常结束 postgres 服务器进程。第一个信号将等待所有的客户端退出后才退出。第二个将强制断开所有客户端，而第三个将不停止立刻退出，导致在重启时的恢复运行。SIGHUP 会重新加载服务器配置文件。也可以向一个单独的服务器进程发送 SIGHUP 信号，但是这样做没什么意义。<br /><br />pg_ctl 工具可以用于安全而有效地启停 postgres ，推荐使用。<br /><br />要推出一个正在运行的查询，可以向正在执行该查询的进程发送 SIGINT 信号。<br /><br />主 postgres 服务器进程向子进程发送 SIGTERM 信号让它们正常退出；发送 SIGQUIT 信号立即退出且不做清理工作，用户应当尽量避免使用该信号。同时，发送 SIGKILL 信号也是不明智的：主 postgres 进程将把这个信号当作崩溃信号，然后会强制其他兄弟进程作为标准的崩溃回复过程退出。<br /><br />臭虫<br />-- 选项在 FreeBSD 或 OpenBSD 上无法运行，应该使用 -c 。这在受影响的系统里是个臭虫；如果这个毛病没有修补好，将来的 PostgreSQL 版本将提供一个绕开的办法。<br /><br />用法<br />启动一个单用户模式的服务器：<br /><br />postgres --single -D /usr/local/pgsql/data other-options my_database用 -D 给服务器提供正确的数据库目录的路径，或者确保环境变量 PGDATA 已经正确设置。同时还要声名你想用的特定数据库名字。<br /><br />通常，独立运行的服务器把换行符当做命令输入完成字符；它还不懂分号的作用，因为那些东西是在 psql 里的。要想把一行分成多行写，你必需在除最后一个换行符以外的每个换行符前面敲一个反斜杠。<br /><br />但是如果使用了 -j 命令行选项，新行将不被当作命令结束符。此时服务器将从标准输入一直读取到 EOF 标志为止，然后把把所有读到的内容当作一个完整的命令字符串看待，并且反斜杠与换行符也被当作普通字符来看待。<br /><br />输入 EOF(Control+D)即可退出会话。如果你已经使用了 -j 则必须连续使用两个 EOF 才行。<br /><br />请注意单用户模式运行的服务器不会提供复杂的行编辑功能(比如，没有命令行历史)。<br /><br />例子<br />用缺省值在后台启动 postgres ：<br /><br />$ nohup postgres &gt;logfile 2&gt;&amp;1 &lt;/dev/null &amp;在指定的端口启动 postgres ：<br /><br />$ postgres -p 1234这条命令将在端口 1234 启动 postgres 。你应该这样使用 psql 与之连接：<br /><br />$ psql -p 1234或者设置环境变量 PGPORT ：<br /><br />$ export PGPORT=1234$ psql命名的运行时参数可以用下列的风格之一设置：<br /><br />$ postgres -c work_mem=1234$ postgres --work-mem=1234两种形式都覆盖那些现有的在 postgresql.conf 里面的 work_mem 设置。请注意在参数名里的下划线在命令行上可以写成下划线，也可以写成连字符。除了用于短期的实验以外，更好的习惯是编辑 postgresql.conf 里面的设置，而不是倚赖命令行开关设置参数。<br /><br />又见<br />initdb, pg_ctl<br /><br />postmaster<br />Name<br />postmaster -- PostgreSQL 数据库服务器<br />Synopsis<br />postmaster [option...]<br /><br />Description<br />postmaster 是 postgres 的别名，反对使用。<br /><br />又见<br />postgres<br /></div><img src ="http://www.cppblog.com/colorful/aggbug/199632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-04-22 14:06 <a href="http://www.cppblog.com/colorful/archive/2013/04/22/199632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>postgresql 编码</title><link>http://www.cppblog.com/colorful/archive/2013/03/05/198236.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Tue, 05 Mar 2013 10:40:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2013/03/05/198236.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/198236.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2013/03/05/198236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/198236.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/198236.html</trackback:ping><description><![CDATA[psql 里输入 \encoding 查看当前编码<br />&nbsp;&nbsp;&nbsp; \encoding utf8&nbsp;&nbsp; 设置为utf8<img src ="http://www.cppblog.com/colorful/aggbug/198236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2013-03-05 18:40 <a href="http://www.cppblog.com/colorful/archive/2013/03/05/198236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为数据库建立索引</title><link>http://www.cppblog.com/colorful/archive/2012/06/09/178196.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 09 Jun 2012 07:44:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2012/06/09/178196.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/178196.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2012/06/09/178196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/178196.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/178196.html</trackback:ping><description><![CDATA[<div><p>最普通的情况，是为出现在where子句的字段建一个索引。为方便讲述，我们先建立一个如下的表。 <br />CREATE TABLE mytable ( <br />　id serial primary key, <br />　category_id int not null default 0, <br />　user_id int not null default 0, <br />　adddate int not null default 0 <br />); <br />如果你在查询时常用类似以下的语句： <br />　SELECT * FROM mytable WHERE category_id=1; <br />最直接的应对之道，是为category_id建立一个简单的索引： <br />　CREATE INDEX mytable_categoryid <br />　ON mytable (category_id); <br />OK.如果你有不止一个选择条件呢？例如： <br />　SELECT * FROM mytable WHERE category_id=1 AND user_id=2; <br />你的第一反应可能是，再给user_id建立一个索引。不好，这不是一个最佳的方法。你可以建立多重的索引。 <br />CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id); <br />注意到我在命名时的习惯了吗？我使用"表名_字段1名_字段2名"的方式。你很快就会知道我为什么这样做了。 <br />现在你已经为适当的字段建立了索引，不过，还是有点不放心吧，你可能会问，数据库会真正用到这些索引吗？测试一下就OK，对于大多数的数据库来说，这是很容易的，只要使用EXPLAIN命令： <br />EXPLAIN <br />　SELECT * FROM mytable <br />WHERE category_id=1 AND user_id=2; <br />　This is what Postgres 7.1 returns (exactly as I expected) <br />　NOTICE: QUERY PLAN: <br />　Index Scan using mytable_categoryid_userid on <br />　mytable (cost=0.00..2.02 rows=1 width=16) <br />EXPLAIN <br />以上是postgres的数据，可以看到该数据库在查询的时候使用了一个索引（一个好开始），而且它使用的是我创建的第二个索引。看到我上面命名的好处了吧，你马上知道它使用适当的索引了。</p> <p>接着，来个稍微复杂一点的，如果有个ORDER BY字句呢？不管你信不信，大多数的数据库在使用order by的时候，都将会从索引中受益。 <br />　SELECT * FROM mytable <br />WHERE category_id=1 AND user_id=2 <br />　ORDER BY adddate DESC; </p> <p>很简单，就象为where字句中的字段建立一个索引一样，也为ORDER BY的字句中的字段建立一个索引： <br />　CREATE INDEX mytable_categoryid_userid_adddate <br />　ON mytable (category_id,user_id,adddate); <br />　注意: "mytable_categoryid_userid_adddate" 将会被截短为 <br />"mytable_categoryid_userid_addda" <br />　CREATE <br />　EXPLAIN SELECT * FROM mytable <br />WHERE category_id=1 AND user_id=2 <br />　ORDER BY adddate DESC; <br />　NOTICE: QUERY PLAN: <br />　Sort (cost=2.03..2.03 rows=1 width=16) <br />-&gt; Index Scan using mytable_categoryid_userid_addda <br />　on mytable (cost=0.00..2.02 rows=1 width=16) <br />　EXPLAIN <br />看看EXPLAIN的输出，数据库多做了一个我们没有要求的排序，这下知道性能如何受损了吧，看来我们对于数据库的自身运作是有点过于乐观了，那么，给数据库多一点提示吧。 <br />为 了跳过排序这一步，我们并不需要其它另外的索引，只要将查询语句稍微改一下。这里用的是postgres，我们将给该数据库一个额外的提示--在 ORDER  BY语句中，加入where语句中的字段。这只是一个技术上的处理，并不是必须的，因为实际上在另外两个字段上，并不会有任何的排序操作，不过如果加 入，postgres将会知道哪些是它应该做的。 <br />　EXPLAIN SELECT * FROM mytable <br />WHERE category_id=1 AND user_id=2 <br />　ORDER BY category_id DESC,user_id DESC,adddate DESC; <br />　NOTICE: QUERY PLAN: <br />　Index Scan Backward using <br />mytable_categoryid_userid_addda on mytable <br />　(cost=0.00..2.02 rows=1 width=16) <br />　EXPLAIN <br />现在使用我们料想的索引了，而且它还挺聪明，知道可以从索引后面开始读，从而避免了任何的排序。 <br />以 上说得细了一点，不过如果你的数据库非常巨大，并且每日的页面请求达上百万算，我想你会获益良多的。不过，如果你要做更为复杂的查询呢，例如将多张表结合 起来查询，特别是where限制字句中的字段是来自不止一个表格时，应该怎样处理呢？我通常都尽量避免这种做法，因为这样数据库要将各个表中的东西都结合 起来，然后再排除那些不合适的行，搞不好开销会很大。 <br />如果不能避免，你应该查看每张要结合起来的表，并且使用以上的策略来建立索引，然后再用EXPLAIN命令验证一下是否使用了你料想中的索引。如果是的话，就OK。不是的话，你可能要建立临时的表来将他们结合在一起，并且使用适当的索引。 <br />要注意的是，建立太多的索引将会影响更新和插入的速度，因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格，就没有必要为一个很少使用的where字句单独建立索引了，对于比较小的表，排序的开销不会很大，也没有必要建立另外的索引。 <br />以 上介绍的只是一些十分基本的东西，其实里面的学问也不少，单凭EXPLAIN我们是不能判定该方法是否就是最优化的，每个数据库都有自己的一些优化器，虽 然可能还不太完善，但是它们都会在查询时对比过哪种方式较快，在某些情况下，建立索引的话也未必会快，例如索引放在一个不连续的存储空间时，这会增加读磁 盘的负担，因此，哪个是最优，应该通过实际的使用环境来检验。 <br />在刚开始的时候，如果表不大，没有必要作索引，我的意见是在需要的时候才作索引，也可用一些命令来优化表，例如MySQL可用"OPTIMIZE TABLE"。 <br />综上所述，在如何为数据库建立恰当的索引方面，你应该有一些基本的概念了。 </p></div><img src ="http://www.cppblog.com/colorful/aggbug/178196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2012-06-09 15:44 <a href="http://www.cppblog.com/colorful/archive/2012/06/09/178196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库的索引</title><link>http://www.cppblog.com/colorful/archive/2012/06/09/178194.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 09 Jun 2012 07:23:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2012/06/09/178194.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/178194.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2012/06/09/178194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/178194.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/178194.html</trackback:ping><description><![CDATA[<div><p><strong>索引</strong> </p> <p>使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构，例如 employee 表的姓（lname）列。如果要按姓查找特定职员，与必须搜索表中的所有行相比，索引会帮助您更快地获得该信息。</p> <p>索引提供指向存储在表的指定列中的数据值的指针，然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似：它搜索索引以找到特定值，然后顺指针找到包含该值的行。</p> <p>在数据库关系图中，您可以在选定表的&#8220;索引/键&#8221;属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表，或保存该表所在的关系图时，索引将保存在数据库中。有关详细信息，请参见创建索引。</p>注意;并非所有的数据库都以相同的方式使用索引。有关更多信息，请参见数据库服务器注意事项，或者查阅数据库文档。  <p>作为通用规则，只有当经常查询索引列中的数据时，才需要在表上创建索引。索引占用磁盘空间，并且降低添加、删除和更新行的速度。在多数情况下，索引用于数据检索的速度优势大大超过它的。</p><strong>索引列</strong>  <p>可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。</p> <p>如果经常同时搜索两列或多列或按两列或多列排序时，索引也很有帮助。例如，如果经常在同一查询中为姓和名两列设置判据，那么在这两列上创建多列索引将很有意义。</p> <p>确定索引的有效性：  </p><ul type="disc"><li>检查查询的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象。  </li><li>对新索引进行试验以检查它对运行查询性能的影响。  </li><li>考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。  </li><li>检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。  </li><li>检查某列中唯一数据值的数量，并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性，这有助于确定该列是否适合建立索引，如果适合，确定索引的类型。</li></ul><strong>索引类型</strong>  <p>根据数据库的功能，可以在数据库设计器中创建三种索引：唯一索引、主键索引和聚集索引。有关数据库所支持的索引功能的详细信息，请参见数据库文档。</p><strong>提示：</strong>尽管唯一索引有助于定位信息，但为获得最佳性能结果，建议改用主键或唯一约束。 <h3>唯一索引</h3> <p>唯一索引是不允许其中任何两行具有相同索引值的索引。</p> <p>当现有数据中存在重复的键值时，大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如，如果在 employee 表中职员的姓 (lname) 上创建了唯一索引，则任何两个员工都不能同姓。</p> <p><strong>主键索引</strong></p> <p>数据库表经常有一列或列组合，其值唯一标识表中的每一行。该列称为表的主键。</p> <p>在数据库关系图中为表定义主键将自动创建主键索引，主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时，它还允许对数据的快速访问。</p> <p><strong>聚集索引</strong></p> <p>在聚集索引中，表中行的物理顺序与键值的逻辑（索引）顺序相同。一个表只能包含一个聚集索引。</p> <p>如果某索引不是聚集索引，则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比，聚集索引通常提供更快的数据访问速度。</p></div><img src ="http://www.cppblog.com/colorful/aggbug/178194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2012-06-09 15:23 <a href="http://www.cppblog.com/colorful/archive/2012/06/09/178194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PostgreSQL: 数组类型(array) 的使用 </title><link>http://www.cppblog.com/colorful/archive/2012/06/08/178093.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Fri, 08 Jun 2012 08:04:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2012/06/08/178093.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/178093.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2012/06/08/178093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/178093.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/178093.html</trackback:ping><description><![CDATA[<div>http://francs3.blog.163.com/blog/static/405767272011103105752290/</div><div> &nbsp; PostgreSQL 支持数组类型，包括一维数组和多维数组，在某些应用场合数组的应用还是很需要的，<br />这里简单介绍下一维数组的使用及有关数组函数和操作符的使用。<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <br /><strong>--定义数组<br /></strong>mydb=&gt; create table test_array(id serial primary key, phone int8[]);<br />NOTICE:&nbsp; CREATE TABLE will create implicit sequence "test_array_id_seq" for serial column "test_array.id"<br />NOTICE:&nbsp; CREATE TABLE / PRIMARY KEY will create implicit index "test_array_pkey" for table "test_array"<br />CREATE TABLE<br /><br />mydb=&gt; \d test_array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table "mydb.test_array"<br />&nbsp;Column |&nbsp;&nbsp; Type&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Modifiers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />--------+----------+---------------------------------------------------------<br />&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp; | integer&nbsp; | not null default nextval('test_array_id_seq'::regclass)<br />&nbsp;phone&nbsp; | bigint[] | <br />Indexes:<br />&nbsp;&nbsp;&nbsp; "test_array_pkey" PRIMARY KEY, btree (id)  <p><br /><strong>--数组元素插入有两种方式<br /></strong>mydb=&gt; insert into test_array(phone) values ('{1,2}');<br />INSERT 0 1<br />mydb=&gt; insert into test_array(phone) values ('{2,3}');<br />INSERT 0 1</p>  <p>mydb=&gt; insert into test_array(phone) values (array[3,4,5]);<br />INSERT 0 1</p>  <p>mydb=&gt; select * From test_array;<br />&nbsp;id |&nbsp; phone&nbsp; <br />----+---------<br />&nbsp; 1 | {1,2}<br />&nbsp; 2 | {2,3}<br />&nbsp; 3 | {3,4,5}<br />(3 rows)</p>  <p><br /><strong>--数组元素的引用<br /></strong>mydb=&gt; select phone&nbsp; from test_array where id=1;<br />&nbsp;phone <br />-------<br />&nbsp;{1,2}<br />(1 row)</p>  <p>mydb=&gt; select phone[1],phone[2]&nbsp; from test_array where id=1;<br />&nbsp;phone | phone <br />-------+-------<br />&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp; 2<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br /><strong>一 常见的数组操作(Array Operators)<br /></strong></p>  <div><img alt="PostgreSQL: 数组类型(array) 的使用 - francs - My DBA LIFE" style="margin: 0px 10px 0px 0px;" src="http://img5.ph.126.net/OicT8iqF-ZGtzbcgWcoXSg==/2813342392240057435.jpg" /></div>  <p>&nbsp;</p>  <p><strong>--equal<br /></strong>mydb=&gt;&nbsp; select array[1,2]=array[1.1,2.1]::int[];<br />&nbsp;?column? <br />----------<br />&nbsp;t<br />(1 row)</p>  <p><strong>--not equal<br /></strong>mydb=&gt; select array[1,2] &lt;&gt; array[1,2,3];<br />&nbsp;?column? <br />----------<br />&nbsp;t<br />(1 row)</p>  <p><br /><strong>--less than<br /></strong>mydb=&gt; select ARRAY[1,2,3] &lt; ARRAY[1,2,4];<br />&nbsp;?column? <br />----------<br />&nbsp;t<br />(1 row)</p>  <p><br /><strong>--greater than<br /></strong>mydb=&gt; select ARRAY[1,4,3] &gt; ARRAY[1,2,4];<br />&nbsp;?column? <br />----------<br />&nbsp;t<br />(1 row)</p>  <p><br /><strong>--contains<br /></strong>mydb=&gt; select ARRAY[1,4,3] @&gt; ARRAY[3,1];<br />&nbsp;?column? <br />----------<br />&nbsp;t<br />(1 row)</p>  <p><br /><strong>--is contained by<br /></strong>mydb=&gt; select ARRAY[2,7] &lt;@ ARRAY[1,7,4,2,6];<br />&nbsp;?column? <br />----------<br />&nbsp;t<br />(1 row)</p>  <p><br /><strong>--overlap (have elements in common)<br /></strong>mydb=&gt; select ARRAY[1,4,3] &amp;&amp; ARRAY[2,1];<br />&nbsp;?column? <br />----------<br />&nbsp;t<br />&nbsp;&nbsp;&nbsp;&nbsp; </p>  <p><strong>二 常见数组函数( Array Functions )<br />--将数据元素追加到数组<br /></strong>mydb=&gt; select array_append(array[2,3,4],5);<br />&nbsp;array_append <br />--------------<br />&nbsp;{2,3,4,5}<br />(1 row)</p>  <p><strong>--连接两个数组<br /></strong>mydb=&gt; select array_cat(array[1,2],array[3,4]);<br />&nbsp;array_cat <br />-----------<br />&nbsp;{1,2,3,4}<br />(1 row)</p>  <p><strong>--获得数组的维度<br /></strong>mydb=&gt; select array_ndims(array[1,2,3]);<br />&nbsp;array_ndims <br />-------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />(1 row)</p>  <p>mydb=&gt; select array_ndims(array[[1,2,3],[4,5,6]]);<br />&nbsp;array_ndims <br />-------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br />(1 row)</p>  <p><br /><strong>--获得数组的长度&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^<br />mydb=&gt; select array_length(array[1,2,3],1);<br />&nbsp;array_length <br />--------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br />(1 row)</p>  <p>mydb=&gt; select array_length(array[[1,2],[2,3]],1);<br />&nbsp;array_length <br />--------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br />(1 row)</p>  <p><br /><strong>三 intarray 模块的数组函数<br />--获取元素个数据总和<br /></strong>mydb=&gt; select icount(array[1,2]);<br />&nbsp;icount <br />--------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br />(1 row)</p>  <p>mydb=&gt; select icount(array[[1,2],[2,3]]);<br />&nbsp;icount <br />--------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4<br />(1 row)</p>  <p><br /><strong>--排序<br /></strong>mydb=&gt; select sort_asc(array[4,8,7]);<br />&nbsp;sort_asc <br />----------<br />&nbsp;{4,7,8}<br />(1 row)</p>  <p>mydb=&gt; select sort_desc(array[4,8,7]);<br />&nbsp;sort_desc <br />-----------<br />&nbsp;{8,7,4}<br />(1 row)</p>  <p>mydb=&gt; select sort_desc(array[[4,8,7],[8,9,7]]);<br />&nbsp;&nbsp;&nbsp;&nbsp; sort_desc&nbsp;&nbsp;&nbsp;&nbsp; <br />-------------------<br />&nbsp;{{9,8,8},{7,7,4}}<br />(1 row)</p>  <p><br /><strong>四 intarray 模块的数组操作符<br /></strong></p>  <div><img alt="PostgreSQL: 数组类型(array) 的使用 - francs - My DBA LIFE" style="margin: 0px 10px 0px 0px;" src="http://img3.ph.126.net/LWvao_zuJ5UyA2N5A1bQPA==/672162244402103823.jpg" /></div>  <p>&nbsp;</p>  <p><strong>--表数据<br /></strong>mydb=&gt; select * from test_array;<br />&nbsp;id |&nbsp; phone&nbsp; <br />----+---------<br />&nbsp; 1 | {1,2}<br />&nbsp; 2 | {2,3}<br />&nbsp; 3 | {3,4,5}<br />&nbsp; 4 | {4,5,6}<br />&nbsp; 5 | {4,5,7}<br />(5 rows)</p>  <p><br /><strong>--查找包括相同元素的记录<br /></strong>mydb=&gt; select id ,phone from test_array where phone &amp;&amp; array[1,2]::int8[];<br />&nbsp;id | phone <br />----+-------<br />&nbsp; 1 | {1,2}<br />&nbsp; 2 | {2,3}<br />(2 rows)</p>  <p><br /><strong>--查找数组元素的交集<br /></strong>mydb=&gt; select array[1,2,3] &amp; array[3,4,5];<br />&nbsp;?column? <br />----------<br />&nbsp;{3}<br />(1 row)</p>  <br /><strong>五 索引的使用<br /></strong>&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;数组支持创建 GiST 和 GIN 类型索引，这两类索引的选择要根据场合，简单的说， GIN 类型索引在查询上要比<br />&nbsp; GiST 类型索引快，但在 update 的时候要慢些，所以 GIN 类型索引适合表数据不太变化的场合，而 GiST 索引适用<br />&nbsp; 于表数据经常需要 UPDATE 的场景。</div><img src ="http://www.cppblog.com/colorful/aggbug/178093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2012-06-08 16:04 <a href="http://www.cppblog.com/colorful/archive/2012/06/08/178093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>postgresql安装</title><link>http://www.cppblog.com/colorful/archive/2012/05/30/176790.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Wed, 30 May 2012 08:48:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2012/05/30/176790.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/176790.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2012/05/30/176790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/176790.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/176790.html</trackback:ping><description><![CDATA[<br />下载postgresql-9.1.3.tar.bz2<br />解压tar -vxf postgresql-9.1.3.tar.bz2<br /><br />安装<br /><div> ./configure &#8211;without-readline &#8211;without-zlib<br />make<br />su <br />make install<br /><br />设置<br />mkdir /home/zc/postgresql/data<br />chown postgres /home/zc/postgresql/data<br />su - postgres</div><br />/usr/local/gpsql/bin/initdb -D /home/zc/postgresql/data<br />/usr/local/gpsql/bin/postgres -D /home/zc/postgresql/data &gt;logfiel 2&gt;&amp;1 &amp;<br />/usr/local/pgsql/bin/createdb test<br />/usr/local/pgsql/bin/psql test&nbsp;&nbsp;&nbsp; // 这里修改postgres的密码,<br /><div>test=#&nbsp;ALTER USER postgres WITH PASSWORD &#8216;postgres&#8217;;<br /> test=#&nbsp;\q<br /><br />修改系统用户postgres的密码(注意，上面的是数据库用户，这个是debian用户, 将它们密码设为相同的)<br /><div>root@ubuntuserver:~#&nbsp;sudo passwd -d postgres<br /> root@ubuntuserver:~#&nbsp;sudo -u postgres passwd</div><br />修改配置文件<br />cd /home/zc/postgresql/data<br />vim postgresql.conf<br /><div>找到listen_address=&#8217;localhost&#8217;, 将前面的注释去掉，并把&#8217;localhost&#8217;该为&#8217;*&#8217;。<br />vim pg_hba.conf</div>在后面加上<div>host&nbsp;&nbsp; all all 192.168.0.0/24&nbsp;&nbsp; password</div><div>这句的意思是：同网络中192.168.0.*的机器可以以密码的形式使用所有的数据库。更具体的参数意义直接看该配置文件中的注释就可以了<br /><br />配置好后重起数据库<br />/usr/local/pgsql/bin/pg_ctl stop -D /home/zc/postgresql/data<br /><div>/usr/local/gpsql/bin/postgres -D /home/zc/postgresql/data &gt;logfiel 2&gt;&amp;1 &amp;</div><br />Ok<br />查看是否有开启监听<br />netstat -plunt | grep 5432<br /><br />-----------------------------------------------------------<br /><div><div> mkdir&nbsp;-p&nbsp;/data/postgres<br />ln&nbsp;-s&nbsp;/data/postgres/&nbsp;/home/<br />groupadd&nbsp;postgres<br />useradd&nbsp;-d&nbsp;/home/postgres&nbsp;-g&nbsp;postgres&nbsp;postgres<br />chown&nbsp;-R&nbsp;postgres:postgres&nbsp;/data/postgres/<br /><div>su&nbsp;-&nbsp;postgres&nbsp;-c&nbsp;"/usr/local/services/postgresql/bin/initdb&nbsp;-A&nbsp;md5&nbsp;--locale=en_US.utf8&nbsp;--lc-ctype=en_US.utf8&nbsp;&nbsp;-E&nbsp;UTF-8&nbsp;-W&nbsp;/data/postgres"</div><br />mkdir&nbsp;/data/postgres/pg_log<br />chown&nbsp;-R&nbsp;postgres:postgres&nbsp;/data/postgres/pg_log<br /><br /><br /> </div></div></div></div><img src ="http://www.cppblog.com/colorful/aggbug/176790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2012-05-30 16:48 <a href="http://www.cppblog.com/colorful/archive/2012/05/30/176790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu下Postgresql8.4安装配置</title><link>http://www.cppblog.com/colorful/archive/2012/05/26/176256.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 26 May 2012 08:30:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2012/05/26/176256.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/176256.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2012/05/26/176256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/176256.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/176256.html</trackback:ping><description><![CDATA[<div><p>注意事项：由于wordpress会自动将半角单引号转换为全角单引号，引用代码时需要手动修改为单引号<strong></strong></p> <p><strong>第一步：在Ubuntu下安装Postgresql</strong></p> <div> <p><strong>[代码内容]</strong><br /> root@ubuntuserver:~#&nbsp;sudo apt-get install postgresql-8.4 postgresql-client-8.4 postgresql-contrib-8.4<br /> <strong>[代码说明]</strong><br /> 安装服务端和命令行客户端psql。<br /> <strong>[功能说明]</strong><br /> /usr/lib/postgresql/8.4/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存放postgresql相关的二进制文件<br /> /usr/lib/postgresql/8.4/bin/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可执行文件<br /> /usr/lib/postgresql/8.4/lib/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 共享库文件<br /> /etc/postgres/8.4/main/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存放postgresql配置文文件<br /> /var/lib/postgresql/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; postgres用户的主文件夹</p> <p><strong>第二步：修改PostgreSQL数据库的默认用户postgres的密码(注意不是linux系统帐号)</strong></p> <p><strong>[代码内容]</strong><br /> root@ubuntuserver:~#&nbsp;sudo -u postgres psql<br /> postgres=#&nbsp;ALTER USER postgres WITH PASSWORD &#8216;postgres&#8217;;<br /> postgres=#&nbsp;\q<br /> <strong>[代码说明]</strong><br /> &#8216;#&#8217;和&#8217;#&#8217;之前的字符是系统提示符，&#8217;postgres=#&#8217;是psql客户端的提示符，红色字符为输入命令（本文其它部分亦如此）；<br /> 第一行：运行psql,psql是一个标准的postgressql客户端，也可以使用&#8221;sudo su postgres -c psql&#8221;，效果是一样的；<br /> 第二行：修改postgres的密码为postgres,不要忘记添加分号(回车后分号之前的sql语句才会立即执行)<br /> 第三行：退出psql客户端<strong><br /> [功能说明]</strong><br /> PostgreSQL数据默认会创建一个postgres的数据库用户作为数据库的管理员，密码是随机的，我人需要修改为指定的密码，这里设定为&#8217;postgres&#8217;。</p> <p><strong>第三步：修改linux系统的postgres用户的密码（密码与数据库用户postgres的密码相同）</strong></p> <p><strong>[代码内容]</strong><br /> root@ubuntuserver:~#&nbsp;sudo passwd -d postgres<br /> root@ubuntuserver:~#&nbsp;sudo -u postgres passwd<br /> <strong>[代码说明]</strong><br /> 第一行：删除密码<br /> 第二行：创建密码<br /> <strong>[功能说明]</strong><br /> PostgreSQL数据默认会创建一个linux用户postgres，通过上面的代码修改密码为&#8217;postgres&#8217;（这取决于第二步中的密码，只要与其相同即可）。</p> </div> <div>现在，我们就可以在数据库服务器上用 postgres帐号通过psql或者pgAdmin等等客户端操作数据库了（暂时还不能远程访问）。</div> <div><strong>第四步：修改PostgresSQL数据库配置实现远程访问</strong></div> <div> <p><strong>[代码内容]</strong><br /> root@ubuntuserver:~#&nbsp;sudo vi /etc/postgresql/8.4/main/postgresql.conf<br /> &#8212;&gt;改变行：#listen_addresses = &#8216;localhost&#8217;<br /> &#8212;&gt;修改为：listen_addresses = &#8216;*&#8217;<br /> &#8212;&gt;改变行：#password_encryption = on<br /> &#8212;&gt;修改为：password_encryption = on<br /> root@ubuntuserver:~#&nbsp;sudo vi /etc/postgresql/8.4/main/pg_hba.conf<strong><br /> </strong>&#8212;&gt;文件末添加行：# to allow your client visiting postgresql server<br /> <strong></strong>&#8212;&gt;文件末添加行：host all all 0.0.0.0 0.0.0.0 md5<strong><br /> </strong>root@ubuntuserver:~#&nbsp;sudo /etc/init.d/postgresql-8.4 restart<br /> <strong>[代码说明]</strong><br /> 第一行：修改postgresql.conf的目的是修改连接权限；<br /> 第二行：修改pg_hba.conf的目的是设置谁才可以操作数据服务器；<br /> 第三行：重启postgresql数据库的服务程序，以使上面的配置生效。<br /> 详细解释一下&#8221;host all all 0.0.0.0 0.0.0.0 md5<strong>&#8220;</strong>：<br /> host表示允许的类型是主机；<br /> 第一个all是允许的数据库名字；<br /> 第二个all是允许的用户；<br /> 第一个0.0.0.0是允许访问的ip address；<br /> 第二个0.0.0.0是允许访问的subnet mask；<br /> 最后的md5表示密码的加密方式，如果将md5改成trust则可以让指定范围的主机数据库的时候不需要提供密码。<br /> 关于ip address和subnet mask，你也可以修改为你的机器IP地址(如10.13.19.53)和子网掩码(如  255.255.255.255)，这样就只有你自己的主机可以远程访问数据库了。  如果要使用一个IP地址范围，只需要把子网掩码设置成合适的值，如果子网掩码设置成0.0.0.0，则所有主机均可以访问数据库（IP可以任意设定），如 果将md5改成trust则可以让指定范围的主机访问指定的数据库的时候不需要提供密码。<strong><br /> </strong><strong>[功能说明]</strong><br /> 实现远程访问</p> <p><strong>第五步：创建用户和数据库</strong></p> <p><strong>[代码内容]</strong><br /> root@ubuntuserver:~#&nbsp;psql -U postgres -h 127.0.0.1<br /> postgres=#&nbsp;create user &#8220;IamJiwan&#8221; with password &#8216;IamJiwan&#8217; nocreatedb;<br /> postgres=#&nbsp;create database &#8220;mydatabase&#8221; with owner=&#8221;IamJiwan&#8221;;<br /> <strong>[代码说明]</strong><br /> 第一行：运行psql客户端，并指定用户为postgres主机为127.0.0.1，执行此行后需要输入密码&#8217;postgres&#8217;，如不指定则默认用户为linux系统当前登录用户，默认数据库服务器为本机；<br /> 第二行：添加数据库用户&#8220;IamJiwan&#8220;；<br /> 第三行：添加数据库&#8220;mydatabase&#8221;并设定所有者为&#8221;IamJiwan&#8221;；<br /> 用户名和数据库名称加上引号后才区分大小写，否则会自动转换成小写；<br /> 双引号作用：创建对象的时候，对象名、字段名加双引号，则表示严格区分大小写，否则都默认小写；<br /> 单引号作用：标识字符与数字的区别，并不区分大小写。<br /> <strong>[功能说明]</strong><br /> 创建用户和数据库<br /> <strong>[备注内容]</strong><br /> postgres还提供了命令行创建用户和数据库的方法：<br /> root@ubuntuserver:~#&nbsp;sudo -u postgres createuser -D -P mynewuser<br /> root@ubuntuserver:~#&nbsp;sudo -u postgres createdb -O mynewuser mydatabase<br /> 第一行：-D该用户没有创建数据库的权利，-P提示输入密码，后面的选项都可以省略，命令执行的时候会提示用户选择yes或者no<br /> 第二行：-O设定所有者为mynewuser</p> <p><strong>第六步：如何</strong><strong>安装和使用</strong><strong>pgAdmin3客户端操作postgresql数据库</strong></p> <p><strong>[代码内容]</strong><br /> root@ubuntuserver:~#&nbsp;sudo apt-get install pgadmin3<br /> <strong>[功能说明]<br /> </strong>安装图形客户端pgAdmin3</p> </div></div><img src ="http://www.cppblog.com/colorful/aggbug/176256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2012-05-26 16:30 <a href="http://www.cppblog.com/colorful/archive/2012/05/26/176256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>postgresql源码安装</title><link>http://www.cppblog.com/colorful/archive/2012/05/26/176250.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 26 May 2012 07:13:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2012/05/26/176250.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/176250.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2012/05/26/176250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/176250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/176250.html</trackback:ping><description><![CDATA[<div><p><div>http://cuojuan.com/</div><div>http://cuojuan.com/review/26</div><br /></p><p><br /></p><p>使用的Linux发行版是ubuntu server 6.06，ubuntu  自带版本最高只有8.1，为了尝鲜，同时8.2.0已经对基于windows平台的兼容性进行了改进，便于平台的转换。同时源码安装可以自己制定一些参数 和设置，ubuntu虽然有很好的易用性和兼容性，并且部分特性也较新，但是同window有些相像，减少也封闭了很多细节问题，让开发人员没有机会也不 用尝试去理解一些程序的安装过程和参数，对于程序开发来说，并不一定是件好事。</p> <p>一 安装Postgresql8.2.0</p> <p>1. 下载源码。<br /> 到postgresq.org下载最新的源码。</p> <p>2 解压。<br /> tar -vxf postgresql*.tar.gz<br /> 3 配置，进入解压目录后可以用./configure &#8211;help来查看可用的参数。我使用的是：</p> <p># ./configure &#8211;prefix=/home/shaken/postgresql &#8211;without-readline &#8211;without-zlib</p> <p>前一个参数是把循照惯例把自己的软件安装到/opt目录下，后面两个参数是因为我的系统里没有安装readline和zlib，其实安装一下就可以了。</p> <p>在ubuntu中这样可以去掉后面的两个&#8211;without参数：<br /> # apt-get install libreadline5-dev zlib1g-dev<br /> 解决在ubuntu安装postgresql时，configure出现的问题。</p> <p>4 编译后并安装：</p> <p># make</p> <p># make install</p> <p>5 增加Postgresql数据库的最高用户postgres并设置密码：</p> <p># adduser postgres<br /> # mkdir /home/shaken/postgresql/data<br /> # chown postgres /home/shaken/postgresql/data</p> <p>最好再这样：<br /> # chown -R postgres /home/shaken/postgresql</p> <p>6 以用户postgres登陆：</p> <p># su &#8211; postgres</p> <p>7 初始化数据库：<br /> $ /home/shaken/postgresql/bin/initdb -D /home/shaken/postgresql/data</p> <p>8 运行数据库服务器：</p> <p>$ /home/shaken/postgresql/bin/postmaster -D /home/shaken/postgresql/data&gt;logfile 2&gt;&amp;1 &amp;</p> <p>9 创建一个数据库：</p> <p>$ /home/shaken/postgresql/bin/createdb test</p> <p>10 在本机上运行客户端进行管理：</p> <p>$ /home/shaken/postgresql/bin/psql test</p> <p>这就要求你对基础的sql语法要熟悉了。</p> <p>到这里Postgresql就算安装完成了。但是为了能远程使用该数据库&#8212;比如说我要在网络上另外一台Windows电脑上使用pgAdmin来管 理 使用该Postgresql服务器&#8212;则还需要进行一些修改，这些修改主要包括两方面的修改，一是修改Postgresql的两个配置文件，二是修改数  据库的一些用户权限：</p> <p>11 修改Postgresql的配置文件Postgresql.conf，该文件在数据目录/home/shaken/postgresql/data下，将其中的一句：</p> <p>listen_address=&#8217;localhost&#8217;</p> <p>前面的注释去掉，并把&#8217;localhost&#8217;该为&#8217;*&#8217;。</p> <p>12修改Postgresql的配置文件pg_hba.conf，该文件在数据目录/home/shaken/postgresql/data下，在文件后面加一句：</p> <p>host&nbsp;&nbsp; all all 192.168.0.0/24&nbsp;&nbsp; password</p> <p>这句的意思是：同网络中192.168.0.*的机器可以以密码的形式使用所有的数据库。更具体的参数意义直接看该配置文件中的注释就可以了。</p> <p>这里一定要配置正确，否则无法在远程连接postgresql数据库。</p> <p>13 重新启动postgresql服务器：</p> <p>$ /home/shaken/postgresql/bin/pg_ctl stop -D /home/shaken/postgresql/data</p> <p>停止原来的服务器</p> <p>$ $ /home/shaken/postgresql/bin/postmaster -i -D /home/shaken/postgresql/data &gt;logfile 2&gt;&amp;1 &amp;</p> <p>再次启动，加一个-I参数</p> <p>14 一些数据库用户权限的简单配置，以下是在psql中使用</p> <p># create userwen1 password &#8216;123456&#8217;;</p> <p>创建一个用户并设置密码</p> <p># createdatabase data1 owner wen1;</p> <p>创建一个数据库</p> <p># create tablewen11(name varcha(10))</p> <p>创建一个数据表</p> <p># alter table wen11 owner to wen1;</p> <p>修改数据表的属主。</p> <p>现在可以在局域网内的其他电脑使用其他postgresql客户端工具，以用户名wen1打开data1数据库了。</p> <p>还需要改进的一些问题：</p> <p>1 中文支持的问题：使用encoding=&#8217;UTF-8&#8217;创建数据库好不好？</p> <p>2 系统启动时自动启动postgresql的问题：完全可以参考Debian的相应启动脚本。</p> <p>二 phppgadmin的安装配置（可选的过程）</p> <p>为了管理配置我的数据库服务器，对于我这样的postgresql生手，需要一个方便的管理程序。这样的管理工具很多，考虑自己以前使用mysql 有一个 便利的phpmyadmin，我选择了phppgadmin。&nbsp;&nbsp;  phpPgAdmin是一个充分地功能基于互联网的postgresql管理实用程序。它处理所有基本的功能并且某个先进的功能譬如触发器,  视图等，是一个基于B/S模式的管理软件，必须安装在服务器端。</p> <p>具体的安装过程为：<br /> 1 下载源码，现在的最新版本为4.0.1<br /> # cd<br /> # wget&nbsp;<a href="http://......./phpPgAdmin-4.0.1.tar.gz" target="_blank">http://&#8230;&#8230;./phpPgAdmin-4.0.1.tar.gz</a><br /> 2 解压：<br /> # tar zxvf phpPgAdmin-4.0.1.tar.gz<br /> 3 检查系统是否已经安装好apache+php以及php对postgresql的支持，如果没有，以下为安装：<br /> # apt-get install apache php4 php4-pgsql<br /> 注意修改apache的配置文件以使apache支持php。<br /> 4 使phpPgAdmin在客户端可用，我一般是在apapche目录下建立符号连接：<br /> # ln -s /root/phpPgAdmin-4.0.1 /var/www/pgadmin<br /> 5 修改phpPgAdmin的配置文件 config/config.inc.php，其中必须要修改的参数有：<br /> $conf['servers'][0]['host']=&#8217;localhost&#8217;;<br /> 标明数据库服务器在本机<br /> $conf ['extra_security'] = false;<br /> 允许使用postgres帐号登陆。<br /> 6 在客户端使用浏览器，输入地址：<br /> <a href="http://....../pgadmin" target="_blank">http://&#8230;&#8230;/pgadmin</a><br /> 就可以进行postgresql数据库的管理了。</p> <p>三 安装postgis</p> <p>1 最好先安装proj4和OGR，我偷懒没有安装，应该只是性能上打折扣吧，并不影响安装使用。<br /> Debian下可以这样：安装postgis的时候，先：<br /> #apt-get install proj libgeos libgeos-dev</p> <p>2 下载源码。</p> <p>3 解压进入目录。</p> <p>4 配置：</p> <p># ./configure &#8211;prefix=/opt/postgis &#8211;with-pgsql=/home/shaken/postgresql/bin/pg_config</p> <p>意思很明显</p> <p>5 编译、安装：</p> <p># make</p> <p># make install</p> <p>6 之后的一些工作：</p> <p>$ /home/shaken/postgresql/bin/createdb data1</p> <p>$ /home/shaken/postgresql/bin/createlang plpgsql data1</p> <p>$ /home/shaken/postgresql/bin/psql-d data1 -f lwpostgis.sql</p> <p>$ /home/shaken/postgresql/bin/psql-d data1 -f spatial_ref_sys.sql</p> <p>注意找到并进入包含后面那两个sql文件的目录再进去执行。</p> <p>下面可以使用postgis了，先试试Postgis提供那两个转换shape文件和postgis数据的小程序吧。</p> <p>四 PostGIS的初步使用</p> <p>网络上关于PostGIS的使用的文章不多，而且说得不够详细，今天经过一番摸索，得到一些基本应用的经验，希望能减少一些大家入门的周折。</p> <p>以下假设我要把一个test.shp文件(实际上完整的应包含三个文件)的数据导入到Postgresql数据库data1中的test数据表，为 了安全 起见，数据库Data1及相关的数据表的属主都设置为wen1，然后在GIS客户端如QGIS  uDig等使用这个PostGIS数据。详细的过程为；</p> <p>1 假设PostGreSQL数据库服务器和PostGIS都安装好。（见另文&#8221;源码安装Postgresql8.1.3+PostGIS1.1.2&#8243;)<br /> 2 以数据库的超级用户postgres进入psql:<br /> # /home/shaken/postgresql/bin/psql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (注意路径)<br /> 以下的操作都是在psql控制台。<br /> 3 基本设置：<br /> # create user wen1 password &#8216;123456&#8217;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建一个用户并设置密码<br /> # create database data1 owner wen1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建一个数据库<br /> # alter table spatial_ref_sys owner to wen1;<br /> # alter table geometry_columns owner to wen1 ; 这两句修改两个postgis相关的表的属主为wen1，很重要，一般文章中似乎没提到这两点。<br /> 4 数据转换，以下工作退出psql，在shell界面进行。<br /> 先把三个test.shp文件复制到/opt/postgis/bin目录下并转到该目录下，注意路径，注意目录和文件的权限&#8212;也许退出postgres用户到root用户简单一些。<br /> # /opt/postgis/bin/shp2pgsql test test data1 &gt; test.sql<br /> # /home/shaken/postgresql/bin/psql -d data1 -f test.sql<br /> 注意参数都要写对，不明白的话一定要用&#8211;help参数查看。<br /> 5 在客户机器上打开QGIS，依次选择&#8221;图层&#8221;&#8211;&gt;&#8221;添加PostGIS图层&#8221;&#8211;&gt;&#8221;新建&#8221;,然后设置好正确的服务器IP，数据库名data1，用户wen1及密码，再点击&#8221;连接&#8221;，然后下方会出现test图层的名字，选择就可以了。<br /> uDig的使用也大同小异。</p> <p>一点体会：<br /> 1 要先弄懂PostgreSQL的使用，尤其是各种权限的概念和关系，这是一般从Windows下转移来的人很缺乏的。<br /> 2 最好选择一个好的PostgreSQL客户端工具来帮助调试，推荐使用PgAdmin。</p></div><img src ="http://www.cppblog.com/colorful/aggbug/176250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2012-05-26 15:13 <a href="http://www.cppblog.com/colorful/archive/2012/05/26/176250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>