简单介绍:Mac 上安装和使用PostgreSQL的方法

96
作者 严三金
2016.08.11 17:33* 字数 1885

两句话概括:

  1. 网络上的文档,因为各自的配置环境不同,所以可以用来参考,但不一定对自己适用;
  2. 官网文档要稍稍权威一点,介绍的要全面一点,今天深有感触;

简介

1.PostgreSQL: 是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。

2.psql: 是PostgreSQL数据库的命令行交互工具

3.pgAdmin: 是PostgreSQL数据库的图形化管理工具

参考文献

老习惯,列出本文参考和引用的文档和博客,致以崇高的敬意,感兴趣的可以去看看
1.http://postgresapp.com/
2.http://postgresapp.com/documentation/cli-tools.html
3.http://www.yiibai.com/postgresql/2013080439.html

1.正文

公司项目连的都是远程数据库,安全起见,我还是弄个本地数据库,方便自己捣腾数据和后续的学习;
以前在linux(ubuntu 14.04)上,装过PostgreSql,还算熟悉。

1.1 安装postgresql

今天打算在Mac上安装PostgreSql以及它的图形化管理工具PgAdmin,方便对数据的查看和管理。
在Mac上安装PostgreSql,网络上很多方法都是通过homebrew来安装,命令也很简单

brew install postgresql

但是好像还有另一种方法,就是使用官网提供的Postgres.app,
号称是:The easiest way to get started with PostgreSQL on the Mac。
看到这条口号,是不是有点心动,按照官网的提示来:

Quick Installation Guide
1.Download
2.Move to /Applications
3.Double Click

Done! You now have a PostgreSQL server running on your Mac. 
To use the command line programs, set up your $PATH. 
If you prefer a graphical app, check out the list of GUI tools.

If you get an error saying “the identity of the developer cannot be confirmed”, 
please make sure you didn’t skip step 2. (more info)

安装好运行,界面如下,非常简洁,点击Preferences可以看数据文件夹路径;


Paste_Image.png


点击Open psql,按照以前在linux上安装PostgreSql的经验,安装好后,应该自动创建了一个postgres系统用户 和一个 postgres数据库用户(具有数据库管理权限),并且psql命令应该会默认使用postgres数据库用户 连接数据库。然而实际情况是这样:


Paste_Image.png


可以看到,psql命令执行后,却使用了atyun系统用户来连接数据库。
于是我推测,postgres系统用户 可能没有创建成功(atyun是我这台电脑的管理员账号)。直接进[系统偏好设置]->[用户与群组]查看是否有新增postgres用户,事实证明,并没有创建成功。
还能怎么办,自己手动创建吧:
我们创建一个postgres系统用户,密码自己创一个,赋予管理员权限,创建好之后,如下:


补充:之前没有自动创建postgres系统用户 成功的原因,我猜测可能是Mac的安全机制,
更改之前,要求我点击锁按钮。


Paste_Image.png


很有可能是这个原因导致安装PostgreSql后,没有自动成功的创建出postgres系统用户。
有了postgres系统用户我们来试一下 使用psql命令来连接数据库。

$ psql

问题出现:

command not found

原因是psql工具的绝对路径没有加载到 bash((default shell on OS X))的环境路径$PATH中。
在之前使用postgres.app ->open psql的时候,我们看到了 psql所在的绝对路径为:

/Applications/Postgres.app/Contents/Versions/9.5/bin/

1.2 配置我们的环境路径

Configure your $PATH 配置我们的环境路径(关于在mac上配置环境变量path, 这个和windows上还是挺有差异的,后面会整理一篇文档来介绍下

Postgres.app includes many command line tools. If you want to use them, you must configure the $PATH variable.
If you are using bash (default shell on OS X), add the following line to ~/.bash_profile:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.5/bin

If you’re using the fish shell, add the following to your config.fish (normally located at ~/.config/fish/config.fish):

set PATH /Applications/Postgres.app/Contents/Versions/9.5/bin $PATH

Tips 1: You can now check if the path is set up correctly by typing which psql.
可以使用 which psql 命令 查看该工具的绝对路径;
结果如下图:


1.3 切换用户,使用psql连接数据库

可以发现,psql连接数据库默认选用的是当前的系统用户;
切换其他系统用户命令(会要求你输入密码,之前我们设置过),然后登录数据库,发现会使用postgres用户访问数据库。

su postgres
psql


至此,我们学会了如何切换系统用户,以及通过psql访问连接数据库;下面介绍如何使用PostgreSql的基础用法:(创建、删除)数据库用户,修改用户密码,(创建、删除)数据库,创建数据库表;

2 使用PostgreSQL

2.1 修改用户密码

因为PostgreSQL自动创建了postgres数据库用户(默认密码应该是空的),所以我们首先要修改它的密码,使用psql命令连接数据库,再使用如下命令,修改该postgres数据库用户的密码(“XXXXXX”可由用户自定义):

alter user postgres with password 'XXXXXX';

结果如下:


Paste_Image.png


出现ALTER ROLE, 代表修改角色成功;

2.2 创建和删除数据库用户

对应命令如下(在postgres=# 环境下):
1.查看数据库用户列表: \du
2.创建数据库用户: create user user1 with password '123456';
3.删除数据库用户: drop user user1;
相应结果见下图:


2.3 创建和删除 数据库

对应命令如下(在postgres=# 环境下):
1.查看数据库列表: \l (list的意思)
2.创建数据库: create database db1;
3.删除数据库: drop database db1;


Paste_Image.png


解释:初始有4个数据库,数据库atyun隶属于atyun数据库用户,其他三个数据库隶属于postgres数据库用户;

2.4 创建和删除 数据库表

对应命令如下(在postgres=# 环境下):
1.选择数据库: \c DatabaseName (choose的意思)
2.创建数据库表: create table people;
3.删除数据库表: drop table people;
4.查看数据库信息:\d (database list的意思)


Paste_Image.png

3 使用pgAdmin图形化管理数据库

1. 运行pgAdmin,打开,创建连接


Paste_Image.png


2.填写相关配置信息:


Paste_Image.png

Paste_Image.png


点击save,进行保存。


Paste_Image.png


3. 查看
在db1/Schemas/public/Tables/下可以看到我们刚才创建的 数据表(department).


Paste_Image.png
PostgreSql