您的位置:首页 > 数据库

在Windows上部署PostgreSQL以及使用R语言连接操作

2017-03-15 21:28 399 查看

在Windows上部署PostgreSQL

之前的开发工作,都是在Linux上完成的,而且昨晚以后鉴于没有保留文档,搞得我后来也不知道怎么重新部署数据库了,现在必须要在Windows开发出一个可以使用的数据库了。我的想法是,暂时还是按照老的办法来:

建立一个PostgreSQL数据库。

设置好用户名密码什么的。

使用R语言往数据库里写入比较大的文件成为表格。

安装数据库没什么好说的,就是下载了最新的PostgreSQL无脑安装,我安装的是9.6版本,安装过程中,有一个需要设置密码的环节,指定的用户名是postgres,密码自己设定一下。这个用户是管理员用户,很重要,基本上一开始系统安装以后,你只有这个用户可以操作,我们需用它慢慢添加其他用户,然后建立数据库等等:

安装完毕以后,应该有两种以上办法设定建立数据库等等吧,pgAdmin是一种,直接使用命令行也是一种。

命令行操作数据库

我用管理员权限打开了cmder(就是一个windows CMD的升级版),目前我们的数据库里只有一个用户,就是管理员用户postgres,输入命令:

psql -U postgres


然后可以看到登录:

用户 postgres 的口令:
psql (9.6.2)
输入 "help" 来获取帮助信息.

postgres=#


(我也不知道为什么出来这么多中文提示……有同学知道怎么把它们全部修改成英文的话麻烦告诉我。)

出现最后那一个
postgres=#
就意味着可以操作数据库了。目前数据库里应该只有一个系统管理员:postgres,我们就是用它登录了。使用
\l
命令可以查看目前存在的数据库,我也搞不懂为什么刚刚建立的数据库,就已经有三个数据库了。我本以为是空的。



另外,使用
\du
命令可以查看所有的用户



这个结果还比较正常,只有一个用户,postgreSQL超级用户。下面我们要做的,就是建立一个数据库,并且建立一个用户,以后我们的网站啊或者其他东西,都通过这个用户名,去访问这个数据库实现。并且,还需要将数据都放在数据库里。

如果使用pgAdmin来做查看结果的话,应该是这样子的:



上述的两个红框,一个是postgres数据库,一个是postgres用户,正是我们刚才用命令行看到的东西。

我们继续使用命令行建立建立新用户:
joshua
,以及一个数据库:
mydb
。需要使用三行命令就够了:

CREATE USER joshua WITH PASSWORD '12345678';


第一行:上述命令创建了一个叫做joshua的数据库使用人员,它的属性是”user”,而不是“role”,意味着它是可以登录的人,不只是可以调用数据的人。

CREATE DATABASE mydb OWNER joshua;


第二行:创建一个叫做mydb的数据库,并且让数据库拥有人设置为joshua.

GRANT ALL PRIVILEGES ON DATABASE mydb to joshua;


第三行:将myDB的所有权限赋予joshua. (我也不知道有哪些权限……) 运行效果如下:

postgres=# CREATE USER joshua WITH PASSWORD '12345678';
CREATE ROLE
postgres=# CREATE DATABASE myDB OWNER joshua;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE mydb to joshua;
GRANT
postgres=#


在PostgreSQL中,我们也可以看到一样的结果:



OK,到这一步,我们就可以使用joshua这个用户,随意地登录mydb这个数据库了,需要的仅仅是在网站程序中进行一些配置就好。

使用R语言连接数据库进行操作

我个人R语言比较好,所以比较希望能通过R语言连接数据库进行操作,以前我用R语言连接过mySQL进行数据读取。同样,我们可以使用R语言连接postgreSQL进行操作:

首先当然是需要在Windows是安装R语言,我安装的是Microsoft open-R,微软宣称自己的R比常规的要好,我目前还没用出来,但是安装上去以后,和普通的R看上去没什么区别,如果想用RStudio一类的IDE也可以安装,能用就行。然后打开R,安装一个包叫做:
RPostgreSQL


连接方式超级简单,载入R包以后,一行就连上了:

library(RPostgreSQL)
con <- dbConnect(PostgreSQL(), host="localhost", user= "joshua", password="12345678", dbname="mydb")


那个包提供了对于数据库的各种操作,增删改查都有。不过我一般都是处理好的数据直接一行命令上传数据库的,所以不太关注其他命令。下面假设我有一批数据,我要把它推送到数据库中,建立成一张表格,需要做的仅仅也是一行命令:

dbWriteTable(con, "MyData", MyData)


其中,后一个MyData是你的一个R对象,DataFrame或者Matrix都行吧。前一个就是一个名字而已,这个名字是你的MyData这一个数据库在数据库内的表的名字。

下面我用R语言中非常常用的鸢尾花数据做一下演示:

> data("iris")
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> dbWriteTable(con, "iris", iris)
[1] TRUE


通过dbWriteTable函数,整个iris数据就被上传到了postgreSQL中了,并且在其中自动建立了一个叫做iris的表格。我们可以使用命令行查一下:

在bash中,先按之前的命令,登录到postgres用户中,然后用它登录postgreSQL数据库,然后使用命令
\c my db
连接mydb数据库:

postgres=# \c mydb;
您现在已经连接到数据库 "mydb",用户 "postgres".
mydb=#


出现
mydb=#
就意味着已经成功连接上了mydb数据库,然后使用命令
\d
查看所有的表:

mydb=# \d
关联列表
架构模式 | 名称 |  类型  | 拥有者
----------+------+--------+--------
public   | iris | 数据表 | joshua
(1 行记录)


可以看出,出现了一个叫做iris的表。我们可以使用最常用的SQL查询语句看一下表里的内容:

mydb=# select * from iris limit 6;
row.names | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species
-----------+--------------+-------------+--------------+-------------+---------
1         |          5.1 |         3.5 |          1.4 |         0.2 | setosa
2         |          4.9 |           3 |          1.4 |         0.2 | setosa
3         |          4.7 |         3.2 |          1.3 |         0.2 | setosa
4         |          4.6 |         3.1 |          1.5 |         0.2 | setosa
5         |            5 |         3.6 |          1.4 |         0.2 | setosa
6         |          5.4 |         3.9 |          1.7 |         0.4 | setosa
(6 行记录)


可以看出,结果和之前是一样的。

同样,刷新一下pgAdmin也可以看出一样的结果:



OK,到目前为止,我们就已经能够成功在Windows上建立postgreSQL了,并且能够通过R语言方便地与其进行连接操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息