最近來了一批數(shù)據(jù),其中有一部分是一個從postgresql導(dǎo)出的sql文件,大概有7個多G,需要把數(shù)據(jù)整合到Mysql里邊做進(jìn)一步處理,網(wǎng)上搜了一些方式好多是要修改這個sql文件(因為從postgresql里直接dump出來的sql文件直接懟到mysql是不能識別的,不能直接導(dǎo)入),修改后在把postgresql的文件直接入mysql,貌似對那種表結(jié)構(gòu)和數(shù)據(jù)分別導(dǎo)出的還可以,手頭這個文件情況是表結(jié)構(gòu)和數(shù)據(jù)在一個sql文件里,里邊還有一些copy等的關(guān)鍵字,無奈只好自己安裝一個postgresql庫,先導(dǎo)入到postgresql庫里邊再同步到mysql里,寫代碼好幾年了,這還是第一次接觸postgresql,所以這里把過程記錄一下
安裝
-
配置yum庫
vi /etc/yum.repos.d/CentOS-Base.repo[base] 和[updates] 區(qū)段添加:exclude=postgresql*
-
卸載舊版本postgresqsl
yum remove postgresql* -
安裝PGDG RPM文件
打開網(wǎng)頁http://yum.postgresql.org找到自己需要的rpm,比如我是Centos 6.5系統(tǒng),要安裝Postgresql 9.3:
image.png
右鍵復(fù)制上邊這個鏈接,執(zhí)行如下命令:yum localinstall https://download.postgresql.org/pub/repos/yum/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-3.noarch.rpm當(dāng)然也可以通過wget下載rpm
wget https://download.postgresql.org/pub/repos/yum/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-3.noarch.rpm然后
rpm -ivh pgdg-centos93-9.3-3.noarch.rpm -
安裝postgresql
可以通過命令列出可用的安裝包:yum list postgres*這里我要安裝的是PostgreSQL 9.3 server(你可以根據(jù)自己的需求安裝其他包),執(zhí)行如下命令:
yum install postgresql93-server -
初始化
執(zhí)行如下命令,進(jìn)行初始化,執(zhí)行完成后會在/var/lib/pgsql/9.3/data目錄下生成數(shù)據(jù)文件夾,包含了數(shù)據(jù)庫所需的數(shù)據(jù)文件,變量PGDATA指的就是這個目錄service postgresql-9.3 initdb如果提示-bash: service: command not found,則需要設(shè)置環(huán)境變量
vim .bash_profile然后添加export PATH=$PATH:/sbin -
設(shè)置開機(jī)自啟動
chkconfig postgresql-9.3 on啟動:
service postgresql-9.3 start #/start/stop/restart/reload 或者 /etc/init.d/postgresql-9.3 start -
修改密碼
修改linux系統(tǒng)用戶postgres的密碼,PostgreSQL 數(shù)據(jù)庫默認(rèn)會創(chuàng)建一個linux 系統(tǒng)用戶postgres,通過passwd 命令可設(shè)置系統(tǒng)用戶的密碼,直接在控制臺輸入以下命令:su postgres psql ALTER USER postgres WITH PASSWORD 'postgresql'; \q su root這樣就把postgres的密碼改為postgresql了。
-
修改PostgreSQL數(shù)據(jù)庫配置實現(xiàn)可遠(yuǎn)程訪問
- 修改postgresql.conf文件,vim /var/lib/pgsql/9.3/data/postgresql.conf
將listen_addresses前的#去掉,并將 listen_addresses = 'localhost' 改成 listen_addresses = '*'; - 修改客戶端認(rèn)證配置文件pg_hba.conf,將需要遠(yuǎn)程訪問數(shù)據(jù)庫的IP地址或地址段加入該文件,vi /var/lib/pgsql/9.3/data/pg_hba.conf,將IPv4區(qū)下的127.0.0.1/32修改為0.0.0.0/0; 將ident修改為md5
- 重啟服務(wù)使設(shè)置生效 service postgresql-9.3 restart
- 修改postgresql.conf文件,vim /var/lib/pgsql/9.3/data/postgresql.conf
-
設(shè)置防火墻,開發(fā)5432端口(這個根據(jù)centos版本不同,略有差異)
1.開啟5432端口iptables -A INPUT -p tcp --dport 5432 -j ACCEPT- 保存并重啟防火墻
/etc/rc.d/init.d/iptables save /etc/init.d/iptables restart至此,安裝完成,使用navicat登錄用戶名postgres,密碼postgresqsl,如下圖:
image.png
使用
這里基本使用就不介紹了,我自己的需求很簡單,就是把7G的sql導(dǎo)入進(jìn)去,后邊再同步到mysql,使用如下命令:
psql -d postgres -h 192.168.40.11 -p 5432 -U postgres -f /data/data_dump.sql
問題就來了,報錯信息如下:

很明顯,磁盤空間不足,使用df -h查看磁盤剩余空間如下:

可以看到,根目錄下可用空間只剩4.6G,這里要說明一下,postgresql默認(rèn)安裝目錄是/usr/pgsql-9.3,默認(rèn)數(shù)存放目錄是/var/lib/pgsql/9.3/data,而/var正是在根目錄下,所以需要更改數(shù)據(jù)目錄,如果是曾經(jīng)導(dǎo)入過數(shù)據(jù),需要先做數(shù)據(jù)遷移并更改數(shù)據(jù)存放目錄,從上圖可以看出系統(tǒng)/data目錄磁盤空間比較大,所以這里我把數(shù)據(jù)放在/data目錄下。
這里方法有兩種,
一:重新初始化postgresql數(shù)據(jù)庫,初始化時指定新的數(shù)據(jù)路徑---PGDATA,指定的位置是在/etc/init.d/postgresql-9.3里的PGDATA,然后在新的環(huán)境下將原有的數(shù)據(jù)庫備份恢復(fù)一下。感覺這種方式更適合我的情況,因為我的庫里邊沒有數(shù)據(jù),直接初始化就行,比較簡單,但是如果你庫里有數(shù)據(jù)就有點麻煩了。
二:直接將現(xiàn)有的數(shù)據(jù)庫文件全部拷貝到新的數(shù)據(jù)庫路徑下,然后重起數(shù)據(jù)庫服務(wù),這種更適合于庫里邊已有數(shù)據(jù)的情況,考慮到后邊可能會遇到庫里已有數(shù)據(jù)且磁盤空間已滿的情況,所以我使用了這種方式。
- 新建一個目錄作為新的數(shù)據(jù)存放目錄,這里我是/data/postgresqldatadir
mkdir /data/postgresqldatadir sudo chown -R postgres:postgres /data/postgresqldatadir sudo chmod 700 /data/postgresqldatadir //這個授權(quán)命令別忘了,不然后邊啟動有問題 - 拷貝之前的data到新的數(shù)據(jù)目錄
這里需要先停止postgresql服務(wù):/etc/init.d/postgresql-9.5 stop
sudo su - postgres
cp -rf /var/lib/pgsql/9.3/data/* /data/postgresqldatadir -
修改啟動配置文件
vim /etc/init.d/postgresql-9.3
修改其中的PGDATA為新創(chuàng)建的數(shù)據(jù)目錄
image.png - 啟動postgresql服務(wù)
啟動完成后,可以先使用navicat測試一下連接,沒有問題/etc/init.d/postgresql-9.3 start - 數(shù)據(jù)導(dǎo)入,執(zhí)行如下導(dǎo)入命令:
耐心等待,有7G多,直至導(dǎo)入完成:psql -d postgres -h 192.168.40.11 -p 5432 -U postgres -f /data/data_dump.sql



