Ⅰ 如何用命令打开postgresql数据库
F:\PostgreSQL\9.2\bin>psql.exe -h localhost -U postgres -d Test -p 5432psql (9.2.4)输入 "help" 来获取帮助信息.Test=#Test=# help;您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面键入: \right 显示发行条款 \h 显示 SQL 命令的说明 \? 显示 pgsql 命令的说明 \g 或者以分号(;)结尾以执行查询 \q 退出注: 数据库名称区分大小写的。使用某些有密码的用户的情况下, 会提示输入密码.F:\PostgreSQL\9.2\bin>psql.exe -h localhost -U test -d Test -p 5432用户 test 的口令:psql (9.2.4)输入 "help" 来获取帮助信息.Test=#
Ⅱ linux怎么用命令登陆postgres
(1)用户实用程序:
createdb 创建一个新的PostgreSQL的数据库(和SQL语句:CREATE DATABASE 相同)
createuser 创建一个新的PostgreSQL的用户(和SQL语句:CREATE USER 相同)
dropdb 删除数据库
dropuser 删除用户
pg_mp 将PostgreSQL数据库导出到一个脚本文件
pg_mpall 将所有的PostgreSQL数据库导出到一个脚本文件
pg_restore 从一个由pg_mp或pg_mpall程序导出的脚本文件中恢复PostgreSQL数据库
psql 一个基于命令行的PostgreSQL交互式客户端程序
vacuumdb 清理和分析一个PostgreSQL数据库,它是客户端程序psql环境下SQL语句VACUUM的shell脚本封装,二者功能完全相同
(2)系统实用程序
initdb 创建一个用于存储数据库的PostgreSQL数据目录,并创建预定义的模板数据库template0和template1,生成共享目录表 catalog;此程序通常只在安装PostgreSQL时运行一次
initlocation 创建一个辅助的PostgreSQL数据库存储区域
ipcclean 从停止的PostgreSQL服务器中清除共享内在和孤立信号标志
pg_ctl 启动、停止、重启PostgreSQL服务(比如:pg_ctl start 启动PostgreSQL服务,它和service postgresql start相同)
pg_controldata 显示PostgreSQL服务的内部控制信息
postgres PostgreSQL单用户模式的数据库服务
postmaster PostgreSQL多用户模式的数据库服务
4.这里面最重要的是psql这个客户端程序最为重要。启用客户端程序psql的方法是:
切换到PostgreSQL预定义的数据库超级用户postgres,启用客户端程序psql,并连接到自己想要的数据库,比如说:
psql template1
出现以下界面,说明已经进入到想要的数据库,可以进行想要的操作了。
template1=#
5.在数据库中的一些命令:
template1=# \l 查看系统中现存的数据库
template1=# \q 退出客户端程序psql
template1=# \c 从一个数据库中转到另一个数据库中,如template1=# \c sales 从template1转到sales
template1=# \dt 查看表
template1=# \d 查看表结构
template1=# \di 查看索引
[基本数据库操作]========================
*创建数据库:
create database [数据库名];
*查看数据库列表:
\d
*删除数据库:
drop database [数据库名];
创建表:
create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);
*查看表名列表:
\d
*查看某个表的状况:
\d [表名]
*重命名一个表:
alter table [表名A] rename to [表名B];
*删除一个表:
drop table [表名];
========================================
[表内基本操作]==========================
*在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];
*删除表中的字段:
alter table [表名] drop column [字段名];
*重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];
*给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];
*去除缺省值:
alter table [表名] alter column [字段名] drop default;
在表中插入数据:
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];
删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];--删空整个表
6.要注意随时对数据库进行清理、收回磁盘空间并更新统计信息,使用下面的命令就搞定!
vaccumdb -d sales -z
-a 对所有的数据库操作
-z 保证不断地删除失效的行,节约磁盘空间,将统计信息更新为最近的状态
7.PostgreSQL用户认证
PostgreSQL数据目录中的pg_hba.conf的作用就是用户认证,可以在/var/lib/pgsql/data中找到。
有以下几个例子可以看看:
(1)允许在本机上的任何身份连接任何数据库
TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
local all all trust(无条件进行连接)
(2)允许IP地址为192.168.1.x的任何主机与数据库sales连接
TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
host sales all 192.168.1.0 255.255.255.0 ident sameuser(表明任何操作系统用户都能够以同名数据库用户进行连接)
8.看了那么多,来一个完整的创建PostgreSQL数据库用户的示例吧
(1)进入PostgreSQL高级用户
(2)启用客户端程序,并进入template1数据库
psql template1
(3)创建用户
template1=# CREATE USER hellen WITH ENCRYPED PASSWORD'zhenzhen'
(4)因为设置了密码,所以要编辑pg_hba.conf,使用户和配置文件同步。
在原有记录上面添加md5
local all hellen md5
(4)使用新用户登录数据库
template1=# \q
psql -U hellen -d template1
PS:在一个数据库中如果要切换用户,要使用如下命令:
template1=# \!psql -U tk -d template1
9.设定用户特定的权限
还是要用例子来说明:
创建一个用户组:
sales=# CREATE GROUP sale;
添加几个用户进入该组
sales=# ALTER GROUP sale ADD USER sale1,sale2,sale3;
授予用户级sale针对表employee和procts的SELECT权限
sales=# GRANT SELECT ON employee,procts TO GROUP sale;
在sale中将用户user2删除
sales=# ALTER GROP sale DROP USER sale2;
10.备份数据库
可以使用pg_mp和pg_mpall来完成。比如备份sales数据库:
pg_mp sales>/home/tk/pgsql/backup/1.bak
Ⅲ 怎么在windows上连接postgres
1、windows下postgresql的安装
我下载的为xxx9.2.exe一路默认安装即可。安装位置为C:\Program Files\PostgreSQL。
安装完毕后,在dos下执行命令
>net user
列出当前系统用户名称。我的用户名为Administrator。
>psql –U Administrator –d postgres
该命令表示通过数据库用户Administrator连接数据库postgres。
l 若显示psql不是内部或外部命令,则说明postgresql的bin文件路径没添加到windows系统中,右击“我的电脑”->”属性”->”高级”->”环境变量”->”Administrator”的用户变量,选中“PATH”,点击编辑,将”C:\Program Files\PostgreSQL\9.2\bin”添加进去,注意与前面的路径用”;”隔开。电脑重启生效。
l 若显示角色Administrator不存在,则必须在postgresql数据库中添加该用户才能使其可以登录。
在postgresql中
查询系统用户
postgres=#select* from pg_user;
查询系统中的数据库
postgres=#select* from pg_database;
说明一下:“template1”是Postgresql在初始化时自动创建的测试数据库。
创建postgresql数据库Administrator用户
方式1
在PostgreSQL中创建用户postgreSQL用户Administrator
用SQL Shell(psql)通过用户postgres登录PostgreSQL,创建用户Administrator,
postgres=#create user “Administrator”;
方式2
通过windows下dos创建postgresql用户Administrator
将PostgreSQL文件夹bin路径添加到系统环境中后重启生效.
通过windows下dos创建postgresql用户是区分大小写的。
配置客户机访问
为了配置远程主机和用户可以连接到PostgreSQL服务,你需要pg_hba.conf文件。文件包含大量注释记录用于远程访问的选项。在我们的安装示例中,我们允许局域网中任何主机的任何用户访问服务器上的数据库。为了达到这个目的,我们添加以下的一行记录到文件尾:
host all all 192.168.0.0/16 trust
这意味着所有IP地址由192.168开始的计算机可以访问所有的数据库。最简单的使配置生效的方法就是重启服务器。
在dos下操作,通过createuser –Uolser –P newuser来创建。
比如我们想创建postgresql数据库用户Administrator。
>createuser –U postgre –P Administrator
这样创建的数据库用户Administrator没有创建数据库的权利,可以通过pgAdmin III登录进行查看。
若使其可以创建数据库可以参照下面内容进行设置:
>createuser –U postgre –s Administrator
这样具有创建数据库能力。
createuser的用法可以通过在dos中输入createuser –help查看。
MicrosoftWindows XP [版本 5.1.2600]
(C)版权所有 1985-2001 Microsoft Corp.
C:\Documentsand Settings\Administrator>createuser --help
createuser创建一个新的 PostgreSQL 用户.
使用方法:
createuser [选项]... [用户名]
选项:
-c, --connection-limit=N 角色的连接限制(缺省: 没有限制)
-d, --createdb 此角色可以创建新数据库
-D, --no-createdb 此角色不可以创建新数据库(默认)
-e, --echo 显示发送到服务端的命令
-E, --encrypted 口令加密存储
-i, --inherit 角色能够继承它所属角色的权限
(这是缺省情况)
-I, --no-inherit 角色不继承权限
-l, --login 角色能够登录(这是缺省情况)
-L, --no-login 角色不能登录
-N, --unencrypted 口令不加密存储
-P, --pwprompt 给新角色指定口令
-r, --createrole 这个角色可以创建新的角色
-R, --no-createrole 这个角色没有创建其它角色的权限(默认)
-s, --superuser 角色将是超级用户
-S, --no-superuser 角色不能是超级用户(默认)
-V, --version 输出版本信息, 然后退出
--interactive 提示缺少角色名及其属性
而不是使用默认值
--replication 角色能启动复制
--no-replication 角色不能启动复制
-?, --help 显示此帮助, 然后退出
联接选项:
-h, --host=HOSTNAM 数据库服务器所在机器的主机名或套接字目录
-p, --port=PORT 数据库服务器端口号
-U, --username=USERNAME 联接用户 (不是要创建的用户名)
-w, -no-password 永远不提示输入口令
-W, --password 强制提示输入口令
臭虫报告至<[email protected]>.
C:\Documentsand Settings\Administrator>
方式3
在C:\Program Files\PostgreSQL\9.2\bin文件夹下有可执行文件createuser.exe,我双击后,该文件执行一闪就关闭,只好在dos中输入cmd打开窗口,将该文件拖入窗口中,在输入“ –U postgres –P Adiminisrator”然后回车,如下图所示,即可创建数据库用户Administrator。但此时该用户不具有创建database的能力,可以通过pgAdmin III查看。
psql的用法可以通过在dos下输入psql –help查看,如下图所示。
MicrosoftWindows XP [版本 5.1.2600]
(C) 版权所有1985-2001 Microsoft Corp.
C:\Documentsand Settings\Administrator>psql --help
psql是PostgreSQL 的交互式客户端工具。
使用方法:
psql [选项]... [数据库名称 [用户名称]]
通用选项:
-c,--command=命令 执行单一命令(SQL或内部指令)然后结束
-d, --dbname=数据库名称 指定要连接的数据库 (缺省:"Administrator")
-f, --file=文件名 从文件中执行命令然后退出
-l, --list 列出所有可用的数据库,然后退出
-v, --set=, --variable=名称=值
为psql变量(名称)设定值
-V, --version 输出版本信息, 然后退出
-X, --no-psqlrc 不读取启动文档(~/.psqlrc)
-1 ("one"), --single-transaction
作为一个单一事务来执行命令文件
-?, --help 显示此帮助, 然后退出
输入和输出选项:
-a, --echo-all 显示所有来自于脚本的输入
-e, --echo-queries 显示发送给服务器的命令
-E, --echo-hidden 显示内部命令产生的查询
-L, --log-file=文件名 将会话日志写入文件
-n, --no-readline 禁用增强命令行编辑功能(readline)
-o, --output=FILENAME 将查询结果写入文件(或 |管道)
-q, --quiet 以沉默模式运行(不显示消息,只有查询结果)
-s, --single-step 单步模式 (确认每个查询)
-S, --single-line 单行模式 (一行就是一条 SQL 命令)
输出格式选项 :
-A, --no-align 使用非对齐表格输出模式
-F, --field-separator=字符串
设字段分隔符(缺省:"|")
-H, --html HTML 表格输出模式
-P, --pset=变量[=参数] 设置将变量打印到参数的选项(查阅 \pset 命令)
-R, --record-separator=字符串
设定记录分隔符(缺省:换行符号)
-t, --tuples-only 只打印记录i
-T, --table-attr=文本 设定 HTML 表格标记属性(例如,宽度,边界)
-x, --expanded 打开扩展表格输出
-z, --field-separator-zero
设置字段分隔符为字节0
-0, --record-separator-zero
设置记录分隔符为字节0
联接选项:
-h, --host=主机名 数据库服务器主机或socket目录(缺省:"本地接口")
-p, --port=端口 数据库服务器的端口(缺省:"5432")
-U, --username=用户名 指定数据库用户名(缺省:"Administrator")
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示 (自动)
更多信息,请在psql中输入"\?"(用于内部指令)或者"\help"(用于SQL命令),
或者参考PostgreSQL文档中的psql章节.
臭虫报告至<[email protected]>.
C:\Documentsand Settings\Administrator>
Ⅳ pgAdmin如何使用postgresql应该怎么设置
.2.1 pgAdmin3的启动
您可以在应用程序---系统工具中找到pgAdmin3的启动项;
也可以在命令行下输入:
xiaop@xiaop-laptop:~$ /usr/bin/pgadmin3 start
6.2.2 连接已创建的数据库mydb ;
点击档案-----新增服务器,然后在跳出的窗口下输入:
地址:localhost
描述:服务器名称(随意填写)
维护数据库:postgres
用户名:自己创建一个(详情参见创建用户)
密码:和用户名对应(创建用户时自己创建)
点击确定后大家便可以查看postsql已有的数据库了;
注:pgAdmin3的数据库和终端下创建的数据库是完全同步的(可以用刷新查看效果), pgAdmin3是比较方便的图形化管理工具,它可以创建图表,管理数据库等,有关pgAdmin3的详细介绍我们在以后讨论,本文主要介绍命令行下的操作。图形化管理工具能做到的命令行都可以做到,您可以在命令行下创建表,在pgAdmin3上查看是否同步:
7. 创建和删除表;
7.1 创建新表;
创建完数据库之后,您就可以创建新表了,可以通过声明表的名字和所有字段的名字及其类型来创建表,例如:
mydb#CREATE TABLE weather (
city varchar(80),
temp_lo int, -- 最低气温
temp_hi int, -- 最高气温
prcp real, -- 降水量
date date
);
注:您可以在 psql 里连换行符一起键入这些东西。 psql 可以识别该命令直到分号才结束,不要忘记“;”
您可以在 SQL 命令中自由使用空白(也就是空格,tab,和换行符)。 这就意味着您可以用和上面不同的对齐方式键入命令。 两个划线("--") 引入注释。 任何跟在它后面的东西直到该行的结尾都被忽略。 SQL 是对关键字和标识符大小写不敏感的语言,只有在标识符用双引号包围时才能保留它们的大小写属性。
7.2 数据类型;
上面例子中的varchar(80) 声明一个可以存储最长 80 个字符的任意字符串的数据类型。 int 是普通的整数类型。 real 是一种用于存储单精度浮点数的类型。 date 类型应该可以自解释。
PostgresSQL 支持标准的 SQL 类型 int,smallint, real,double precision, char(N), varchar(N),date, time,timestamp 和 interval,还支持其他的通用类型和丰富的几何类型。 PostgreSQL 可以客户化为定制任意的用户定义的数据类型,您可以参考PostgreSQL的中文文档来查询;
7.3 删除表;
如果您不再需要某个表,或者您想创建一个不同的表,那么您可以用下面的命令删除它:
mydb#DROP TABLE tablename
8. 向表中添加行;
8.1 INSERT;
INSERT 用于向表中添加行,您可以输入(在数据库中操作):
mydb#INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
注:所有数据类型都使用了相当明了的输入格式。 那些不是简单数字值的常量必需用单引号(')包围, 就象在例子里一样。
8.2 point类型输入;
point 类型要求一个座标对作为输入,如下:
mydb#INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');
8.3 COPY;
您还可以使用 COPY 从文本文件中装载大量数据。 这么干通常更快,因为 COPY 命令就是为这类应用优化的, 只是比 INSERT 少一些灵活性.比如:
mydb#COPY weather FROM '/home/user/weather.txt';
注:weather.txt是您提前写好的符合格式标准的表格内容文档;
9. 查询一个表;
9.1 SELECT;
要从一个表中检索数据就是查询这个表。 SQL 的 SELECT 就是做这个用途的。 该语句分为选择列表(列出要返回的字段部分),表列表(列出从中检索数据的表的部分), 以及可选的条件(声明任意限制的部分)。比如,要检索表 weather 的所有行,键入:
SELECT * FROM weather;
<code>
输出结果:
<code>
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
San Francisco | 43 | 57 | 0 | 1994-11-29
Hayward | 37 | 54 | | 1994-11-29
(3 rows)
您可以在选择列表中写任意表达式,而不仅仅是字段列表。比如,您可以:
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
这样应该得出:
city | temp_avg | date
---------------+----------+------------
San Francisco | 48 | 1994-11-27
San Francisco | 50 | 1994-11-29
Hayward | 45 | 1994-11-29
(3 rows)
请注意这里的 AS 子句是如何给输出字段重新命名的。(AS 子句是可选的。)
9.2 WHERE;
一个查询可以使用 WHERE 子句"修饰",声明需要哪些行。 WHERE 子句包含一个布尔(真值)表达式,只有那些布尔表达式为真的行才会被返回。 允许您在条件中使用常用的布尔操作符(AND,OR, 和 NOT)。 比如,下面的查询检索旧金山的下雨天的天气:
mydb#SELECT * FROM weather
WHERE city = 'San Francisco' AND prcp > 0.0;
结果:
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
(1 row)
9.3 排序;
您可以要求返回的查询是排好序的:
mydb#SELECT * FROM weather
ORDER BY city;
得出结果:
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
Hayward | 37 | 54 | | 1994-11-29
San Francisco | 43 | 57 | 0 | 1994-11-29
San Francisco | 46 | 50 | 0.25 | 1994-11-27
在这个例子里,排序的顺序并非绝对清晰的,因此您可能看到 San Francisco 行随机的排序。 但是如果您使用下面的语句,那么就总是会得到上面的结果
SELECT * FROM weather
ORDER BY city, temp_lo;
您可以要求查询的结果按照某种顺序排序, 并且消除重复的行输出:
mydb#SELECT DISTINCT city
FROM weather;
得出结果:
city
---------------
Hayward
San Francisco
(2 rows)
Ⅳ 如何导入PostgreSQL数据库数据
说起数据库,大家耳熟能详的商业数据库产品当推Oracle、微软的SqlServer和IBM的
DB2等,而开源数据库中则有两大产品MySQL和PostgreSQL。
PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、
特性最丰富和最复杂的自由软件数据库系统。它起源于伯克利(BSD)的数据库研究计划,
目前是最重要的开源数据库产品开发项目之一,有着非常广泛的用户。
PostgreSQL 可以说是最富特色的自由数据库管理系统,也有人认为可以是最强大的自由
软件数据库管理系统。PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完
整性检查等特性的唯一的一种自由软件的数据库管理系统。能在多平台下---包括Linux、
FreeBSD和Windows等---运行,并且支持多语言的开发。
在两大开源数据库产品的对比中,一般认为MySQL速度更快,所以得到更为广泛的使
用;而PostgreSQL性能更为先进,PostgreSQL 提供很多 MySQL 目前所不支持的特性,比
如触发器、视图、存储过程等等,在记录数超千万之后性能表现尤其出色。
当前的最新版本是PostgreSQL 8.2.3,官方网站是:
www.postgresql.org
1.2 什么是PostGIS
PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于
Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最着
名的开源GIS数据库。
当前的最新版本是PostGIS 1.2.1,官方网站是:
www.postgis.org
二 PostgreSQL和PostGIS的安装
2.1 在windows下安装。
新版本的PostgreSQL在其安装程序中集成了PostGIS,只需要在安装过程中选中
PostGIS和pgsql项就可以了。
2.2 在Debian下安装PostGIS
# apt-get install postgresql-8.1 postgresql-8.1-postgis
当前Etch中的版本:PostgreSQL是8.1.7,而PostGIS是1.1.6,虽然不是最新的版本,
但已经足够了。
还需要做的工作是:
1) 创建一个专门用于PostGIS的数据库并为专用数据库导入PostGIS支持:
# su – postgres
$ cd /usr/share/postgresql-8.1-postgis
$ createdb wen1
$ createlang plpgsql wen1
$ psql -d wen1 -f lwpostgis.sql
$ psql -d wen1 -f spatial_ref_sys.sql
2) 创建一个专门的用户,并把相应的数据库和数据表的属主设置为该用户:
# su – postgres
$ psql
$ create user wen1 password ‘123456’;
$ alter database wen1 owner to wen1;
$ alter table spatial_ref_sys owner to wen1;
$ alter table geometry_columns owner to wen1 ;
3) 修改PostgreSQL配置文件以便可以远程使用。
修改PostgreSQL的配置文件/etc/postgresql/8.1/main/Postgresql.conf,将其中的一句:
listen_address=’localhost’
前面的注释去掉,并把’localhost’该为’*’。
修改Postgresql的配置文件/etc/postgresql/8.1/main/pg_hba.conf,在文件后面加一句:
host all all 192.168.0.0/24 password
这句的意思是:同网络中192.168.0.*的机器可以以密码的形式使用所有的数据库。更具
体的参数意义直接看该配置文件中的注释就可以了。
这里一定要配置正确,否则无法在远程连接PostgreSQL数据库。
2.3 源码安装PostgreSQL和PostGIS
参阅以前写的老文章。
三 PostGIS的使用
要使用PostGIS,需要两方面的预备知识,一是要熟悉基本的SQL语法;二是熟悉
PostgreSQL数据库的基本使用。
(一) 快速入门
我们使用前面创建的数据库wen2,用户为wen1,现在创建一个包含三个点的数据库
test1:
首先在Etch下以wen1登陆,然后打开wen2数据库:
$ psql -d wen2 ;
再在PostgreSQL的控制台下输入以下命令:
wen2=> create table test1 (myID int4, pt geometry, myName
varchar );
wen2=> insert into test1 values (1, 'POINT(0 0)', 'beijing'
);
wen2=> insert into test1 values (2, 'POINT(31.5 60.87)',
'shanghai' );
wen2=> insert into test1 values (3, 'POINT(10.77 85.902)',
'tianjin' );
这样我们利用PostGIS创建了一个包含三个点的GIS数据表。
为了能在QGIS中打开这一图层,我们还需要为数据表创建一个主键:
wen2=>alter table test1 add primary key (myID);
可以看到PostGIS的使用其实就相当于使用一个经过扩展的SQL语法,上述语句熟悉
SQL语法的人一看都很熟悉,都是普通的SQL语句,不同的只不过是增加了PostGIS特殊的
geometry数据类型。
你可以再试试这些SQL语句:
select * from test1;
select myID,AsText(pt) from test1;
select Distance(pt, 'POINT(0 0)') from test1;
(二) PostGIS的Geometry数据类型
Geometry可以说是PostGIS最重要的一个概念,是“几何体”的意思,由于PostGIS很
好地遵守OGC的”Simple Feature for Specification for
SQL”规范,目前支持的几何体类型包
含其实例有:
POINT(1 1)
MULTIPOINT(1 1, 3 4, -1 3)
LINESTRING(1 1, 2 2, 3 4)
POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))
MULTIPOLYGON((0 0, 0 1, 1 1, 1 0, 0 0), (5 5, 5 6, 6 6, 6 5, 5
5))
MULTILINESTRING((1 1, 2 2, 3 4),(2 2, 3 3, 4 5))
而geometry具体表现又有两种形式,一种叫做WKT(Well Known Text)形式,如上面的
例子。或者使用如下SQL语句浏览:
select AsText(pt) from test1;
另一种叫做“Canonical Form”形式,看上去是一串古怪的数字,其实是一种增强的十六
进制编码,使用如下SQL语句就可以浏览了:
select pt from test1;
(三) 读写PostGIS数据
建设好PostGIS数据库之后,我们现在需要进行读写GIS数据了,包括把GIS写入到
PostGIS数据库中以及在应用程序中使用PostGIS数据库的数据。读写PostGIS目前主要有以
下四种方式:
3.1 使用psql语言
Psql语言是PostgreSQL内嵌的一个命令行工具,其语法基本上和标准的SQL语法是一
致的,可以使用Psql工具,结合标准SQL语法和一些PostGIS的扩展对PostGIS数据库进行
读写操作。
具体例子如上面“快速入门”中的例子。
这种方式功能强大,但全部需要手工操作,烦琐且繁重。
3.2 使用一些小工具
有两个很有用的小的转换工具,一是shp2pg;一是ogr2ogr
3.2.1 shp2pgsql和pgsql2shp
shp2pgsql和pgsql2shp是PostGIS自身携带的一对在Shape文件和PostGIS数据库之间进
行转换的工具,在Debian中安装好PostGIS之后,这两个程序已经位于可执行文件的搜索路
径上,因此可以在系统中任何位置使用。
假如当前目录下有完整的china.shp文件(应该有三个同名不同扩展名的文件),需要把其
中数据输入到上述的wen2数据库中的数据表china_postgis中,具体操作为(操作用户为
wen1):
$ shp2pgsql china china_postgis > tmp.sql
$ psql -d wen2 -f roads.sql
这个工具很好用,缺点在于使用范围有限,只针对Shape文件格式。
3.2.2 ogr2ogr
PostGIS本身的shp2pg工具只把shape文件转换到PostGIS 数据库中,那如何把其他的
GIS数据加入呢?比如说MapInfo的mid格式,ESRI的e00格式呢?这就要使用ogr这个工
具了。
Ogr目前是gdal的一个组成部分,那什么是gdal呢?其官方主页(http://www.gdal.org)上
如此介绍:
GDAL is a translator library for raster geospatial data formats
that is released under an X/MIT
style Open Source license by the Open Source Geospatial
Foundation. As a library, it presents a
single abstract data model to the calling application for all
supported formats. It also comes with a
variety of useful commandline utilties for data translation and
processing.
简单地说,Gdal是一个各种Gis数据格式的转换软件库,ogr则是转换矢量GIS数据的
软件库。
目前ogr能够支持的数据格式包括:
Arc/Info Binary Coverage、DWG、ESRI Personal
GeoDatabase、ArcSDE、ESRI
Shapefile、GML、GRASS、Mapinfo File、Microstation DGN、ODBC、Oracle
Spatial和
PostgreSQL等。应该说,这就基本包括了我们平常用到的所有矢量型GIS文件格式了。
Gdal支持的栅格数据格式参阅http: //www.gdal.org/formats_list.html
下面我们从源码编译安装gdal---因为我在Debian下使用apt方式安装的gdal并不支持
postgresql数据库,其实更为简便的方法也许是去gdal.org下载一个Fwtools的工具包,可以
直接运行不用繁琐的编译,既有Windows的,也有Linux下用的,只不过这个包有些大。
1) 下载最新的gdal-1.3.2
2) 解压
3) ./configure --prefix=/opt/gdal
--with-pg=/opt/pg/bin/pg_config --without-ogdi
这里我习惯把软件安装在/opt目录下。
--with-pg参数很重要,使ogr可以支持PostGIS,后面的参数是我的PostGIS安装的地方。
我在这里编译很多次失败,经过仔细查找,发现问题出在ogdi上,所以暂时我只好使
它不支持ogdi。
4) make
5) make install
下面是使用过程,假设现在我要把一个rai.mid文件导入到数据库data1中:
$ ogr2ogr –f Postgresql PG:dbname=data1 rai.mid
注意,f参数后面跟的是导入的数据类型,最后那个文件才是要导出的文件。PG后面说
明的是数据库的名字,需要是已经创建好的数据库,而数据表则由程序自动创建。还要特别
注意权限问题,以上命令我是由postgres用户执行的。
还有一个要注意的是主键问题。一般情况下,你使用shp2pg或者 ogr2ogr向postgis中
增加了Gis数据后,在GIS客户端添加postgis图层的时候,常常会因为数据表没有定义主键
而出错,解决的办法是,在服务器上使用psql或者其他sql工具,使用命令:
alter table table_name add primary key (column_name);
另外我们发现ogr竟然是不支持最常见的GIS格式e00格式,好象是因为版权方面的原
因吧。解决的方法就是去sf.net查找相关工具。我在上面就找到一个e002pg工具,支持将
e00文件导入到postGIS数据库中。
3.3 在其他GIS软件中读写PostGIS数据
比如在QGIS中,能够打开PostGIS图层,还有SPIT插件可以把Shape文件输入到
PostGIS数据库中。
其他GIS软件如uDig,Grass等,甚至连ArcInfo都支持或部分支持读写PostGIS数据。
3.4 利用接口在应用程序中读写PostGIS数据
广大的开源GIS程序员几乎为每一种程序设计语言设计好了读写PostGIS的接口,如利
用PostgreSQL的JDBC库,可以使用Java语言在程序中读写PostGIS数据;利用libpq库,
可以使用C语言读写PostGIS数据。
(四) 使用PostGIS函数
4.1 PostGIS函数
要能熟练使用PostGIS,掌握PostGIS的所有函数是关键。通过掌握这些PostGIS函数,
我们能够高效、稳定地处理各种地理数据。由于PostGIS的函数设计时都遵守OpenGIS规范,
我们也可以把这些PostGIS叫做OpenGIS函数。
4.2 PostGIS函数的分类
PostGIS函数大致可以分为以下四类
1) 字段处理函数
这类函数当前一共有3个,分别是:
AddGeometryColumn(var1,var2,var3,var4,var5,var6):为已有的数据表增加一个地理几何
数据字段。Var1代表数据表的模式(schema)的名字,一般是public,也可以省略,则使用当
前的缺省模式;var2是已有的数据表的名字;var3是新的地理数据字段的名字;var4是
SRID值,不确定的话就取-1吧;var5是地理数据的类型,可以是POINT等;var6是指该几
何数据是二维还是三维数据。
前面的SQL语句 create table test1 (myID int4, pt geometry, myName
varchar )更规范的写
法为:
create table test1 (myID int4, myName varchar );
select AddGeometryColumn('test1','pt',-1,'GEOMETRY',2);
DropGeometryColumn函数显然是删除一个地理数据字段的;
SetSRID函数显然是设置SRID值的。
2) 几何关系函数
这类函数目前共有10个,分别是:
Distance Equals Disjoint Intersects Touches Crosses Within
Overlaps Contains Relate
3) 几何分析函数
这类函数目前共有12个,分别是:Centroid Area Lenth PointOnSurface Boundary
Buffer
ConvexHull Intersection SymDifference Difference GeomUnion
MemGeomUnion
4) 读写函数
这类函数很多,主要是用于在各种数据类型之间的转换,尤其是在于Geometry数据类
型与其他如字符型等数据类型之间的转换,函数名如AsText、GeomFromText等,其作用是
显然的。
4.3 PostGIS函数使用示例。
假设在我们的wen2数据库中,有两张表,一张为guojia,是从“国家基础地理数据”
网站下载的国界数据表,数据类型为LINE;二为shengqu_polygon,也从同一个网站下载,
地理数据类型为多边形。
1) 查询我国边境线的长度:
wen1=> select sum(length(the_geom)) as lenth from guojie;
2) 查询我国面积最大的省区名字:
wen1=> select name area(the_geom) as myarea
from shengqu_polygon
order by myarea DESC
LIMIT 1;
(五) 使用PostGIS扩展函数
除了上述遵循OpenGIS的函数之外,PostGIS还自行扩展了一些当前OpenGIS规范之外
的函数,主要包括以下几类:
5.1 管理类函数
扩展的管理类函数主要包括一些软件版本查询函数,如
postgis_version()、postgis_geos_version()、postgis_proj_version()函数等,分别查询当前的
PostGIS的版本及其使用的Geos和Proj库的版本。
5.2 数据类型的输入输出函数
除了OpenGIS定义的地理数据类型之外,PostGIS还对数据类型进行了扩展,这种扩展
主要是两方面的扩展,一是把二维的数据向三维和四维扩展;二就是在WKT和WKB数据
类型基础上扩展出EWKT和EWKB数据类型。
PostGIS提供了在这些地理数据类型和常用数据类型如字符型、浮点型数据之间进行转
换的函数。
5.3 量算函数
如length3d函数是对length2d函数的扩展。
5.4 几何操作函数
如addBBox(geometry)函数给所给的几何体加上一个边框。
如simplify(geometry,tolerance)函数可以对折线和多边形利用Douglas-Peuker算法进行一
些节点进行删除,从而使表现的图形更简单而清晰,在网络传输数据时具有更高的效率。
5.5 操作符号
5.6 其他扩展函数
(六) 建立PostGIS索引
当数据库的记录增大的时候,如果没有建立索引的话,操作的效率就显着下降。
POstGIS建议当记录数超过几千的时候就应该建立索引,而GIS数据库一般都是海量数据,
所以对PostGIS而言,索引就非常重要。
Shapfile文件为ESRI公司的文件存储格式,并且得到了业界广泛的支持。Shapfile格式是一种简单的,用非拓朴关系的形式存储几何位置和地
理特征的属性信息的格式。虽然GeoServer采用Shapfile文件可以快速的创建网上地图服务,但它的缺点确很明显:
1、Shapefile只支持一个图层,在实际中没有意义。
2、直接保用SHP文件不安全,Shapfile文件很容易被病毒或其他原因误删除。
3、GeoServer中用Shapfile文件作数据源的效率是很低的。
4、Shapfile中的汉字GeoServer不能解析,会出现乱码。
5、数据库可以方便的对地理信息进行查询。
用PostGIS管理空间数据
PostGIS支持GIST空间索引(附录1)、规范窗体,能很大的提高处理效率。
OGC格式只提供二维的几何体,且相关联的SRID从未深入的用于输入输出请求,PostGIS支持OpenGIS组织"Simple
Features for
SQL"规范指定的所有GIS对象和函数,并进行了扩展,格式是EWKB、EWKT,其中增加了对3DZ,3DM和4D
坐标系的支持(当然三维、四维数据的OGC标准还未完全制定),深入引进了SRID信息。
空间数据表结构:PostGIS中存在两个必需的元数据表格, SPATIAL_REF_SYS(空间参考表格) 和
GEOMETRY_COLUMNS(几何体属性列),两个表用于存储空间数据库使用的坐标系统数字ID和文本描述。
PostGIS的shp2pgsql命令可以将Shapfile直接导入到数据库中也可以导出为SQL文件,推荐先导出为SQL文件再将此文件在SQL运行窗口中执行可将数据导入数据库。
Shapfile到SQL语句:
shp2pgsql 路径shp数据文件名 新建的数据表名 >
路径SQL文件名.sql
Shapfile直接入库:
shp2pgsql -c 路径shp数据文件名 新建的数据表名 数据库名|psql -d 数据库名
举例说明:
如将一Shapfile文件“c:road.shp”导入到数据表“road”中,数据库为“sjzmap”。
1、运行“命令提示符”。
2、切换至PostgreSQL数据库安装目录中的bin目录下。
3、执行此目录下的shp2pgsql命令:“shp2pgsql c:road.shp road >
c:road.sql”。
4、如将此文件直接导入数据库(不推荐):“shp2pgsql -c c:road.shp road
sjzmap | psql -d sjzmap”。
5、使用pgAdmin3
选择数据库,再导入表。
Ⅵ 如何在CentOS 7/6.5/6.4 下安装PostgreSQL 9.3 与 phpPgAdmin
PostgreSQL是一个强大开源的对象关系类型数据库系统,它能运行于几乎所有主要的操作系统,包括Linux、Unix(AIX、BSD、HP-UX、SGIIRIX、MacOS、Solaris、Tru64)、WindowsOS。在这篇教程里,我们将学习如何在CentOS7/6.5/6.4server中建立PostgreSQL。1.安装PostgreSQL首先根据你的服务器架构添加PostgreSQL库:对CentOS6.x32bit:rpm-Uvhtcpfirewall-cmd--reload3.访问PostgreSQL常用的命令提示符默认情况下数据库名和用户名都是postgres。切换至用户以执行相关操作:su–postgres输入以下命令登陆:psql会有以下样例输出:psql(9.3.5)Type"help"forhelp.Postgres=#可通过输入\q退出postgresql返回命令终端:4.设置用户密码登陆至postgres命令提示符界面su–postgrespsql然后使用命令设置密码postgres=#\:Enteritagain:postgres=#\q输入命令以建立PostgreSQL系统管理工具postgres=#CREATEEXTENSIONadminpack;CREATEEXTENSION5.创建用户和数据库例如:用户名:senthil密码:centos数据库名:mydb转到postgres用户su–postgres创建用户senthil$createusersenthil创建数据库$createdbmydb现在登陆至psql提示符界面,为用户senthil设置密码及授权对数据库mydb的访问:$psqlpsql(9.3.5)Type"help"forhelp.postgres=#'centos';ALTERROLEpostgres=#;GRANTpostgres=#6.删除用户和数据库首先转到postgres界面su–postgres输入命令$dropdb删除用户名可输入$dropuser7.配置PostgreSQL-MD5认证MD5认证需要客户端提供一个MD5-encrypted密码以便身份验证。你需要编辑/var/lib/pgsql/9.3/data/pg_hba.conf文件:vi/var/lib/pgsql/9.3/data/pg_hba.conf添加或修改的行如下:[]#TYPEDATABASEUSERADDRESSMETHOD#"local"#IPv4localconnections:hostallall127.0.0.1/32md5hostallall192.168.1.0/24md5#IPv6localconnections:hostallall::1/128md5[]重启postgresql服务以应用更改在CentOS6.x系统中servicepostgresql-9.3restart在CentOS7系统中systemctlrestartpostgresql-9.38.配置PostgreSQL-ConfigureTCP/IP默认情况下,TCP/IP连接是不可行的,所以其他计算机用户不能连接到postgresql。编辑文件/var/lib/pgsql/9.3/data/postgresql.conf可以允许连接:vi/var/lib/pgsql/9.3/data/postgresql.conf找到下面的行:[]#listen_addresses='localhost’[]#port=5432[]把两行都取消并设置为你的postgresql服务器IP地址或设置为“*”监听所有客户端。如下所示:listen_addresses='*'port=5432重启以应用更改在CentOS6.x系统中:/etc/init.d/postgresql-9.3restart在CentOS7系统中:systemctlrestartpostgresql-9.39.使用phpPgAdmin管理PostgreSQLphpPgAdmin是使用PHP编写的基于web的管理工具,用于管理PostgreSQL。它只适用与PostgreSQLRPM库。如果你没有添加PostgreSQL库,你可以添加EPEL库。可根据下面的链接在CentOS6.x中建立EPEL库
Ⅶ 如何用命令打开postgresql数据库
F:\PostgreSQL\9.2\bin>psql.exe
-h
localhost
-U
postgres
-d
Test
-p
5432psql
(9.2.4)输入
"help"
来获取帮助信息.Test=#Test=#
help;您正在使用psql,
这是一种用于访问PostgreSQL的命令行界面键入:
\right
显示发行条款
\h
显示
SQL
命令的说明
\?
显示
pgsql
命令的说明
\g
或者以分号(;)结尾以执行查询
\q
退出注:
数据库名称区分大小写的。使用某些有密码的用户的情况下,
会提示输入密码.F:\PostgreSQL\9.2\bin>psql.exe
-h
localhost
-U
test
-d
Test
-p
5432用户
test
的口令:psql
(9.2.4)输入
"help"
来获取帮助信息.Test=#