一、安裝
安裝postgresql:
yum install postgresql
yum install postgresql-server
yum install postgresql-devel
yum install postgis
提示is this ok的時候,輸入y。
安裝完,查看一下postgresql安裝版本和安裝位置:
查看版本信息等:rpm -qi postgresql
查看安裝位置:rpm -ql postgresql
二、卸載
運行:yum list postgresql,發現騰訊雲鏡像pg版本是9.2.24,之前寫程序的時候,版本是10。沒關係,卸了再裝一下。
卸載postgresql
yum remove postgresql
yum remove postgresql-server
yum remove postgresql-devel
yum remove postgis
出現Is this OK,敲y。
三、安裝postgresql10
因爲騰訊雲鏡像pg版本是9,所以我們要安裝10,就要更新一下數據源。
運行:yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm -y
運行:yum list | grep postgresql,發現有10版本的pg了。
運行:yum install postgresql10-contrib postgresql10-server -y,安裝一下。
在home目錄下,新建一個文件夾postgresql_data;
把默認的postgresql的數據庫移動到這個文件夾中;
設置這個文件夾的讀寫權限。
mkdir /home/postgresql_data
chown postgres:postgres /home/postgresql_data
chmod 750 /home/postgresql_data
配置環境變量:
export PATH=/usr/pgsql-10/bin:$PATH
export LD_LIBRARY_PATH=/usr/pgsql-10/lib
export PGDATA=/home/postgresql_data
修改文件/usr/lib/systemd/system/postgresql-10.service:
把數據庫目錄改到/home/postgresql_data下,這個可以用vim語句來改(i是插入,esc——:wq是保存修改並退出,),也可以用xftp將文件傳輸到本地,用寫字板打開,修改好了,再傳回到雲主機中。
修改內容如下:
#Location of database directory
Environment=PGDATA=/home/postgresql_data
四、數據庫初始化
進入用戶:su postgres
初始化數據庫:initdb
退出:exit
返回root模式下,設置pg庫開機啓動,並查看狀態。
systemctl enable postgresql-10.service
service postgresql-10 start
service postgresql-10 status
有綠色的active(running)就說明成功了。
運行:passwd postgres,將用戶密碼和數據庫密碼改爲一致。
先輸入一遍新的密碼,再輸入一遍確認。
在sql模式下,修改用戶密碼:
su postgres
psql
ALTER USER postgres WITH PASSWORD '密碼';
退出:
\q
eixt
五、安裝postgis
Postgis本來想安裝2.5版本的,但是不成功,所以安裝一下2.4版本的。
yum -y install epel-release
yum install postgis24_10 postgis24_10-client
yum install ogr_fdw10 -y
yum install pgrouting_10 -y
六、創建空間數據庫
su postgres
psql
創建數據庫:CREATE DATABASE gismap;
進入數據庫: /c gismap;
空間擴展:
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION ogr_fdw;
查看結果:SELECT postgis_full_version();
出現下面這些內容,說明空間拓展成功了。
POSTGIS="2.4.8 r17696" PGSQL="100" GEOS="3.7.1-CAPI-1.11.1 27a5e771" PROJ="Rel. 4.9.3, 1
5 August 2016" GDAL="GDAL 2.3.2, released 2018/09/21" LIBXML="2.9.1" LIBJSON="0.11" LIBPR
OTOBUF="1.0.2" TOPOLOGY RASTER
(1 row)
退出:\q
exit
數據庫操作,就可以用sql語句來實現了。
不過我們現在要做的是將本地電腦數據庫中的數據導入到雲主機的pg庫中。
用python是可以實現的,不過我們這裏用pg的工具來實現。
七、pg_dump轉儲和還原數據
管理員權限打開cmd。切換到pg_dump目錄下。
cd C:\PostgreSQL\10\bin
運行:pg_dump -U postgres -d postgres -f dump.sql
-U後面是用戶名
-d後面是數據庫名
-f是轉儲數據庫的文件名
完成之後,dump.sql就在C:\PostgreSQL\10\bin文件夾下。
把dump.sql傳到雲主機上,就放在\home下。
在Tencent Cloud webshell頁面,cd /home
運行:psql -d gismap -U postgres -f dump.sql
gismap是之前新建的數據庫。
完成之後,查看一下是否導入成功。
su postgres
psql
\c gismap
select * from v6_time_cnty_pts_utf_wgs84 limit 1;
能查出結果,就說明成功了。
一些有用的sql語句:
查當前數據庫的用戶名:SELECT current_user;
查當前數據庫名:SELECT current_database();
查版本:SELECT version();
退出當前用戶:\q
退出psql:exit
八、設置數據庫IP連接
運行一下查數據ip和端口號的語句:
SELECT inet_server_addr(), inet_server_port();
運行完這句,發現結果是:
postgres=# SELECT inet_server_addr(), inet_server_port();
inet_server_addr | inet_server_port
------------------+------------------
|
(1 row)
既沒有ip,也沒有端口號,說明數據庫連接是UDP,還不支持IP訪問。
我們可以再看一下自己電腦上的結果,打開cmd,切換到psql所在的目錄下,
cd C:\PostgreSQL\10\bin
psql -U postgres
輸入數據庫密碼。
運行:SELECT inet_server_addr(), inet_server_port();
結果長這樣,是能查到ip和端口的。
postgres=# SELECT inet_server_addr(), inet_server_port();
inet_server_addr | inet_server_port
------------------+------------------
::1 | 5432
(1 行記錄)
因爲在程序中,我們是通過ip連接數據庫的,所以現在要做的是,設置數據庫的ip連接。
要修改/home/postgresql_data路徑下的兩個文件,postgresql.conf和pg_hba.conf,可以通過vim命令修改,也可以用xftp工具將文件導出到電腦上,用寫字板修改後,再傳回去。
postgresql.conf修改內容如下:
將這段:
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
#port = 5432 # (change requires restart)
修改爲:
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
pg_hba.conf修改內容如下:
將這段:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
修改爲:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication all md5
#host replication all 127.0.0.1/32 md5
#host replication all ::1/128 md5
host all all 0.0.0.0/0 md5
可以與本地的postgresql的這兩個文件對比一下。
修改好了之後,重啓下服務:systemctl restart postgresql-10
通過navicat通過實例的公網ip連接一下數據庫,能連上,說明ip設置好了。
接下來該做的就是把Java web 工程部署到雲主機了。