如何在CentOS 76.56.4 下安装PostgreSQL 9.3 与 phpPgAdmin

如何在CentOS 76.56.4 下安装PostgreSQL 9.3 与 phpPgAdmin,第1张

PostgreSQL强源象关系类型数据库系统能运行于几乎所主要 *** 作系统包括Linux、Unix(AIX、BSD、HP-UX、SGI
IRIX、Mac OS、Solaris、Tru64)、Windows OS篇教程我习何CentOS7/65/64 server
建立PostgreSQL
1安装PostgreSQL
首先根据服务器架构添加PostgreSQL库:
CentOS 6x 32bit:
rpm -Uvh 1noarchrpm
CentOS 6x 64bit:
rpm -Uvh
CentOS 7 64bit:
rpm -Uvh
于其发行版查看链接并建立库:
使用命令更新库:
yum update
使用命令安装PostgreSQL:
yum install postgresql93-server postgresql93-contrib
使用命令初始化PostgreSQL数据库:
CentOS 6x 系统:
service postgresql-93 initdb
CentOS 7系统:
/usr/pgsql-93/bin/postgresql93-setup initdb
启PostgreSQL服务并使机自启:
CentOS 6x 系统:
service postgresql-93 start
chkconfig postgresql-93 on
CentOS 7系统:
systemctl enable postgresql-93
systemctl start postgresql-93
2调整Iptables/Firewall
接调整防火墙站规则:
CentOS 6x系统:
vi /etc/sysconfig/iptables
并添加行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
退并保存文件重启iptables服务:
service iptables restart
CentOS系统:
firewall-cmd --permanent –add-port=5432/tcp
firewall-cmd --permanent –add-port=80/tcp
firewall-cmd --reload
3访问PostgreSQL用命令提示符
默认情况数据库名用户名都postgres切换至用户执行相关 *** 作:
su – postgres
输入命令登陆:
psql
例输:
psql (935)
Type "help" for help
Postgres=#
通输入\q退postgresql返命令终端:
4设置用户密码
登陆至postgres命令提示符界面
su – postgres
psql
使用命令设置密码
postgres=# \password postgres
Enter new password:
Enter it again:
postgres=# \q
输入命令建立PostgreSQL系统管理工具
postgres=# CREATE EXTENSION adminpack;
CREATE EXTENSION
5创建用户数据库
例:用户名:senthil 密码:centos 数据库名:mydb
转postgres用户
su – postgres
创建用户senthil
$ createuser senthil
创建数据库
$ createdb mydb
现登陆至psql提示符界面用户senthil设置密码及授权数据库mydb访问:
$ psql
psql (935)
Type "help" for help
postgres=# alter user senthil with encrypted password 'centos';
ALTER ROLE
postgres=# grant all privileges on database mydb to senthil;
GRANT
postgres=#
6删除用户数据库
首先转postgres界面
su – postgres
输入命令
$ dropdb <database-name>
删除用户名输入
$ dropuser <user-name>
7配置PostgreSQL-MD5认证
MD5认证需要客户端提供MD5-encrypted 密码便身份验证需要编辑 /var/lib/pgsql/93/data/pg_hbaconf文件:
vi /var/lib/pgsql/93/data/pg_hbaconf
添加或修改行:
[]
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127001/32 md5
host all all 19216810/24 md5
# IPv6 local connections:
host all all ::1/128 md5
[]
重启postgresql服务应用更改
CentOS 6x系统
service postgresql-93 restart
CentOS 7系统
systemctl restart postgresql-93
8配置PostgreSQL-Configure TCP/IP
默认情况TCP/IP连接行所其计算机用户能连接postgresql编辑文件 /var/lib/pgsql/93/data/postgresqlconf允许连接:
vi /var/lib/pgsql/93/data/postgresqlconf
找面行:
[]
#listen_addresses = 'localhost’
[]
#port = 5432
[]
两行都取消并设置postgresql服务器IP址或设置监听所客户端所示:
listen_addresses = ''
port = 5432
重启应用更改
CentOS6x系统:
/etc/initd/postgresql-93 restart
CentOS7系统:
systemctl restart postgresql-93
9使用phpPgAdmin管理PostgreSQL
phpPgAdmin使用PHP编写基于web管理工具用于管理PostgreSQL适用与PostgreSQL RPM库
没添加PostgreSQL库添加EPEL库
根据面链接CentOS 6x建立EPEL库
CentOS 7参考面链接
使用命令更新库
yum update
现输入命令安装phpPgAdmin:
yum install phpPgAdmin >

