<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "升級PostgreSQL 9.2 到PostgreSQL 9.3"]]></title>
		<link>https://forum.andowson.com/posts/list/12.page</link>
		<description><![CDATA[Latest messages posted in the topic "升級PostgreSQL 9.2 到PostgreSQL 9.3"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>升級PostgreSQL 9.2 到PostgreSQL 9.3</title>
				<description><![CDATA[ 升級PostgreSQL 9.2 到PostgreSQL 9.3 
<br>
<br>
本文是以CentOS 6.5 x86_64上面原安裝PostgreSQL 9.2作為說明，預設執行身分為root，如需切換為postgres，會以su - postgres開始 
<br>
<br>
1.備份舊的資料 
<br>
[code]su - postgres 
<br>
mkdir /tmp/pgsql 
<br>
pg_dumpall &gt; /tmp/pgsql/db.out 
<br>
cp -pr /var/lib/pgsql/9.2 /tmp/pgsql/ 
<br>
exit 
<br>
[/code] 
<br>
2.安裝新版的PostgreSQL 
<br>
2.1 安裝新版的PostgreSQL repository 
<br>
到[url]http://yum.postgresql.org/[/url] 先點要升級的版本，如9.3，然後找到目前使用的作業系統版本，例如CentOS 6 - x86_64 
<br>
[code]cd /root/setup/database 
<br>
wget http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm 
<br>
rpm -ivh ./pgdg-centos93-9.3-1.noarch.rpm 
<br>
[/code] 
<br>
2.2 安裝PostgreSQL新版的套件 
<br>
可以先找出之前安裝了那些套件: rpm -qa | grep postgresql92 
<br>
[code] 
<br>
[root@www database]# rpm -qa | grep postgresql92 
<br>
postgresql92-libs-9.2.9-1PGDG.rhel6.x86_64 
<br>
postgresql92-9.2.9-1PGDG.rhel6.x86_64 
<br>
postgresql92-server-9.2.9-1PGDG.rhel6.x86_64 
<br>
[/code] 
<br>
安裝新版的套件(必須安裝postgresql93-contrib套件才會有pg_upgrade) 
<br>
[code] 
<br>
yum install postgresql93-server postgresql93-libs postgresql93 postgresql93-contrib 
<br>
[/code] 
<br>
3.升級前置動作 
<br>
3.1修改新版PostgreSQL啟動檔的Port 
<br>
因為舊版的還在run，新版PostgreSQL預設的啟動port先改為5433 
<br>
編輯/etc/init.d/postgresql-9.3檔案，將 
<br>
[code]PGPORT=5432[/code] 
<br>
改為 
<br>
[code]PGPORT=5433[/code] 
<br>
<br>
3.2初始化新版PostgreSQL資料庫 
<br>
[code]/etc/init.d/postgresql-9.3 initdb[/code] 
<br>
<br>
3.3檢查是否成功建立資料庫所需目錄 
<br>
[code]ls /var/lib/pgsql/9.3/ 
<br>
cat /var/lib/pgsql/9.3/pgstartup.log[/code] 
<br>
<br>
3.4停止網頁服務 
<br>
[code]service tomcat stop[/code] 
<br>
注意/etc/crontab中有無設定定期檢查Tomcat是否有在跑的tomcat_monitor，有的話先註解掉該排程作業，以免系統又自己將Tomcat服務帶起來 
<br>
<br>
4.開始升級資料庫 
<br>
4.1 關閉資料庫 
<br>
[code]service postgresql-9.2 stop[/code] 
<br>
<br>
4.2 執行pg_upgrade 
<br>
切換身分為postgres(再多備份一次檔案系統) 
<br>
[code]su - postgres 
<br>
cp -pr /var/lib/pgsql/9.2 /tmp/pgsql/[/code] 
<br>
<br>
執行pg_upgrade(注意要使用新版的PostgreSQL目錄下的pg_upgrade) 
<br>
[code]/usr/pgsql-9.3/bin/pg_upgrade -v -b /usr/pgsql-9.2/bin/ -B /usr/pgsql-9.3/bin/ -d /var/lib/pgsql/9.2/data/ -D /var/lib/pgsql/9.3/data/[/code] 
<br>
最後看到下面這些畫面就完成了 
<br>
[code] 
<br>
Creating script to analyze new cluster ok 
<br>
Creating script to delete old cluster ok 
<br>
<br>
Upgrade Complete 
<br>
---------------- 
<br>
Optimizer statistics are not transferred by pg_upgrade so, 
<br>
once you start the new server, consider running: 
<br>
 analyze_new_cluster.sh 
<br>
<br>
Running this script will delete the old cluster's data files: 
<br>
 delete_old_cluster.sh 
<br>
-bash-4.1$ 
<br>
[/code] 
<br>
4.3 調整設定檔: pg_hba.conf, postgresql.conf 
<br>
pg_hba.conf通常可以直接複製過去就好: 
<br>
[code] 
<br>
diff /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.3/data/pg_hba.conf 
<br>
cp -p /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.3/data/pg_hba.conf 
<br>
[/code] 
<br>
postgresql.conf可能新版會有新增一些參數，我們用diff比較一下差異，再把舊版修改的地方依據需要反映到新的版本去 
<br>
[code] 
<br>
diff /var/lib/pgsql/9.2/data/postgresql.conf /var/lib/pgsql/9.3/data/postgresql.conf[/code] 
<br>
例如，我修改了: 
<br>
effective_cache_size = 256MB 
<br>
<br>
4.4 修改/etc/init.d/postgresql-9.3 
<br>
退出postgres 
<br>
[code]exit[/code] 
<br>
將 
<br>
[code]PGPORT=5433[/code] 
<br>
改回 
<br>
[code]PGPORT=5432[/code] 
<br>
<br>
5.啟動新版的PostgreSQL服務 
<br>
[code]service postgresql-9.3 start[/code] 
<br>
<br>
6.升級後的優化作業 
<br>
[code]su - postgres 
<br>
./analyze_new_cluster.sh[/code] 
<br>
[code] 
<br>
-bash-4.1$ ./analyze_new_cluster.sh 
<br>
This script will generate minimal optimizer statistics rapidly 
<br>
so your system is usable, and then gather statistics twice more 
<br>
with increasing accuracy. When it is done, your system will 
<br>
have the default level of optimizer statistics. 
<br>
<br>
If you have used ALTER TABLE to modify the statistics target for 
<br>
any tables, you might want to remove them and restore them after 
<br>
running this script because they will delay fast statistics generation. 
<br>
<br>
If you would like default statistics as quickly as possible, cancel 
<br>
this script and run: 
<br>
 "/usr/pgsql-9.3/bin/vacuumdb" --all --analyze-only 
<br>
<br>
Generating minimal optimizer statistics (1 target) 
<br>
-------------------------------------------------- 
<br>
vacuumdb: vacuuming database "jforum" 
<br>
vacuumdb: vacuuming database "postgres" 
<br>
vacuumdb: vacuuming database "template1" 
<br>
<br>
The server is now available with minimal optimizer statistics. 
<br>
Query performance will be optimal once this script completes. 
<br>
<br>
Generating medium optimizer statistics (3 targets) 
<br>
--------------------------------------------------- 
<br>
vacuumdb: vacuuming database "jforum" 
<br>
vacuumdb: vacuuming database "postgres" 
<br>
vacuumdb: vacuuming database "template1" 
<br>
<br>
<br>
Generating default (full) optimizer statistics (100 targets?) 
<br>
------------------------------------------------------------- 
<br>
vacuumdb: vacuuming database "jforum" 
<br>
vacuumdb: vacuuming database "postgres" 
<br>
vacuumdb: vacuuming database "template1" 
<br>
<br>
<br>
Done 
<br>
-bash-4.1$ 
<br>
[/code] 
<br>
7.啟動網頁服務 
<br>
[code]service tomcat start[/code] 
<br>
7.1 測試網頁服務是否正常 
<br>
<br>
8. 升級後的清理作業 
<br>
8.1 刪除舊的資料庫存放區 
<br>
[code]su - postgres 
<br>
./delete_old_cluster.sh 
<br>
[/code] 
<br>
8.2 移除舊版的PostgreSQL套件 
<br>
[code]yum remove postgresql92-server postgresql92-libs postgresql92 pgdg-centos92[/code] 
<br>
<br>
8.3 刪除/tmp/pgsql目錄下的備份檔 
<br>
[code]rm -rf /tmp/pgsql[/code] 
<br>
<br>
[選擇性作業]8.4 重新啟用排程/etc/crontab中的tomcat_monitor 
<br>
<br>
至此就完成了PostgreSQL 9.3的升版作業。 
<br>
<br>
參考資料: 
<br>
[url]http://www.uptimemadeeasy.com/databases/upgrade-postgresql/[/url] 
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/628/1317.page</guid>
				<link>https://forum.andowson.com/posts/preList/628/1317.page</link>
				<pubDate><![CDATA[Sat, 23 Aug 2014 16:51:15]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
	</channel>
</rss>