一、PostgreSQL rpm離線安裝
1. 安裝環境
RedHat 6.9/ 64位
2. 準備工作
下載RPM包
訪問PostgreSQL網站,根據系統類別,系統版本選擇相關的包:(這裏針對Redhat6的鏈接,如果需要下載Redhat7的,那就修改鏈接中rhel6.x86_64爲rhel7.x86_64),點擊以下下載鏈接:
https://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/postgresql96-9.6.10-1PGDG.rhel6.x86_64.rpm
https://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/postgresql96-contrib-9.6.10-1PGDG.rhel6.x86_64.rpm
https://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/postgresql96-libs-9.6.10-1PGDG.rhel6.x86_64.rpm
https://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/postgresql96-server-9.6.10-1PGDG.rhel6.x86_64.rpm
https://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/postgresql96-devel-9.6.10-1PGDG.rhel6.x86_64.rpm
下載的文件:
postgresql96-9.6.10-1PGDG.rhel6.x86_64.rpm
postgresql96-contrib-9.6.10-1PGDG.rhel6.x86_64.rpm
postgresql96-libs-9.6.10-1PGDG.rhel6.x86_64.rpm
postgresql96-server-9.6.10-1PGDG.rhel6.x86_64.rpm
postgresql96-devel-9.6.10-1PGDG.rhel6.x86_64.rpm(我在安裝postgis的時候提示錯誤:Please install the PostgreSQL server development packages and re-run configure,之後才下載的安裝包安裝)
3. 安裝PG
將上述Postgres安裝包放置在同一個文件夾中, 執行安裝命令:
rpm -ivh postgresql96-*.rpm
通過RPM包安裝, Postgres安裝程序會在/var和/usr下創建文件夾./var/lib/pgsql
: 用於存放Postgres數據庫默認的數據文件夾/usr/pgsql-9.6
: 用於存放Postgres數據庫的命令、依賴庫及文檔目錄等信息/var/lib/pgsql/9.6/data
: 用戶存放PG默認配置的pg_hba.conf,postgresql.conf
配置文件。
安裝完成查看pg版本:
postgres --version
4. 初始化數據庫
配置好數據後(如果配置了自定義路徑)數據庫默認是未啓動狀態。 需要進行初始化。
CentOS 6/Redhat 6
service postgresql-9.6 initdb
初始化數據庫後,會默認在系統的目錄裏面初始化PG數據庫
如果自定義了目錄,會在/data/postgres裏面初始化文件,並生成pg_hba.conf,postgresql.conf
默認情況:
/var/lib/pgsql: 用於存放Postgres數據庫默認的數據文件夾
/usr/pgsql-9.6: 用於存放Postgres數據庫的命令、依賴庫及文檔目錄等信息
數據庫只能本機訪問,127.0.0.1 默認沒有密碼
/var/lib/pgsql/9.6/data : 用戶存放PG默認配置的pg_hba.conf,postgresql.conf
配置文件
5. 配置數據庫遠程訪問
PG默認只能本機訪問,但是實際情況中,應用服務器多單獨部署,需要開通PG的遠程訪問權限,且是需要配置用戶密碼的。
需要修改postgres.conf, pg_hba.conf文件。
如果找不到文件在哪,使用 find命令搜索:
find / -name postgresql.conf
5.1 修改postgresql.conf
主要配置參數詳解:
#listen_addresses='localhost'
listen_addresses='*' --- 修改成'*'全部ip都可以訪問改數據庫。
5.2 修改pg_hba.conf
vi pg_hba.conf
找到如下內容:
·"local" is for Unix domain socket connections only
local all all trust
IPv4 local connections:
host all all 127.0.0.1/32 trust
在“host all all 127.0.0.1/32 trust”其後添加下面的內容
host all all 0.0.0.0/0 md5 #-- 添加本行
6. 啓動數據庫
啓動Postgres數據庫
service postgresql-9.6 start
#Starting postgresql-9.6 service: [ OK ]
7. 測試數據庫
PG模式是不能用root用戶訪問數據庫,使用時需要用su postgres
切換到postgres用戶下。
使用psql命令進行測試。
psql命令詳解:
-h host, 指定連接的Postgres數據庫IP地址
-U username: 指定連接數據庫的用戶名
-d database: 指定連接的數據庫名
-p port: 指定數據庫連接的服務端口
-w: 表示不提示用戶輸入密碼
-W : 表示驗證數據庫用戶密碼
-l : 表示列出Postgres可用的數據庫信息
示例如下:
su - postgres # -- root 切換到postgres
psql -h localhost -U postgres -d postgres -W
#Password for user postgres:
#psql (9.6.10)
#Type "help" for help.
#
使用默認腳本service postgresql initdb或/usr/pgsql-9.6/bin/postgresql96-setup initdb初始化數據庫時,需要修改用戶的密碼。在修改Postgres用戶密碼時,需要確保以下條件:
配置"pg_hba.conf"時需要確定服務器本地址的驗證方法爲trust, 即:
host all all 127.0.0.1/32 trust
如果爲peer|indent|md5方法時,需要將其修改爲trust, 否則登錄時會提醒輸入用戶密碼。
修改默認的postgres用戶密碼
切換系統用戶爲postgres, 通過psql -h localhost -U postgres -d postgres登錄Postgres數據庫,進入數據後,使用SQL
alter user postgres with password 'newpassword'
來爲用戶修改默認密碼。
示例如下:
su - postgres # -- root 切換到postgres
psql -h localhost -U postgres -d postgres -w
postgres=# alter user postgres with password 'newpassword';
#ALTER ROLE
8. PG開機自啓動
postges默認不自動啓動,使用以下命令打開。
chkconfig postgresql-9.6 on
9. Postgres日常服務管理
啓動數據庫:pg_ctl start -D /data/postgres
重啓數據庫: pg_ctl restart -D /data/postgres
停止數據庫:pg_ctl stop -D /data/postgres
強制重啓:pg_ctl restart -D /data/postgres -m f
強制停止:pg_ctl stop -D /data/postgres -m f
加載配置:pg_ctl reload -D /data/postgres
顯示服務狀態:pg_ctl status -D /data/postgres
連接數據庫: psql -h 127.0.0.1 -U postgres -p 5432 -d postgres -W
二、Postgis離線安裝
1 準備源碼包
準備gdal、proj、geos和postgis的源碼包,postgis版本注意和postgresql保持兼容。
Pg和Postgis的版本需要兼容,具體信息請看:http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS
安裝包可以使用以下鏈接進行下載:
http://download.osgeo.org/gdal/2.2.3/gdal-2.2.3.tar.gz
http://download.osgeo.org/proj/proj-4.8.0.tar.gz
http://download.osgeo.org/geos/geos-3.3.3.tar.bz2
http://download.osgeo.org/postgis/source/postgis-2.2.6.tar.gz
將下載的文件拷貝到服務器,所需文件如下:
gdal-2.2.3.tar.gz
proj-4.8.0.tar.gz
geos-3.3.3.tar.bz2
postgis-2.2.6.tar.gz
2 解壓編譯安裝gdal、proj、geos和postgis
依次解壓、編譯、安裝以上軟件包。
$ tar xf gdal-2.2.3.tar.gz && cd gdal-2.2.3 && ./configure --prefix=/usr/local/gdal && make && sudo make install
$ tar xf proj-4.8.0.tar.gz && cd proj-4.8.0 && ./configure --prefix=/usr/local/proj && make && sudo make install
$ tar xf geos-3.3.3.tar.bz2 && cd geos-3.3.3 && ./configure --prefix=/usr/local/geos && make && sudo make install
$ tar xf postgis-2.2.6.tar.gz && cd postgis-2.2.6 && ./configure -prefix=/usr/local/postgis --with-geosconfig=/usr/local/geos/bin/geos-config --with-projdir=/usr/local/proj --with-gdalconfig=/usr/local/gdal/bin/gdal-config && make && sudo make install
3 配置ldconfig
將gdal、proj、geos的lib目錄添加到ldconfig。
#vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
#添加以下內容
/usr/local/gdal/lib/
/usr/local/proj/lib/
/usr/local/geos/lib/
執行 ldconfig命令即可。
4 創建空間數據庫模板
# 創建無空間特性數據庫
postgres $ createdb txhglgj
# 創建相關空間數據庫相關的函數,類型,操作符等
postgres $ psql -f /usr/pgsql-9.6/share/contrib/postgis-2.2/postgis.sql -d txhglgj
postgres $ psql -f /usr/pgsql-9.6/share/contrib/postgis-2.2/rtpostgis.sql -d txhglgj
# 驗證空間數據庫版本
postgres $ psql txhglgj
psql (9.6.10)
輸入 "help" 來獲取幫助信息.
txhglgj=# select postgis_full_version();
postgis_full_version
---------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="2.2.6 r16006" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 2.2.3, released 2017/11/20" LIBXML="2.9.1" RASTER
(1 行記錄)
txhglgj=# \d
關聯列表
架構模式 | 名稱 | 型別 | 擁有者
----------+-------------------+--------+----------
public | geography_columns | 視觀表 | postgres
public | geometry_columns | 視觀表 | postgres
public | raster_columns | 視觀表 | postgres
public | raster_overviews | 視觀表 | postgres
public | spatial_ref_sys | 資料表 | postgres
(5 行記錄)
5. 簡單測試
測試點(0, 0)是否在指定的多邊形內。
new_database=# select ST_Within(ST_GeomFromText('POINT(0 0)', 4326), ST_GeomFromText('POLYGON((1 1, 1 -1, -1 -1, -1 1, 1 1))', 4326)) ;
st_within
-----------
t
(1 行記錄)
內容參考於:
https://www.jianshu.com/p/816141e62830
https://www.cnblogs.com/fanzhidongyzby/p/8279891.html