從零開始,構建電子地圖網站:0_19_linux下pg庫postgis配置和數據導入導出

 

一、安裝

 

安裝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 工程部署到雲主機了。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章