bash脚本里有三种方式访问PostgreSQL数据库

但前提是要设置密码文件。当然对于有系统对应账户的数据库角色可以绕过密码登录环节,如

1

$sudo-upostgrespsql

1

2

$sudosu-postgres

$psql

但是对于没有系统账户对应的数据库角色,如要使用脚本登录则必须使用PostgreSQL密码文件

heredoc方式

heredoc是一种很常用的方式,在bash环境下还可以使用变量替换,用法示例

1

2

3

psql-U${role}-h${host}-dmydb

CREATESCHEMA${role};

EOF

也可以在循环语句中,向数据库批量插入数据,类似

1

2

3

4

5

6

for

do

psql-U${role}-h${host}-dmydb

INSERTINTO${table}VALUES(${value1},${value2},);

EOF

done

但这种方式,每次插入一条语句都重新登录一次数据库,效率肯定不咋地。

UPDATE(05/05/2014):既然可以使用变量替换,可以将所有插入语句组合到一个变量中,然后就可以在一次登录中批量插入数据了。

还可以用以下方式来获取查询结果

result=`psql-Urole-hlocalhost-dmydb

SELECTFROMprocts;

EOF`

echo${result}

使用psql命令行选项-f执行sql脚本文件

1

psql-U${role}-h${host}-dmydb-f${scriptname}

使用psql命令行选项-c执行SQL语句或psql命令

psql的-c选项可以指定SQL语句或者psql命令,但二者不能混合,除非使用管道。如果命令参数中有多条SQL语句,则它们在一个事务里执行,除非使用BEGIN/COMMIT明确的指定事务。这与交互式使用psql终端不同,如果不明确指定事务,则每条SQL属于一个单独的事务并自动提交。只有最后一条SQL语句的结果被返回。

了存储、查询和修改空间关系的能力。本文中 ‘PostgreSQL’ 指代基本的关系数据库功能,而 ‘PostGIS’ 指代扩展的空间 *** 作特性。

客户端-服务器构架

PostgreSQL 同众多数据库产品一样,采用客户端-服务器构架。客户端向服务器发出请求并得到响应。这种机制同浏览器从网络服务器获取网页类似。在 PostgreSQL 中,请求以 SQL 语言发出,而响应多为从数据库提取的表单。

客户端与服务器可以部署在同一台设备上,即 PostgreSQL 可以在单一的计算机上使用。借由系统内部的 ‘loopback’ 通信机制,数据库系统可以进行私密通讯。除非专门配置,外界是不能访问这些信息的。

本位介绍三种客户端:命令行, Quantum GIS , pgAdmin 图形化数据库客户端。

创造具有空间信息处理能力的数据库

命令行客户端在终端模拟器(Terminal Emulator)中运行。在 Applications 菜单的 Accessories 中打开一个终端模拟器,将显示一个 Unix 风格的命令行界面。输入:

psql -V

回车确认,将显示 PostgreSQL 版本号。

一个 PostgreSQL 服务器中,可以将不同的任务组织到不同的数据库。每个数据库独立运作,拥有专门的表单、显示、用户等。访问 PostgreSQL 数据库时将指定一个数据库。

服务器上数据库列表通过以下命令查询:

psql -l

输出将罗列 Live 上配置的几个数据库。这里演示新建一个。

PostgreSQL 使用 createdb 工具创建数据库。这里建立的数据库应带有 PostGIS 的扩展功能,因此需要指定相应的模板。这里将新建数据库称为 demo 。命令为:

createdb-Ttemplate_postgisdemo

现在执行 psql-l 应当可以看到 demo 数据库。

也可以使用 SQL 语言创建 PostGIS 数据库。首先使用 dropdb 命令删除之前创建的数据库,然后使用 psql 命令开启 SQL 命令解析器:

dropdbdemopsql-dpostgres

