之前的开发工作,都是在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
命令可以查看目前存在的数据库,我也搞不懂为什么刚刚建立的数据库,就已经有三个数据库了。我本以为是空的。
这个结果还比较正常,只有一个用户,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=#
OK,到这一步,我们就可以使用joshua这个用户,随意地登录mydb这个数据库了,需要的仅仅是在网站程序中进行一些配置就好。
我个人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 行记录)
可以看出,结果和之前是一样的。
OK,到目前为止,我们就已经能够成功在Windows上建立postgreSQL了,并且能够通过R语言方便地与其进行连接操作。