您好,登錄后才能下訂單哦!
PostgreSQL 和 PostGIS 已經是熱門的開源工程,已經收錄在各大 Linux 發行版的 yum 或 apt 包中。Ubuntu 為例,安裝以下包即可:
$ sudo apt-get install postgresql-client postgresql postgis -y
RedHat 系列則請安裝:
$ sudo yum install postgresql-server postgresql postgis
初次安裝后,默認生成一個名為 postgres 的數據庫和一個名為 postgres 的數據庫用戶。這里需要注意的是,同時還生成了一個名為 postgres 的 Linux 系統用戶。我們以后在操作 PostgreSQL 的時候都應該在這個新創建的 postgres 用戶中進行。
如果是從源碼安裝
不建議從源碼安裝,我曾經試過從源碼安裝,實在是太麻煩了,而且各種 make install 容易出錯。最后我還是用 rpm 安裝了。不過既然花了些時間研究并且我成功安裝過,所以還是記錄一下吧——不過,可能有錯漏,所以讀者如果要從源碼安裝的話,請做好回滾的準備。
如果使用的是通過 source 編譯并且 make install 安裝,那么這一節是需要額外配置的。
貌似 CentOS 系列的安裝也需要……
默認的 make install 之后,PostgreSQL 安裝目錄在:/usr/local/pgsql/
首先根據這個鏈接的參考,需要配置環境變量
$ set $PGDATA = "/usr/local/pgsql/database"
但是執行了 pg_ctl start 之后,會出現錯誤:
pg_ctl: directory "/usr/local/pgsql/database" is not a database cluster directory
這樣的話,就需要參照 PostGreSQL 官方文檔的步驟創建真正的 database:<br/>
PostgreSQL: Documentation: 9.1: Creating a Database Cluster
首先創建一個用戶賬戶,名叫 postgres
$ usradd postgres $ sudo chown postgres /usr/local/pgsql/database
然后進入這個賬戶,創建 database
$ sudo su postgres $ initdb -D /usr/local/pgsql/database/
此時 shell 會輸出:
The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "C". The default database encoding has accordingly been set to "SQL_ASCII". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /usr/local/pgsql/database ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting dynamic shared memory implementation ... posix creating configuration files ... ok creating template1 database in /usr/local/pgsql/database/base/1 ... ok initializing pg_authid ... ok initializing dependencies ... ok creating system views ... ok loading system objects' descriptions ... ok creating collations ... ok creating conversions ... ok creating dictionaries ... ok setting privileges on built-in objects ... ok creating information schema ... ok loading PL/pgSQL server-side language ... ok vacuuming database template1 ... ok copying template1 to template0 ... ok copying template1 to postgres ... ok syncing data to disk ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. Success. You can now start the database server using: pg_ctl -D /usr/local/pgsql/database/ -l logfile start
恭喜你,接下來就可以啟動 PostgreSQL 了:
pg_ctl -D /usr/local/pgsql/database/ -l /usr/local/pgsql/database/psql.log start
進入 postgres 賬戶,并且進入 PostgreSQL 控制臺:
$ sudo su postgres $ psql
這時相當于系統用戶 postgres 以同名數據庫用戶的身份,登錄數據庫,否則我們每次執行 psql 的時候都要在參數中指定用戶,容易忘。
在 psql 中設置一下密碼——需要注意的是,這里設置的密碼并不是 postgres 系統帳戶的密碼,而是在數據庫中的用戶密碼:
postgres=# \password postgres
然后按照提示輸入密碼就好。
從源碼安裝 PostGIS
如果選擇了從源碼安裝 PostgreSQL 的話,那么首先需要判斷你安裝的 PostgreSQL 是什么版本
然后,再到 PostGIS 的網頁上去查其對應的是 PostGIS 的哪個版本。
最后,按照 PostGIS 的版本去下載對應的 source
最后的導入很麻煩,筆者就是卡在這一步,所以才最終放棄從源碼安裝的……
導入 PostGIS 擴展
根據 postgresql 和 postgis 的版本不同,路徑會有些差異,主要是路徑中包含版本信息:
$ sudo su postgres $ createdb template_postgis $ createlang plpgsql template_postgis $ psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis.sql $ psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/spatial_ref_sys.sql
上面的操作中,創建了一個叫做 “template_postgis” 的空數據庫。這個數據庫是空的,并且屬于 postgres 用戶。注意,不要往這個數據庫中添加數據,這個數據庫之所以稱為 “模板”(template),就說明它是用來派生用的。
相應的 PostGIS 路徑可能不同,如果失敗,就在上面的路徑附近多嘗試一下,找幾個 .sql 文件試試看。
轉換 .shp 文件到 PostGIS 數據庫中
轉換 .shp 到 .sql 文件
首先找到需要轉換的文件,假設需要轉換的 .shp 文件是:/tmp/demo.shp,那么就做以下操作:
$ sudo su postgres $ cd /tmp $ shp2pgsql -W GBK -s 3857 ./demo.shp entry > demo.sql
這里需要說明一下最后一句各部分所代表的含義:
得到了 .sql 文件后,就可以直接導入到 PostgreSQL 數據庫了。
這里就需要用到前面的 template 了。
sudo su postgres psql CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
導入 .sql 文件
sudo su postgres psql \c newdb \i demo.sql \d
可以看到,.sql 文件已經被導入了。
OK,現在我們在本機(服務器 IP 假設是 192.168.1.111)用以下命令登錄 psql,會發現一段輸出:
$ psql -h 192.168.1.111 -p 5432 psql: could not connect to server: Connection refused Is the server running on host "100.94.110.105" and accepting TCP/IP connections on port 5432?
這是因為 PostgreSQL 默認不對外開放權限,只對監聽環回地址。要修改的話,需要找到 postgresql.conf 文件,修改值 listen_addresses:
listen_addresses = '*'
以上就是本次小編整理的關于Linux中PostgreSQL和PostGIS的安裝和使用的全部內容,感謝你對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。