这样就连接到了一个通用的系统数据库 postgres 。输入 SQL 命令建立新数据库:

postgres=# CREATE DATABASE demo TEMPLATE=template_postgis;

现在可以转换连接到新建的数据库。若重新连接时可以使用 psql-ddemo 命令。但在 psql 系统内部也可以使用以下命令:

postgres=# \c demo

一个信息页面将显示当前已连接 demo 数据库。输入 \dt 列出当前数据库内的表单,输出如下:

demo=# \dtListofrelationsSchema|Name|Type|Owner--------+------------------+-------+-------public|geometry_columns|table|userpublic|spatial_ref_sys|table|user(2rows)

这两个表格是 PostGIS 默认的。其中 spatial_ref_sys 存储着合法的空间坐标系统。利用 SQL 查询查看:

demo=# SELECT srid,auth_name,proj4text FROM spatial_ref_sys LIMIT 10;srid|auth_name|proj4text------+-----------+--------------------------------------3819|EPSG|+proj=longlat+ellps=bessel+towgs3821|EPSG|+proj=longlat+ellps=aust_SA+no_d3824|EPSG|+proj=longlat+ellps=GRS80+towgs83889|EPSG|+proj=longlat+ellps=GRS80+towgs83906|EPSG|+proj=longlat+ellps=bessel+no_de4001|EPSG|+proj=longlat+ellps=airy+no_defs4002|EPSG|+proj=longlat+a=6377340189+b=634003|EPSG|+proj=longlat+ellps=aust_SA+no_d4004|EPSG|+proj=longlat+ellps=bessel+no_de4005|EPSG|+proj=longlat+a=6377492018+b=63(10rows)

以上显示确认了该数据库已经建立空间 *** 作功能。数据库中的 geometry_columns 用于记录那些表格是有空间信息的。

手工建立空间数据表格

空间数据库已经建立,现在可以建立具有空间信息的表格。

首先建立一个常规的表格存储有关城市(cities)的信息。这个表格有两栏,一个是 ID 编号,一个是城市名:

demo=# CREATE TABLE cities ( id int4, name varchar(50) );

现在添加一个空间栏用于存储城市的位置。习惯上这个栏目叫做 the_geom 。它记录了数据为什么类型(点、线、面)、有几维(这里是二维)以及空间坐标系统。此处使用 EPSG:4326 坐标系统:

demo=# SELECT AddGeometryColumn ('cities', 'the_geom', 4326, 'POINT', 2);

完成后,查询 cities 表单应当显示这个新栏目。同时页面将显示当前表达没有记录(0 rows)。

demo=# SELECT from cities;id|name|the_geom----+------+----------(0rows)

为添加记录,需要使用 SQL 命令。对于空间栏,使用 PostGIS 的 ST_GeomFromText 可以将文本转化为坐标与参考系号的记录:

demo=# INSERT INTO cities (id, the_geom, name) VALUES (1,ST_GeomFromText('POINT(-01257 51508)',4326),'London, England');demo=# INSERT INTO cities (id, the_geom, name) VALUES (2,ST_GeomFromText('POINT(-81233 42983)',4326),'London, Ontario');demo=# INSERT INTO cities (id, the_geom, name) VALUES (3,ST_GeomFromText('POINT(2791162491 -3301529)',4326),'East London,SA');

当然,这样的输入方式难以 *** 作。其它方式可以更快的输入数据。就目前来说,表格内已经有了一些城市数据,可以先进行查询等 *** 作。

简单查询

标准的 SQL *** 作都可以用于 PostGIS 表单:

demo=# SELECT FROM cities;id|name|the_geom----+-----------------+----------------------------------------------------1|London,England|0101000020E6100000BBB88D06F016C0BF1B2FDD2406C149402|London,Ontario|0101000020E6100000F4FDD478E94E54C0E7FBA9F1D27D45403|EastLondon,SA|0101000020E610000040AB064060E93B4059FAD005F58140C0(3rows)

这里的坐标是无法阅读的 16 进制格式。要以 WKT 文本显示,使用 ST_AsText(the_geom) 或 ST_AsEwkt(the_geom) 函数。也可以使用 ST_X(the_geom) 和 ST_Y(the_geom) 显示一个维度的坐标:

demo=# SELECT id, ST_AsText(the_geom), ST_AsEwkt(the_geom), ST_X(the_geom), ST_Y(the_geom) FROM cities;id|st_astext|st_asewkt|st_x|st_y----+------------------------------+----------------------------------------+-------------+-----------1|POINT(-0125751508)|SRID=4326;POINT(-0125751508)|-01257|515082|POINT(-8123342983)|SRID=4326;POINT(-8123342983)|-81233|429833|POINT(2791162491-3301529)|SRID=4326;POINT(2791162491-3301529)|2791162491|-3301529(3rows)

空间查询:

PostGIS 为 PostgreSQL 扩展了许多空间 *** 作功能。以上已经涉及了转换空间坐标格式的 ST_GeomFromText 。多数空间 *** 作以 ST(spatial type)开头,在 PostGIS 文档相应章节有罗列。这里回答一个具体的问题:以米为单位并假设地球是完美椭球,上面三个城市相互的距离是多少?

demo=# SELECT p1name,p2name,ST_Distance_Sphere(p1the_geom,p2the_geom) FROM cities AS p1, cities AS p2 WHERE p1id > p2id;name|name|st_distance_sphere-----------------+-----------------+--------------------London,Ontario|London,England|587576685191657EastLondon,SA|London,England|978964696784908EastLondon,SA|London,Ontario|138921609525778(3rows)

输出显示了距离数据。注意 ‘WHERE’ 部分防止了输出城市到自身的距离(0)或者两个城市不同排列的距离数据(London, England 到 London, Ontario 和 London, Ontario 到 London, England 的距离是一样的)。尝试取消 ‘WHERE’ 并查看结果。

这里采取不同的椭球参数(椭球体名、半主轴长、扁率)计算:

demo=# SELECT p1name,p2name,ST_Distance_Spheroid(p1the_geom,p2the_geom,'SPHEROID["GRS_1980",6378137,298257222]')FROMcitiesASp1,citiesASp2WHEREp1id>p2id;name|name|st_distance_spheroid-----------------+-----------------+----------------------London,Ontario|London,England|589241363776489EastLondon,SA|London,England|975684265711931EastLondon,SA|London,Ontario|138841494140698(3rows)

制图

以 PostGIS 数据制图需要相应的客户端支持。包括 Quantum GIS、gvSIG、uDig 在内的多种客户端均可以。以下使用 Quantum GIS:

从 Desktop GIS 菜单启动 Quantum GIS 并在其 layer 菜单选择 AddPostGISlayers 。连接到 Natural Earth PostGIS 数据库的参数在 Connections 下拉菜单中有。这里可以定义和储存其它的配置。点击 Edit 可以查看具体参数。点击 Connect 连接:

系统将显示所有空间信息表供选择:

选择 lakes 湖泊表单并点击底部的 Add 添加。顶部的 Load 可以载入新的数据库连接配置。数据将被导入:

界面上显示出湖泊的分布。QGIS 并不理解湖泊一词的含义,也许不会自动使用蓝色。请查看其手册了解如何设置。这里缩放到加拿大一处著名的湖泊群。

自动创建空间数据表单

OSGeo Live 的多数桌面 GIS 系统都可以将 shp 等文件导入数据库。这里依然使用 QGIS 演示。

QGIS 中导入 shp 可以使用 PostGIS Manager 插件。在 Plugins 菜单选择 FetchPlugins 导入最新的官方插件列表(需要网络连接)。找到 PostGISManager 点击 Installplugin 安装。

完成后,在 Plugin 菜单点击 PostGIS Manager 启动。也可以点击工具栏上大象与地球的图标。

该插件将连接 Natural Earth 数据库。若提示输入密码,留空即可。在开启的界面中,选择表单可以显示相应的信息。预览(Preview)选项卡可以显示地图预览。这里选择了 populated places 图层并缩放到一个小岛:

接下来使用 PostGIS Manager 将 shp 导入数据库。这里使用 R 统计扩展包含的 North Carolina sudden infant death syndrome (SIDS) 数据:

在 Data 菜单选择 Loaddatafromshapefile 选项。点击 选中 R maptools 中的 sidsshp 。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10787173.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存